ray march node
|
@ -1907,6 +1907,7 @@
|
|||
{"name":"s_node_shadow_cast","order":50,"path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",},
|
||||
{"name":"s_node_shadow_type","order":1,"path":"sprites/s_node_shadow_type/s_node_shadow_type.yy",},
|
||||
{"name":"s_node_shadow","order":49,"path":"sprites/s_node_shadow/s_node_shadow.yy",},
|
||||
{"name":"s_node_shape_3d","order":26,"path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},
|
||||
{"name":"s_node_shape_blur","order":7,"path":"sprites/s_node_shape_blur/s_node_shape_blur.yy",},
|
||||
{"name":"s_node_shape_circle","order":24,"path":"sprites/s_node_shape_circle/s_node_shape_circle.yy",},
|
||||
{"name":"s_node_shape_leaf","order":25,"path":"sprites/s_node_shape_leaf/s_node_shape_leaf.yy",},
|
||||
|
|
|
@ -2481,6 +2481,7 @@
|
|||
{"id":{"name":"s_node_shadow_cast","path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",},},
|
||||
{"id":{"name":"s_node_shadow_type","path":"sprites/s_node_shadow_type/s_node_shadow_type.yy",},},
|
||||
{"id":{"name":"s_node_shadow","path":"sprites/s_node_shadow/s_node_shadow.yy",},},
|
||||
{"id":{"name":"s_node_shape_3d","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},},
|
||||
{"id":{"name":"s_node_shape_blur","path":"sprites/s_node_shape_blur/s_node_shape_blur.yy",},},
|
||||
{"id":{"name":"s_node_shape_circle","path":"sprites/s_node_shape_circle/s_node_shape_circle.yy",},},
|
||||
{"id":{"name":"s_node_shape_leaf","path":"sprites/s_node_shape_leaf/s_node_shape_leaf.yy",},},
|
||||
|
|
|
@ -1,27 +1,292 @@
|
|||
function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "RM Sphere";
|
||||
name = "RM Primitive";
|
||||
|
||||
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
shape_types = [
|
||||
"Plane", "Box", "Box Frame",
|
||||
-1,
|
||||
"Sphere", "Ellipse", "Cut Sphere", "Cut Hollow Sphere", "Torus", "Capped Torus",
|
||||
-1,
|
||||
"Cylinder", "Capsule", "Cone", "Capped Cone", "Round Cone", "3D Arc",
|
||||
-1,
|
||||
"Octahedron", "Pyramid",
|
||||
];
|
||||
shape_types_str = [];
|
||||
|
||||
var _ind = 0;
|
||||
for( var i = 0, n = array_length(shape_types); i < n; i++ ) {
|
||||
if(shape_types[i] == -1)
|
||||
shape_types_str[i] = -1;
|
||||
else
|
||||
shape_types_str[i] = new scrollItem(shape_types[i], s_node_shape_3d, _ind++, COLORS._main_icon_light);
|
||||
}
|
||||
|
||||
inputs[| 1] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
.setDisplay(VALUE_DISPLAY.enum_scroll, shape_types_str);
|
||||
|
||||
inputs[| 2] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 3] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 4] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 4, 0.01 ] });
|
||||
|
||||
inputs[| 5] = nodeValue("FOV", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 30)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 90, 1 ] });
|
||||
|
||||
inputs[| 6] = nodeValue("View Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 3, 6 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 7] = nodeValue("Depth", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 8] = nodeValue("Light Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ -.5, -.5, 1 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 9] = nodeValue("Ambient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
|
||||
|
||||
inputs[| 10] = nodeValue("Ambient Intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.2)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 11] = nodeValue("Elongate", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 12] = nodeValue("Rounded", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 13] = nodeValue("Projection", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
.setDisplay(VALUE_DISPLAY.enum_button, [ "Perspective", "Orthographic" ])
|
||||
.setVisible(false, false);
|
||||
|
||||
inputs[| 14] = nodeValue("Ortho Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 5.)
|
||||
|
||||
inputs[| 15] = nodeValue("Wave Amplitude", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 4, 4 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 16] = nodeValue("Wave Intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 17] = nodeValue("Wave Phase", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 18] = nodeValue("Twist Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||
.setDisplay(VALUE_DISPLAY.enum_button, [ "X", "Y", "Z" ]);
|
||||
|
||||
inputs[| 19] = nodeValue("Twist Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 8, 0.1 ] });
|
||||
|
||||
inputs[| 20] = nodeValue("Tile", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inputs[| 21] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 22] = nodeValue("Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .7)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 23] = nodeValue("Thickness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .2)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 24] = nodeValue("Crop", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] });
|
||||
|
||||
inputs[| 25] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 30.)
|
||||
.setDisplay(VALUE_DISPLAY.rotation);
|
||||
|
||||
inputs[| 26] = nodeValue("Height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .5)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 27] = nodeValue("Radius Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .7)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 28] = nodeValue("Uniform Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
outputs[| 0] = nodeValue("Surface Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
||||
input_base_length = ds_list_size(inputs);
|
||||
input_display_list = [ 0 ];
|
||||
input_display_list = [ 0,
|
||||
["Primitive", false], 1, 21, 22, 23, 24, 25, 26, 27, 28,
|
||||
["Modify", false], 12, 11,
|
||||
["Deform", true], 15, 16, 17, 18, 19,
|
||||
["Transform", false], 3, 4,
|
||||
["Camera", false], 13, 14, 5, 6,
|
||||
["Render", false], 7, 9, 10, 8, 20,
|
||||
];
|
||||
|
||||
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {}
|
||||
|
||||
static step = function() {}
|
||||
static step = function() {
|
||||
var _shp = getSingleValue( 1);
|
||||
var _ort = getSingleValue(13);
|
||||
|
||||
inputs[| 21].setVisible(false);
|
||||
inputs[| 22].setVisible(false);
|
||||
inputs[| 23].setVisible(false);
|
||||
inputs[| 24].setVisible(false);
|
||||
inputs[| 25].setVisible(false);
|
||||
inputs[| 26].setVisible(false);
|
||||
inputs[| 27].setVisible(false);
|
||||
inputs[| 28].setVisible(false);
|
||||
|
||||
var _shape = shape_types[_shp];
|
||||
switch(_shape) { // Size
|
||||
case "Box" :
|
||||
case "Box Frame" :
|
||||
case "Ellipse" :
|
||||
inputs[| 21].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Radius
|
||||
case "Sphere" :
|
||||
case "Torus" :
|
||||
case "Cut Sphere" :
|
||||
case "Cut Hollow Sphere" :
|
||||
case "Capped Torus" :
|
||||
case "Cylinder" :
|
||||
case "Capsule" :
|
||||
case "3D Arc" :
|
||||
inputs[| 22].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Thickness
|
||||
case "Box Frame" :
|
||||
case "Torus" :
|
||||
case "Cut Hollow Sphere" :
|
||||
case "Capped Torus" :
|
||||
inputs[| 23].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Crop
|
||||
case "Cut Sphere" :
|
||||
case "Cut Hollow Sphere" :
|
||||
inputs[| 24].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Angle
|
||||
case "Capped Torus" :
|
||||
case "Cone" :
|
||||
case "3D Arc" :
|
||||
inputs[| 25].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Height
|
||||
case "Cylinder" :
|
||||
case "Capsule" :
|
||||
case "Cone" :
|
||||
case "Capped Cone" :
|
||||
case "Round Cone" :
|
||||
inputs[| 26].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Radius Range
|
||||
case "Capped Cone" :
|
||||
case "Round Cone" :
|
||||
inputs[| 27].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Uniform Size
|
||||
case "Octahedron" :
|
||||
case "Pyramid" :
|
||||
inputs[| 28].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
inputs[| 5].setVisible(_ort == 0);
|
||||
inputs[| 14].setVisible(_ort == 1);
|
||||
}
|
||||
|
||||
static processData = function(_outSurf, _data, _output_index, _array_index = 0) {
|
||||
var _dim = _data[0];
|
||||
var _dim = _data[0];
|
||||
var _shp = _data[1];
|
||||
|
||||
var _pos = _data[2];
|
||||
var _rot = _data[3];
|
||||
var _sca = _data[4];
|
||||
|
||||
var _fov = _data[5];
|
||||
var _rng = _data[6];
|
||||
|
||||
var _dpi = _data[7];
|
||||
var _lPos = _data[8];
|
||||
var _amb = _data[9];
|
||||
var _ambI = _data[10];
|
||||
var _elon = _data[11];
|
||||
var _rond = _data[12];
|
||||
|
||||
var _ort = _data[13];
|
||||
var _ortS = _data[14];
|
||||
|
||||
var _wavA = _data[15];
|
||||
var _wavI = _data[16];
|
||||
var _wavS = _data[17];
|
||||
var _twsX = _data[18];
|
||||
var _twsA = _data[19];
|
||||
var _tile = _data[20];
|
||||
|
||||
var _size = _data[21];
|
||||
var _rad = _data[22];
|
||||
var _thk = _data[23];
|
||||
var _crop = _data[24];
|
||||
var _angl = _data[25];
|
||||
var _heig = _data[26];
|
||||
var _radR = _data[27];
|
||||
var _sizz = _data[28];
|
||||
|
||||
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1]);
|
||||
|
||||
surface_set_shader(_outSurf, sh_rm_primitive);
|
||||
shader_set_i("shape", _shp);
|
||||
shader_set_f("size", _size);
|
||||
shader_set_f("radius", _rad);
|
||||
shader_set_f("thickness", _thk);
|
||||
shader_set_f("crop", _crop);
|
||||
shader_set_f("angle", degtorad(_angl));
|
||||
shader_set_f("height", _heig);
|
||||
shader_set_f("radRange", _radR);
|
||||
shader_set_f("sizeUni", _sizz);
|
||||
shader_set_f("elongate", _elon);
|
||||
shader_set_f("rounded", _rond);
|
||||
|
||||
shader_set_f("waveAmp", _wavA);
|
||||
shader_set_f("waveInt", _wavI);
|
||||
shader_set_f("waveShift", _wavS);
|
||||
|
||||
shader_set_i("twistAxis", _twsX);
|
||||
shader_set_f("twistAmount", _twsA);
|
||||
|
||||
shader_set_f("position", _pos);
|
||||
shader_set_f("rotation", _rot);
|
||||
shader_set_f("objectScale", _sca);
|
||||
|
||||
shader_set_i("ortho", _ort);
|
||||
shader_set_f("fov", _fov);
|
||||
shader_set_f("orthoScale",_ortS);
|
||||
shader_set_f("viewRange", _rng);
|
||||
shader_set_f("depthInt", _dpi);
|
||||
shader_set_f("tileSize", _tile);
|
||||
|
||||
shader_set_color("ambient", _amb);
|
||||
shader_set_f("ambientIntns", _ambI);
|
||||
shader_set_f("lightPosition", _lPos);
|
||||
|
||||
draw_sprite_stretched(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1]);
|
||||
surface_reset_shader();
|
||||
|
||||
return _outSurf;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,9 +5,41 @@ varying vec2 v_vTexcoord;
|
|||
varying vec4 v_vColour;
|
||||
|
||||
const int MAX_MARCHING_STEPS = 255;
|
||||
const float MIN_DIST = 3.;
|
||||
const float MAX_DIST = 6.;
|
||||
const float EPSILON = .0001;
|
||||
const float EPSILON = .0001;
|
||||
|
||||
uniform int shape;
|
||||
uniform vec3 size;
|
||||
uniform float radius;
|
||||
uniform float thickness;
|
||||
uniform float crop;
|
||||
uniform float angle;
|
||||
uniform float height;
|
||||
uniform vec2 radRange;
|
||||
uniform float sizeUni;
|
||||
uniform vec3 elongate;
|
||||
uniform float rounded;
|
||||
|
||||
uniform vec3 waveAmp;
|
||||
uniform vec3 waveInt;
|
||||
uniform vec3 waveShift;
|
||||
|
||||
uniform int twistAxis;
|
||||
uniform float twistAmount;
|
||||
|
||||
uniform vec3 position;
|
||||
uniform vec3 rotation;
|
||||
uniform float objectScale;
|
||||
|
||||
uniform int ortho;
|
||||
uniform float fov;
|
||||
uniform float orthoScale;
|
||||
uniform vec2 viewRange;
|
||||
uniform float depthInt;
|
||||
uniform vec3 tileSize;
|
||||
|
||||
uniform vec4 ambient;
|
||||
uniform float ambientIntns;
|
||||
uniform vec3 lightPosition;
|
||||
|
||||
#region ================ Transform ================
|
||||
mat3 rotateX(float dg) {
|
||||
|
@ -57,7 +89,7 @@ const float EPSILON = .0001;
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region ================ Primitives ================
|
||||
#region =============== Primitives ================
|
||||
|
||||
float dot2( in vec2 v ) { return dot(v,v); }
|
||||
float dot2( in vec3 v ) { return dot(v,v); }
|
||||
|
@ -84,8 +116,8 @@ const float EPSILON = .0001;
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
float sdSphere(vec3 p) {
|
||||
return length(p) - 1.0;
|
||||
float sdSphere(vec3 p, float radius) {
|
||||
return length(p) - radius;
|
||||
}
|
||||
|
||||
float sdEllipsoid( vec3 p, vec3 r ) {
|
||||
|
@ -99,6 +131,7 @@ const float EPSILON = .0001;
|
|||
return length(q)-t.y;
|
||||
}
|
||||
|
||||
// r is the sphere's radius, h is the plane's position
|
||||
float sdCutSphere( vec3 p, float r, float h ) {
|
||||
// sampling independent computations (only depend on shape)
|
||||
float w = sqrt(r*r-h*h);
|
||||
|
@ -110,7 +143,10 @@ const float EPSILON = .0001;
|
|||
(q.x<w) ? h - q.y :
|
||||
length(q-vec2(w,h));
|
||||
}
|
||||
|
||||
|
||||
// r = sphere's radius
|
||||
// h = cutting's plane's position
|
||||
// t = thickness
|
||||
float sdCutHollowSphere( vec3 p, float r, float h, float t ) {
|
||||
// sampling independent computations (only depend on shape)
|
||||
float w = sqrt(r*r-h*h);
|
||||
|
@ -121,7 +157,9 @@ const float EPSILON = .0001;
|
|||
abs(length(q)-r) ) - t;
|
||||
}
|
||||
|
||||
float sdCappedTorus( vec3 p, vec2 sc, float ra, float rb) {
|
||||
float sdCappedTorus( vec3 p, float an, float ra, float rb) {
|
||||
vec2 sc = vec2(sin(an),cos(an));
|
||||
|
||||
p.x = abs(p.x);
|
||||
float k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);
|
||||
return sqrt( dot(p,p) + ra*ra - 2.0*ra*k ) - rb;
|
||||
|
@ -144,7 +182,8 @@ const float EPSILON = .0001;
|
|||
return length( pa - ba*h ) - r;
|
||||
}
|
||||
|
||||
float sdCone( vec3 p, vec2 c, float h ) {
|
||||
float sdCone( vec3 p, float an, float h ) {
|
||||
vec2 c = vec2(sin(an),cos(an));
|
||||
// c is the sin/cos of the angle, h is height
|
||||
// Alternatively pass q instead of (c,h),
|
||||
// which is the point at the base in 2D
|
||||
|
@ -169,7 +208,7 @@ const float EPSILON = .0001;
|
|||
return s*sqrt( min(dot2(ca),dot2(cb)) );
|
||||
}
|
||||
|
||||
float sdRoundCone( vec3 p, float r1, float r2, float h ) {
|
||||
float sdRoundCone( vec3 p, float h, float r1, float r2 ) {
|
||||
// sampling independent computations (only depend on shape)
|
||||
float b = (r1-r2)/h;
|
||||
float a = sqrt(1.0-b*b);
|
||||
|
@ -182,8 +221,8 @@ const float EPSILON = .0001;
|
|||
return dot(q, vec2(a,b) ) - r1;
|
||||
}
|
||||
|
||||
float sdSolidAngle( vec3 p, vec2 c, float ra ) {
|
||||
// c is the sin/cos of the angle
|
||||
float sdSolidAngle( vec3 p, float an, float ra ) {
|
||||
vec2 c = vec2(sin(an),cos(an));
|
||||
vec2 q = vec2( length(p.xz), p.y );
|
||||
float l = length(q) - ra;
|
||||
float m = length(q - c*clamp(dot(q,c),0.0,ra) );
|
||||
|
@ -226,16 +265,110 @@ const float EPSILON = .0001;
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region ================= Modify ==================
|
||||
|
||||
vec4 opElongate( in vec3 p, in vec3 h ) {
|
||||
vec3 q = abs(p)-h;
|
||||
return vec4( max(q,0.0), min(max(q.x,max(q.y,q.z)),0.0) );
|
||||
}
|
||||
|
||||
vec3 wave(vec3 p) {
|
||||
p.x += sin(p.y * waveAmp.y + waveShift.x) * waveInt.x +
|
||||
sin(p.z * waveAmp.z + waveShift.x) * waveInt.x;
|
||||
p.y += sin(p.x * waveAmp.x + waveShift.y) * waveInt.y +
|
||||
sin(p.z * waveAmp.z + waveShift.y) * waveInt.y;
|
||||
p.z += sin(p.y * waveAmp.y + waveShift.z) * waveInt.z +
|
||||
sin(p.x * waveAmp.x + waveShift.z) * waveInt.z;
|
||||
return p;
|
||||
}
|
||||
|
||||
vec3 twist(vec3 p) {
|
||||
|
||||
float c = cos(twistAmount * p[twistAxis]);
|
||||
float s = sin(twistAmount * p[twistAxis]);
|
||||
mat2 m = mat2(c, -s, s, c);
|
||||
|
||||
if(twistAxis == 0) {
|
||||
vec2 q = m * p.yz;
|
||||
return vec3(p.x, q);
|
||||
|
||||
} else if(twistAxis == 1) {
|
||||
vec2 q = m * p.xz;
|
||||
return vec3(q.x, p.y, q.y);
|
||||
|
||||
} else if(twistAxis == 2) {
|
||||
vec2 q = m * p.xy;
|
||||
return vec3(q, p.z);
|
||||
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================ View Mod =================
|
||||
|
||||
float round(float v) { return fract(v) >= 0.5? ceil(v) : floor(v); }
|
||||
vec3 round(vec3 v) { return vec3(round(v.x), round(v.y), round(v.z)); }
|
||||
|
||||
vec3 tilePosition(vec3 p) {
|
||||
vec3 q = p - tileSize * round(p / tileSize);
|
||||
return q;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
float sceneSDF(vec3 p) {
|
||||
float d;
|
||||
mat3 rx = rotateX(45.);
|
||||
mat3 ry = rotateY(45.);
|
||||
mat3 rx = rotateX(rotation.x);
|
||||
mat3 ry = rotateY(rotation.y);
|
||||
mat3 rz = rotateZ(rotation.z);
|
||||
|
||||
p = inverse(rx * ry) * p;
|
||||
p = inverse(rx * ry * rz) * p;
|
||||
p /= objectScale;
|
||||
p -= position;
|
||||
|
||||
// d = sdSphere(p);
|
||||
// d = sdBox(p, vec3(.5));
|
||||
d = sdBoxFrame(p, vec3(.5), 0.1);
|
||||
if(tileSize != vec3(0.))
|
||||
p = tilePosition(p);
|
||||
|
||||
p = twist(p);
|
||||
p = wave(p);
|
||||
|
||||
vec4 el = vec4(0.);
|
||||
|
||||
if(elongate != vec3(0.)) {
|
||||
el = opElongate(p, elongate);
|
||||
p = el.xyz;
|
||||
}
|
||||
|
||||
if(shape == 0) d = sdPlane(p, vec3(0., 0., 1.), 0.);
|
||||
else if(shape == 1) d = sdBox(p, size / 2.);
|
||||
else if(shape == 2) d = sdBoxFrame(p, size / 2., thickness);
|
||||
//3
|
||||
else if(shape == 4) d = sdSphere(p, radius);
|
||||
else if(shape == 5) d = sdEllipsoid(p, size / 2.);
|
||||
else if(shape == 6) d = sdCutSphere(p, radius, crop);
|
||||
else if(shape == 7) d = sdCutHollowSphere(p, radius, crop, thickness);
|
||||
else if(shape == 8) d = sdTorus(p, vec2(radius, thickness));
|
||||
else if(shape == 9) d = sdCappedTorus(p, angle, radius, thickness);
|
||||
//10
|
||||
else if(shape == 11) d = sdCappedCylinder(p, height, radius);
|
||||
else if(shape == 12) d = sdCapsule(p, vec3(-height, 0., 0.), vec3(height, 0., 0.), radius);
|
||||
else if(shape == 13) d = sdCone(p, angle, height);
|
||||
else if(shape == 14) d = sdCappedCone(p, height, radRange.x, radRange.y);
|
||||
else if(shape == 15) d = sdRoundCone(p, height, radRange.x, radRange.y);
|
||||
else if(shape == 16) d = sdSolidAngle(p, angle, radius);
|
||||
//17
|
||||
else if(shape == 18) d = sdOctahedron(p, sizeUni);
|
||||
else if(shape == 19) d = sdPyramid(p, sizeUni);
|
||||
|
||||
if(elongate != vec3(0.)) {
|
||||
d += el.w;
|
||||
}
|
||||
|
||||
d -= rounded;
|
||||
d *= objectScale;
|
||||
|
||||
return d;
|
||||
}
|
||||
|
@ -249,7 +382,7 @@ vec3 normal(vec3 p) {
|
|||
}
|
||||
|
||||
float march(vec3 camera, vec3 direction) {
|
||||
float depth = MIN_DIST;
|
||||
float depth = viewRange.x;
|
||||
|
||||
for (int i = 0; i < MAX_MARCHING_STEPS; i++) {
|
||||
float dist = sceneSDF(camera + depth * direction);
|
||||
|
@ -257,34 +390,43 @@ float march(vec3 camera, vec3 direction) {
|
|||
return depth;
|
||||
|
||||
depth += dist;
|
||||
if (depth >= MAX_DIST)
|
||||
return MAX_DIST;
|
||||
if (depth >= viewRange.y)
|
||||
return viewRange.y;
|
||||
}
|
||||
|
||||
return MAX_DIST;
|
||||
return viewRange.y;
|
||||
}
|
||||
|
||||
void main() {
|
||||
float z = 1. / tan(radians(30.) / 2.);
|
||||
vec3 dir = normalize(vec3((v_vTexcoord - .5) * 2., -z));
|
||||
vec3 eye = vec3(0., 0., 5.);
|
||||
vec3 eye, dir;
|
||||
|
||||
if(ortho == 1) {
|
||||
dir = vec3(0., 0., 1.);
|
||||
eye = vec3((v_vTexcoord - .5) * 2. * orthoScale, viewRange.x);
|
||||
|
||||
} else {
|
||||
float z = 1. / tan(radians(fov) / 2.);
|
||||
dir = normalize(vec3((v_vTexcoord - .5) * 2., -z));
|
||||
eye = vec3(0., 0., 5.);
|
||||
}
|
||||
|
||||
float dist = march(eye, dir);
|
||||
|
||||
if(dist > MAX_DIST - EPSILON) {
|
||||
if(dist > viewRange.y - EPSILON) {
|
||||
gl_FragColor = vec4(0., 0., 0., 1.);
|
||||
return;
|
||||
}
|
||||
|
||||
vec3 c = vec3(1.);
|
||||
vec3 c = ambient.rgb;
|
||||
|
||||
float distNorm = 1. - (dist - MIN_DIST) / (MAX_DIST - MIN_DIST);
|
||||
float distNorm = 1. - (dist - viewRange.x) / (viewRange.y - viewRange.x);
|
||||
distNorm = smoothstep(.0, .3, distNorm) + .2;
|
||||
c *= vec3(distNorm);
|
||||
c *= mix(vec3(1.), vec3(distNorm), depthInt);
|
||||
|
||||
vec3 coll = eye + dir * dist;
|
||||
vec3 norm = normal(coll);
|
||||
vec3 light = normalize(vec3(-0.5, -0.5, 1.));
|
||||
float lamo = dot(norm, light) + 0.2;
|
||||
vec3 light = normalize(lightPosition);
|
||||
float lamo = dot(norm, light) + ambientIntns;
|
||||
|
||||
c *= lamo;
|
||||
|
||||
|
|
BIN
sprites/s_node_shape_3d/03f758c5-0f2b-471c-9bb3-a08437719dd7.png
Normal file
After Width: | Height: | Size: 748 B |
BIN
sprites/s_node_shape_3d/0722182a-6a52-48c9-ad6e-71e2a1f4a1a6.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
sprites/s_node_shape_3d/13d9fd09-286d-4a23-ac42-2f3e52c09bed.png
Normal file
After Width: | Height: | Size: 668 B |
BIN
sprites/s_node_shape_3d/182fec8b-d5d9-4179-8285-4dcf33c5b4aa.png
Normal file
After Width: | Height: | Size: 629 B |
BIN
sprites/s_node_shape_3d/25d1fd94-e801-4236-920e-931be44954be.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
sprites/s_node_shape_3d/37790c04-f438-4d6f-9883-4050e9b91ea1.png
Normal file
After Width: | Height: | Size: 858 B |
BIN
sprites/s_node_shape_3d/46eca356-3c1c-4db2-9c70-fad60ee33971.png
Normal file
After Width: | Height: | Size: 827 B |
BIN
sprites/s_node_shape_3d/523b3356-ed87-4998-bb44-449d347e8d0a.png
Normal file
After Width: | Height: | Size: 565 B |
BIN
sprites/s_node_shape_3d/a3a465f9-7d13-48c5-a59d-e5a2453602e2.png
Normal file
After Width: | Height: | Size: 677 B |
BIN
sprites/s_node_shape_3d/a8ab0827-e277-4fe0-af42-0a493e3f300e.png
Normal file
After Width: | Height: | Size: 626 B |
BIN
sprites/s_node_shape_3d/ac1b25a5-14b0-48d2-8514-950fa4e40834.png
Normal file
After Width: | Height: | Size: 739 B |
BIN
sprites/s_node_shape_3d/ada07b25-2b68-464c-8d15-1eb968b2aea6.png
Normal file
After Width: | Height: | Size: 834 B |
BIN
sprites/s_node_shape_3d/adbc388b-49f9-47de-8d91-7ab7405eba30.png
Normal file
After Width: | Height: | Size: 744 B |
BIN
sprites/s_node_shape_3d/c0f5b4b1-753c-4d80-8999-87f6036f42aa.png
Normal file
After Width: | Height: | Size: 559 B |
BIN
sprites/s_node_shape_3d/d8f5c08f-c4a0-4a37-ac98-2504f79c363e.png
Normal file
After Width: | Height: | Size: 447 B |
BIN
sprites/s_node_shape_3d/e55537e4-4b14-4690-9234-c3de34d01049.png
Normal file
After Width: | Height: | Size: 669 B |
BIN
sprites/s_node_shape_3d/fbefaeba-464c-4984-9c90-b9fe8a68f749.png
Normal file
After Width: | Height: | Size: 681 B |
After Width: | Height: | Size: 748 B |
After Width: | Height: | Size: 702 B |
After Width: | Height: | Size: 668 B |
After Width: | Height: | Size: 629 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 858 B |
After Width: | Height: | Size: 827 B |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 677 B |
After Width: | Height: | Size: 626 B |
After Width: | Height: | Size: 739 B |
After Width: | Height: | Size: 834 B |
After Width: | Height: | Size: 744 B |
After Width: | Height: | Size: 559 B |
After Width: | Height: | Size: 447 B |
After Width: | Height: | Size: 669 B |
After Width: | Height: | Size: 681 B |
154
sprites/s_node_shape_3d/s_node_shape_3d.yy
Normal file
|
@ -0,0 +1,154 @@
|
|||
{
|
||||
"$GMSprite":"",
|
||||
"%Name":"s_node_shape_3d",
|
||||
"bboxMode":0,
|
||||
"bbox_bottom":22,
|
||||
"bbox_left":1,
|
||||
"bbox_right":22,
|
||||
"bbox_top":1,
|
||||
"collisionKind":1,
|
||||
"collisionTolerance":0,
|
||||
"DynamicTexturePage":false,
|
||||
"edgeFiltering":false,
|
||||
"For3D":false,
|
||||
"frames":[
|
||||
{"$GMSpriteFrame":"","%Name":"d8f5c08f-c4a0-4a37-ac98-2504f79c363e","name":"d8f5c08f-c4a0-4a37-ac98-2504f79c363e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"fbefaeba-464c-4984-9c90-b9fe8a68f749","name":"fbefaeba-464c-4984-9c90-b9fe8a68f749","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"25d1fd94-e801-4236-920e-931be44954be","name":"25d1fd94-e801-4236-920e-931be44954be","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"13d9fd09-286d-4a23-ac42-2f3e52c09bed","name":"13d9fd09-286d-4a23-ac42-2f3e52c09bed","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"182fec8b-d5d9-4179-8285-4dcf33c5b4aa","name":"182fec8b-d5d9-4179-8285-4dcf33c5b4aa","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"adbc388b-49f9-47de-8d91-7ab7405eba30","name":"adbc388b-49f9-47de-8d91-7ab7405eba30","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"ada07b25-2b68-464c-8d15-1eb968b2aea6","name":"ada07b25-2b68-464c-8d15-1eb968b2aea6","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"03f758c5-0f2b-471c-9bb3-a08437719dd7","name":"03f758c5-0f2b-471c-9bb3-a08437719dd7","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"37790c04-f438-4d6f-9883-4050e9b91ea1","name":"37790c04-f438-4d6f-9883-4050e9b91ea1","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"a8ab0827-e277-4fe0-af42-0a493e3f300e","name":"a8ab0827-e277-4fe0-af42-0a493e3f300e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"c0f5b4b1-753c-4d80-8999-87f6036f42aa","name":"c0f5b4b1-753c-4d80-8999-87f6036f42aa","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"0722182a-6a52-48c9-ad6e-71e2a1f4a1a6","name":"0722182a-6a52-48c9-ad6e-71e2a1f4a1a6","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"e55537e4-4b14-4690-9234-c3de34d01049","name":"e55537e4-4b14-4690-9234-c3de34d01049","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"46eca356-3c1c-4db2-9c70-fad60ee33971","name":"46eca356-3c1c-4db2-9c70-fad60ee33971","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"ac1b25a5-14b0-48d2-8514-950fa4e40834","name":"ac1b25a5-14b0-48d2-8514-950fa4e40834","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"a3a465f9-7d13-48c5-a59d-e5a2453602e2","name":"a3a465f9-7d13-48c5-a59d-e5a2453602e2","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"523b3356-ed87-4998-bb44-449d347e8d0a","name":"523b3356-ed87-4998-bb44-449d347e8d0a","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
],
|
||||
"gridX":0,
|
||||
"gridY":0,
|
||||
"height":24,
|
||||
"HTile":false,
|
||||
"layers":[
|
||||
{"$GMImageLayer":"","%Name":"d643ed43-cc1b-48da-94ba-8b43d929cf56","blendMode":0,"displayName":"default","isLocked":false,"name":"d643ed43-cc1b-48da-94ba-8b43d929cf56","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
|
||||
],
|
||||
"name":"s_node_shape_3d",
|
||||
"nineSlice":null,
|
||||
"origin":4,
|
||||
"parent":{
|
||||
"name":"nodes",
|
||||
"path":"folders/sprites/nodes.yy",
|
||||
},
|
||||
"preMultiplyAlpha":false,
|
||||
"resourceType":"GMSprite",
|
||||
"resourceVersion":"2.0",
|
||||
"sequence":{
|
||||
"$GMSequence":"",
|
||||
"%Name":"s_node_shape_3d",
|
||||
"autoRecord":true,
|
||||
"backdropHeight":768,
|
||||
"backdropImageOpacity":0.5,
|
||||
"backdropImagePath":"",
|
||||
"backdropWidth":1366,
|
||||
"backdropXOffset":0.0,
|
||||
"backdropYOffset":0.0,
|
||||
"events":{
|
||||
"$KeyframeStore<MessageEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MessageEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"eventStubScript":null,
|
||||
"eventToFunction":{},
|
||||
"length":17.0,
|
||||
"lockOrigin":false,
|
||||
"moments":{
|
||||
"$KeyframeStore<MomentsEventKeyframe>":"",
|
||||
"Keyframes":[],
|
||||
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
|
||||
"resourceVersion":"2.0",
|
||||
},
|
||||
"name":"s_node_shape_3d",
|
||||
"playback":1,
|
||||
"playbackSpeed":30.0,
|
||||
"playbackSpeedType":0,
|
||||
"resourceType":"GMSequence",
|
||||
"resourceVersion":"2.0",
|
||||
"showBackdrop":true,
|
||||
"showBackdropImage":false,
|
||||
"timeUnits":1,
|
||||
"tracks":[
|
||||
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"d8f5c08f-c4a0-4a37-ac98-2504f79c363e","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"c0f669d7-4408-4cfa-a944-296479fb184d","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"fbefaeba-464c-4984-9c90-b9fe8a68f749","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"25a6777a-da4b-42b8-ba7a-20dbd12b3126","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"25d1fd94-e801-4236-920e-931be44954be","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"81f1c6da-40b6-416f-8792-badc84fde353","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"13d9fd09-286d-4a23-ac42-2f3e52c09bed","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"59e94d5b-d00a-4198-8ed8-f50830db8bdf","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"182fec8b-d5d9-4179-8285-4dcf33c5b4aa","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"e5d66219-9c05-4bcb-a773-8263a0ca2989","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"adbc388b-49f9-47de-8d91-7ab7405eba30","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"0f11ca96-4495-4ba2-90ba-53c26567cdc4","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"ada07b25-2b68-464c-8d15-1eb968b2aea6","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"d2145a4a-61a9-4424-a25f-2e0324a3e8bd","IsCreationKey":false,"Key":6.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"03f758c5-0f2b-471c-9bb3-a08437719dd7","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"00868693-3297-4028-83a7-886ba6a7052a","IsCreationKey":false,"Key":7.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"37790c04-f438-4d6f-9883-4050e9b91ea1","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"e2b062f2-d597-47bb-9af0-d1c863e3304d","IsCreationKey":false,"Key":8.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"a8ab0827-e277-4fe0-af42-0a493e3f300e","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"55210206-52e9-490a-8955-44f52c54f548","IsCreationKey":false,"Key":9.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"c0f5b4b1-753c-4d80-8999-87f6036f42aa","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"f6e3bd31-0350-4a09-a43f-962458fd1766","IsCreationKey":false,"Key":10.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"0722182a-6a52-48c9-ad6e-71e2a1f4a1a6","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"b7178321-f8d8-409d-b222-6323d8db1593","IsCreationKey":false,"Key":11.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"e55537e4-4b14-4690-9234-c3de34d01049","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"4c8c2246-e279-46f0-b866-dc493a4bd1e7","IsCreationKey":false,"Key":12.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"46eca356-3c1c-4db2-9c70-fad60ee33971","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"83286b14-44ca-4ac3-aeb3-23955f7c2f07","IsCreationKey":false,"Key":13.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"ac1b25a5-14b0-48d2-8514-950fa4e40834","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"eda13e74-4a39-476c-82a3-616c697e3e1a","IsCreationKey":false,"Key":14.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"a3a465f9-7d13-48c5-a59d-e5a2453602e2","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"41772dd3-be9e-442a-aeca-cf53d5fe533e","IsCreationKey":false,"Key":15.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"523b3356-ed87-4998-bb44-449d347e8d0a","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"de5a2725-9827-40cc-89bf-5f0838d090a8","IsCreationKey":false,"Key":16.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||
],
|
||||
"visibleRange":null,
|
||||
"volume":1.0,
|
||||
"xorigin":12,
|
||||
"yorigin":12,
|
||||
},
|
||||
"swatchColours":null,
|
||||
"swfPrecision":0.5,
|
||||
"textureGroupId":{
|
||||
"name":"Default",
|
||||
"path":"texturegroups/Default",
|
||||
},
|
||||
"type":0,
|
||||
"VTile":false,
|
||||
"width":24,
|
||||
}
|