mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-25 06:26:42 +01:00
rm terrain
This commit is contained in:
parent
4189b81b3d
commit
39d2d4ce59
18 changed files with 351 additions and 351 deletions
|
@ -965,8 +965,8 @@
|
|||
{"name":"node_rigid_variable","order":11,"path":"scripts/node_rigid_variable/node_rigid_variable.yy",},
|
||||
{"name":"node_rigid_wall","order":12,"path":"scripts/node_rigid_wall/node_rigid_wall.yy",},
|
||||
{"name":"node_rim","order":22,"path":"scripts/node_rim/node_rim.yy",},
|
||||
{"name":"node_rm_extrude","order":2,"path":"scripts/node_rm_extrude/node_rm_extrude.yy",},
|
||||
{"name":"node_rm_primitive","order":1,"path":"scripts/node_rm_primitive/node_rm_primitive.yy",},
|
||||
{"name":"node_rm_terrain","order":2,"path":"scripts/node_rm_terrain/node_rm_terrain.yy",},
|
||||
{"name":"node_sampler","order":3,"path":"scripts/node_sampler/node_sampler.yy",},
|
||||
{"name":"node_scale_algo","order":12,"path":"scripts/node_scale_algo/node_scale_algo.yy",},
|
||||
{"name":"node_scale","order":8,"path":"scripts/node_scale/node_scale.yy",},
|
||||
|
@ -1478,7 +1478,7 @@
|
|||
{"name":"sh_remove_black","order":17,"path":"shaders/sh_remove_black/sh_remove_black.yy",},
|
||||
{"name":"sh_replace_color","order":4,"path":"shaders/sh_replace_color/sh_replace_color.yy",},
|
||||
{"name":"sh_rim","order":39,"path":"shaders/sh_rim/sh_rim.yy",},
|
||||
{"name":"sh_rm_extrude","order":1,"path":"shaders/sh_rm_extrude/sh_rm_extrude.yy",},
|
||||
{"name":"sh_rm_terrain","order":1,"path":"shaders/sh_rm_terrain/sh_rm_terrain.yy",},
|
||||
{"name":"sh_rsh_erode","order":2,"path":"shaders/sh_rsh_erode/sh_rsh_erode.yy",},
|
||||
{"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},
|
||||
{"name":"sh_sample_points","order":9,"path":"shaders/sh_sample_points/sh_sample_points.yy",},
|
||||
|
|
|
@ -1409,8 +1409,8 @@
|
|||
{"id":{"name":"node_rigid_variable","path":"scripts/node_rigid_variable/node_rigid_variable.yy",},},
|
||||
{"id":{"name":"node_rigid_wall","path":"scripts/node_rigid_wall/node_rigid_wall.yy",},},
|
||||
{"id":{"name":"node_rim","path":"scripts/node_rim/node_rim.yy",},},
|
||||
{"id":{"name":"node_rm_extrude","path":"scripts/node_rm_extrude/node_rm_extrude.yy",},},
|
||||
{"id":{"name":"node_rm_primitive","path":"scripts/node_rm_primitive/node_rm_primitive.yy",},},
|
||||
{"id":{"name":"node_rm_terrain","path":"scripts/node_rm_terrain/node_rm_terrain.yy",},},
|
||||
{"id":{"name":"node_sampler","path":"scripts/node_sampler/node_sampler.yy",},},
|
||||
{"id":{"name":"node_scale_algo","path":"scripts/node_scale_algo/node_scale_algo.yy",},},
|
||||
{"id":{"name":"node_scale","path":"scripts/node_scale/node_scale.yy",},},
|
||||
|
@ -2008,8 +2008,8 @@
|
|||
{"id":{"name":"sh_remove_black","path":"shaders/sh_remove_black/sh_remove_black.yy",},},
|
||||
{"id":{"name":"sh_replace_color","path":"shaders/sh_replace_color/sh_replace_color.yy",},},
|
||||
{"id":{"name":"sh_rim","path":"shaders/sh_rim/sh_rim.yy",},},
|
||||
{"id":{"name":"sh_rm_extrude","path":"shaders/sh_rm_extrude/sh_rm_extrude.yy",},},
|
||||
{"id":{"name":"sh_rm_primitive","path":"shaders/sh_rm_primitive/sh_rm_primitive.yy",},},
|
||||
{"id":{"name":"sh_rm_terrain","path":"shaders/sh_rm_terrain/sh_rm_terrain.yy",},},
|
||||
{"id":{"name":"sh_rsh_corner","path":"shaders/sh_rsh_corner/sh_rsh_corner.yy",},},
|
||||
{"id":{"name":"sh_rsh_erode","path":"shaders/sh_rsh_erode/sh_rsh_erode.yy",},},
|
||||
{"id":{"name":"sh_rsh_rotate","path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},},
|
||||
|
|
|
@ -751,8 +751,9 @@ function __initNodes() {
|
|||
addNodeObject(generator, "Region Fill", s_node_region_fill, "Node_Region_Fill", [1, Node_Region_Fill],, "Fill connected pixel with colors.").setVersion(1147);
|
||||
addNodeObject(generator, "Flood Fill", s_node_flood_fill, "Node_Flood_Fill", [1, Node_Flood_Fill],, "Filled connected pixel given position and color.").setVersion(1133);
|
||||
|
||||
ds_list_add(generator, "Ray March");
|
||||
ds_list_add(generator, "Ray Marching");
|
||||
addNodeObject(generator, "RM Primitive", s_node_rm_primitive, "Node_RM_Primitive", [1, Node_RM_Primitive], ["ray marching"]).setVersion(11720);
|
||||
addNodeObject(generator, "RM Terrain", s_node_rm_primitive, "Node_RM_Terrain", [1, Node_RM_Terrain], ["ray marching"]).setVersion(11720);
|
||||
|
||||
ds_list_add(generator, "MK Effects");
|
||||
addNodeObject(generator, "MK Rain", s_node_mk_rain, "Node_MK_Rain", [1, Node_MK_Rain]).setVersion(11600);
|
||||
|
@ -953,11 +954,11 @@ function __initNodes() {
|
|||
addNodeObject(animation, "Stagger", s_node_stagger, "Node_Stagger", [1, Node_Stagger]).setVersion(11640);
|
||||
|
||||
ds_list_add(animation, "Value");
|
||||
addNodeObject(animation, "WaveTable", s_node_wave, "Node_Fn_WaveTable", [1, Node_Fn_WaveTable],, "Create value changing overtime in wave pattern.");
|
||||
addNodeObject(animation, "WaveTable", s_node_wave, "Node_Fn_WaveTable", [1, Node_Fn_WaveTable],, "Create value changing overtime in wave pattern.").setVersion(11720);
|
||||
addNodeObject(animation, "Wiggler", s_node_wiggler, "Node_Wiggler", [1, Node_Wiggler],, "Create random value smoothly changing over time.");
|
||||
addNodeObject(animation, "Ease", s_node_ease, "Node_Fn_Ease", [1, Node_Fn_Ease],, "");
|
||||
addNodeObject(animation, "Math", s_node_fx_math, "Node_Fn_Math", [1, Node_Fn_Math],, "");
|
||||
addNodeObject(animation, "SmoothStep", s_node_fx_smoothstep, "Node_Fn_SmoothStep", [1, Node_Fn_SmoothStep],, "");
|
||||
addNodeObject(animation, "Ease", s_node_ease, "Node_Fn_Ease", [1, Node_Fn_Ease],, "").setVersion(11720);
|
||||
addNodeObject(animation, "Math", s_node_fx_math, "Node_Fn_Math", [1, Node_Fn_Math],, "").setVersion(11720);
|
||||
addNodeObject(animation, "SmoothStep", s_node_fx_smoothstep, "Node_Fn_SmoothStep", [1, Node_Fn_SmoothStep],, "").setVersion(11720);
|
||||
|
||||
ds_list_add(animation, "Audio");
|
||||
addNodeObject(animation, "WAV File In", s_node_wav_file_read, "Node_WAV_File_Read", [0, Node_create_WAV_File_Read],, "Load wav audio file.").setVersion(1144);
|
||||
|
|
|
@ -1,278 +0,0 @@
|
|||
function Node_RM_Extrude(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "RM Extrude";
|
||||
|
||||
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 1] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
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);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inputs[| 29] = nodeValue("Tile Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
outputs[| 0] = nodeValue("Surface Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
||||
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, 29,
|
||||
["Tile", false], 20, 29,
|
||||
];
|
||||
|
||||
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {}
|
||||
|
||||
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 _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];
|
||||
var _tilA = _data[29];
|
||||
|
||||
_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_f("tileAmount", _tilA);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -12,8 +12,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
"Cylinder", "Capsule", "Cone", "Capped Cone", "Round Cone", "3D Arc",
|
||||
-1,
|
||||
"Octahedron", "Pyramid",
|
||||
-1,
|
||||
"Extrude", "Terrain"
|
||||
];
|
||||
shape_types_str = [];
|
||||
|
||||
|
@ -115,12 +113,10 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
inputs[| 29] = nodeValue("Tile Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 30] = nodeValue("Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
||||
|
||||
outputs[| 0] = nodeValue("Surface Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
||||
input_display_list = [ 0,
|
||||
["Primitive", false], 1, 21, 22, 23, 24, 25, 26, 27, 28, 30,
|
||||
["Primitive", false], 1, 21, 22, 23, 24, 25, 26, 27, 28,
|
||||
["Modify", false], 12, 11,
|
||||
["Deform", true], 15, 16, 17, 18, 19,
|
||||
["Transform", false], 2, 3, 4,
|
||||
|
@ -145,7 +141,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
inputs[| 26].setVisible(false);
|
||||
inputs[| 27].setVisible(false);
|
||||
inputs[| 28].setVisible(false);
|
||||
inputs[| 30].setVisible(false);
|
||||
|
||||
var _shape = shape_types[_shp];
|
||||
switch(_shape) { // Size
|
||||
|
@ -221,13 +216,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
break;
|
||||
}
|
||||
|
||||
switch(_shape) { // Extrude surface
|
||||
case "Terrain" :
|
||||
case "Extrude" :
|
||||
inputs[| 30].setVisible(true);
|
||||
break;
|
||||
}
|
||||
|
||||
inputs[| 5].setVisible(_ort == 0);
|
||||
inputs[| 14].setVisible(_ort == 1);
|
||||
}
|
||||
|
@ -269,7 +257,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
var _radR = _data[27];
|
||||
var _sizz = _data[28];
|
||||
var _tilA = _data[29];
|
||||
var _extr = _data[30];
|
||||
|
||||
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1]);
|
||||
|
||||
|
@ -309,9 +296,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
|
||||
case "Octahedron" : _shpI = 400; break;
|
||||
case "Pyramid" : _shpI = 401; break;
|
||||
|
||||
case "Extrude" : _shpI = 500; break;
|
||||
case "Terrain" : _shpI = 501; break;
|
||||
}
|
||||
|
||||
for (var i = 0, n = array_length(temp_surface); i < n; i++)
|
||||
|
@ -330,7 +314,6 @@ function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
|
|||
shader_set_f("sizeUni", _sizz);
|
||||
shader_set_f("elongate", _elon);
|
||||
shader_set_f("rounded", _rond);
|
||||
shader_set_i("extrudeSurface", 0);
|
||||
|
||||
shader_set_f("waveAmp", _wavA);
|
||||
shader_set_f("waveInt", _wavI);
|
||||
|
|
128
scripts/node_rm_terrain/node_rm_terrain.gml
Normal file
128
scripts/node_rm_terrain/node_rm_terrain.gml
Normal file
|
@ -0,0 +1,128 @@
|
|||
function Node_RM_Terrain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||
name = "RM Terrain";
|
||||
|
||||
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 1] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
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, [ 30, 45, 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, [ 0, 6 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 7] = nodeValue("BG Bleed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
inputs[| 8] = nodeValue("Ambient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
|
||||
|
||||
inputs[| 9] = nodeValue("Height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 4, 0.01 ] });
|
||||
|
||||
inputs[| 10] = nodeValue("Tile", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
|
||||
|
||||
inputs[| 11] = nodeValue("Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
inputs[| 12] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black);
|
||||
|
||||
inputs[| 13] = nodeValue("Reflection", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone );
|
||||
|
||||
inputs[| 14] = nodeValue("Sun Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ .5, 1, .5 ])
|
||||
.setDisplay(VALUE_DISPLAY.vector);
|
||||
|
||||
inputs[| 15] = nodeValue("Shadow", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.2)
|
||||
.setDisplay(VALUE_DISPLAY.slider);
|
||||
|
||||
outputs[| 0] = nodeValue("Surface Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||
|
||||
input_display_list = [ 0,
|
||||
["Extrusion", false], 1, 9, 10,
|
||||
["Textures", false], 11, 13,
|
||||
["Transform", false], 2, 3, 4,
|
||||
["Camera", false], 5, 6,
|
||||
["Render", false], 12, 7, 8,
|
||||
["Light", false], 14, 15,
|
||||
];
|
||||
|
||||
temp_surface = [ 0, 0, 0, 0 ];
|
||||
|
||||
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {}
|
||||
|
||||
static step = function() {
|
||||
|
||||
}
|
||||
|
||||
static processData = function(_outSurf, _data, _output_index, _array_index = 0) {
|
||||
var _dim = _data[0];
|
||||
var _surf = _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 _amb = _data[8];
|
||||
var _thk = _data[9];
|
||||
var _tile = _data[10];
|
||||
var _text = _data[11];
|
||||
var _bgc = _data[12];
|
||||
var _refl = _data[13];
|
||||
var _sun = _data[14];
|
||||
var _sha = _data[15];
|
||||
|
||||
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1]);
|
||||
|
||||
for (var i = 0, n = array_length(temp_surface); i < n; i++)
|
||||
temp_surface[i] = surface_verify(temp_surface[i], 8192, 8192);
|
||||
|
||||
var tx = 1024;
|
||||
surface_set_shader(temp_surface[0]);
|
||||
draw_surface_stretched_safe(_surf, tx * 0, tx * 0, tx, tx);
|
||||
draw_surface_stretched_safe(_text, tx * 1, tx * 0, tx, tx);
|
||||
draw_surface_stretched_safe(_refl, tx * 2, tx * 0, tx, tx);
|
||||
surface_reset_shader();
|
||||
|
||||
gpu_set_texfilter(true);
|
||||
|
||||
surface_set_shader(_outSurf, sh_rm_terrain);
|
||||
|
||||
for (var i = 0, n = array_length(temp_surface); i < n; i++)
|
||||
shader_set_surface($"texture{i}", temp_surface[i]);
|
||||
|
||||
shader_set_i("shape", 1);
|
||||
shader_set_i("tile", _tile);
|
||||
shader_set_i("useTexture", is_surface(_text));
|
||||
shader_set_f("position", _pos);
|
||||
shader_set_f("rotation", _rot);
|
||||
shader_set_f("objectScale", _sca);
|
||||
shader_set_f("thickness", _thk);
|
||||
|
||||
shader_set_f("fov", _fov);
|
||||
shader_set_f("viewRange", _rng);
|
||||
shader_set_f("depthInt", _dpi);
|
||||
|
||||
shader_set_f("sunPosition", _sun);
|
||||
shader_set_f("shadow", _sha);
|
||||
|
||||
shader_set_color("background", _bgc);
|
||||
shader_set_color("ambient", _amb);
|
||||
|
||||
draw_sprite_stretched(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1]);
|
||||
surface_reset_shader();
|
||||
|
||||
return _outSurf;
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"$GMScript":"",
|
||||
"%Name":"node_rm_extrude",
|
||||
"%Name":"node_rm_terrain",
|
||||
"isCompatibility":false,
|
||||
"isDnD":false,
|
||||
"name":"node_rm_extrude",
|
||||
"name":"node_rm_terrain",
|
||||
"parent":{
|
||||
"name":"ray march",
|
||||
"path":"folders/nodes/data/generator/ray march.yy",
|
|
@ -1,10 +0,0 @@
|
|||
//
|
||||
// Simple passthrough fragment shader
|
||||
//
|
||||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );
|
||||
}
|
|
@ -31,7 +31,6 @@ uniform vec2 radRange;
|
|||
uniform float sizeUni;
|
||||
uniform vec3 elongate;
|
||||
uniform float rounded;
|
||||
uniform int extrudeSurface;
|
||||
|
||||
uniform vec3 waveAmp;
|
||||
uniform vec3 waveInt;
|
||||
|
@ -113,6 +112,8 @@ mat3 rotMatrix, irotMatrix;
|
|||
float ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }
|
||||
|
||||
vec4 sampleTexture(int index, vec2 coord) {
|
||||
if(coord.x < 0. || coord.y < 0. || coord.x > 1. || coord.y > 1.) return vec4(0.);
|
||||
|
||||
float i = float(index);
|
||||
|
||||
float txIndex = floor(i / TEXTURE_S);
|
||||
|
@ -303,25 +304,6 @@ mat3 rotMatrix, irotMatrix;
|
|||
return sqrt( (d2+q.z*q.z)/m2 ) * sign(max(q.z,-p.y));
|
||||
}
|
||||
|
||||
float sdExtrude( vec3 p, float s, float h ) {
|
||||
vec2 pos = p.xz / s / 2. + 0.5;
|
||||
vec4 sm = sampleTexture(extrudeSurface, pos);
|
||||
float am = (sm.r + sm.g + sm.b) / 3. * sm.a;
|
||||
|
||||
float d = 0.3 - am;
|
||||
vec2 w = vec2( d, abs(p.y) - h );
|
||||
return min(max(w.x, w.y), 0.0) + length(max(w, 0.0));
|
||||
}
|
||||
|
||||
float sdTerrain( vec3 p, float s, float h ) {
|
||||
vec2 pos = p.xz / s / 2. + 0.5;
|
||||
vec4 sm = sampleTexture(extrudeSurface, pos);
|
||||
float am = (sm.r + sm.g + sm.b) / 3. * sm.a;
|
||||
|
||||
float d = 0.1 - am;
|
||||
vec2 w = vec2( d, abs(p.y) - h * am );
|
||||
return min(max(w.x, w.y), 0.0) + length(max(w, 0.0));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ////============ Modify =============
|
||||
|
@ -423,9 +405,6 @@ float sceneSDF(vec3 p) {
|
|||
else if(shape == 400) d = sdOctahedron(p, sizeUni);
|
||||
else if(shape == 401) d = sdPyramid(p, sizeUni);
|
||||
|
||||
else if(shape == 500) d = sdExtrude(p, sizeUni, thickness);
|
||||
else if(shape == 501) d = sdTerrain(p, sizeUni, thickness);
|
||||
|
||||
if(elongate != vec3(0.)) {
|
||||
d += el.w;
|
||||
}
|
||||
|
|
205
shaders/sh_rm_terrain/sh_rm_terrain.fsh
Normal file
205
shaders/sh_rm_terrain/sh_rm_terrain.fsh
Normal file
|
@ -0,0 +1,205 @@
|
|||
//Inigo Quilez
|
||||
//Oh where would I be without you.
|
||||
|
||||
varying vec2 v_vTexcoord;
|
||||
varying vec4 v_vColour;
|
||||
|
||||
const int MAX_MARCHING_STEPS = 512;
|
||||
const float EPSILON = 1e-6;
|
||||
const float PI = 3.14159265358979323846;
|
||||
|
||||
const float SUBTEXTURE_SIZE = 1024.;
|
||||
const float TEXTURE_N = 8192. / SUBTEXTURE_SIZE;
|
||||
const float TEXTURE_S = TEXTURE_N * TEXTURE_N;
|
||||
const float TEXTURE_T = SUBTEXTURE_SIZE / 8192.;
|
||||
|
||||
uniform int useTexture;
|
||||
uniform sampler2D texture0;
|
||||
uniform sampler2D texture1;
|
||||
uniform sampler2D texture2;
|
||||
uniform sampler2D texture3;
|
||||
|
||||
uniform int shape;
|
||||
uniform int tile;
|
||||
uniform float thickness;
|
||||
uniform float time;
|
||||
|
||||
uniform vec3 position;
|
||||
uniform vec3 rotation;
|
||||
uniform float objectScale;
|
||||
|
||||
uniform float fov;
|
||||
uniform vec2 viewRange;
|
||||
uniform float depthInt;
|
||||
|
||||
uniform vec4 background;
|
||||
uniform vec4 ambient;
|
||||
|
||||
uniform vec3 sunPosition;
|
||||
uniform float shadow;
|
||||
|
||||
mat3 rotMatrix, irotMatrix;
|
||||
|
||||
#region ////========== Transform ============
|
||||
mat3 rotateX(float dg) {
|
||||
float c = cos(radians(dg));
|
||||
float s = sin(radians(dg));
|
||||
return mat3(
|
||||
vec3(1, 0, 0),
|
||||
vec3(0, c, -s),
|
||||
vec3(0, s, c)
|
||||
);
|
||||
}
|
||||
|
||||
mat3 rotateY(float dg) {
|
||||
float c = cos(radians(dg));
|
||||
float s = sin(radians(dg));
|
||||
return mat3(
|
||||
vec3( c, 0, s),
|
||||
vec3( 0, 1, 0),
|
||||
vec3(-s, 0, c)
|
||||
);
|
||||
}
|
||||
|
||||
mat3 rotateZ(float dg) {
|
||||
float c = cos(radians(dg));
|
||||
float s = sin(radians(dg));
|
||||
return mat3(
|
||||
vec3(c, -s, 0),
|
||||
vec3(s, c, 0),
|
||||
vec3(0, 0, 1)
|
||||
);
|
||||
}
|
||||
|
||||
mat3 inverse(mat3 m) {
|
||||
float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2];
|
||||
float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2];
|
||||
float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2];
|
||||
|
||||
float b01 = a22 * a11 - a12 * a21;
|
||||
float b11 = -a22 * a10 + a12 * a20;
|
||||
float b21 = a21 * a10 - a11 * a20;
|
||||
|
||||
float det = a00 * b01 + a01 * b11 + a02 * b21;
|
||||
|
||||
return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11),
|
||||
b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10),
|
||||
b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ////============= Util ==============
|
||||
|
||||
float dot2( in vec2 v ) { return dot(v,v); }
|
||||
float dot2( in vec3 v ) { return dot(v,v); }
|
||||
float ndot( in vec2 a, in vec2 b ) { return a.x*b.x - a.y*b.y; }
|
||||
|
||||
vec4 sampleTexture(int index, vec2 coord) {
|
||||
if(tile == 1) coord = fract(coord);
|
||||
if(coord.x < 0. || coord.y < 0. || coord.x > 1. || coord.y > 1.) return vec4(0.);
|
||||
|
||||
float i = float(index);
|
||||
|
||||
float txIndex = floor(i / TEXTURE_S);
|
||||
float stcInd = i - txIndex * TEXTURE_S;
|
||||
|
||||
float row = floor(stcInd / TEXTURE_N);
|
||||
float col = stcInd - row * TEXTURE_N;
|
||||
|
||||
vec2 tx = vec2(col, row) * TEXTURE_T;
|
||||
vec2 sm = tx + coord * TEXTURE_T;
|
||||
|
||||
if(txIndex == 0.) return texture2D(texture0, sm);
|
||||
else if(txIndex == 1.) return texture2D(texture1, sm);
|
||||
else if(txIndex == 2.) return texture2D(texture2, sm);
|
||||
else if(txIndex == 3.) return texture2D(texture3, sm);
|
||||
|
||||
return texture2D(texture0, sm);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ////============ Terrain =============
|
||||
float sdTerrain( vec3 p, float h ) {
|
||||
vec2 pos = p.xz;
|
||||
vec4 sm = sampleTexture(0, pos);
|
||||
float hg = (sm.r + sm.g + sm.b) / 3. * sm.a * h;
|
||||
|
||||
return step(-hg, p.y);
|
||||
}
|
||||
|
||||
float scene(vec3 pos) { return sdTerrain(pos, thickness); }
|
||||
#endregion
|
||||
|
||||
////========= Ray Marching ==========
|
||||
|
||||
vec4 march(vec3 camera, vec3 direction) {
|
||||
float st = 1. / float(MAX_MARCHING_STEPS);
|
||||
|
||||
for (int i = 0; i <= MAX_MARCHING_STEPS; i++) {
|
||||
float depth = mix(viewRange.x, viewRange.y, float(i) * st);
|
||||
vec3 pos = camera + depth * direction;
|
||||
|
||||
float hit = scene(pos);
|
||||
|
||||
if (hit == 1.)
|
||||
return vec4(pos, depth);
|
||||
}
|
||||
|
||||
return vec4(0., 0., 0., viewRange.y);
|
||||
}
|
||||
|
||||
void main() {
|
||||
gl_FragColor = background;
|
||||
|
||||
mat3 rx = rotateX(rotation.x);
|
||||
mat3 ry = rotateY(rotation.y);
|
||||
mat3 rz = rotateZ(rotation.z);
|
||||
rotMatrix = rx * ry * rz;
|
||||
irotMatrix = inverse(rotMatrix);
|
||||
|
||||
vec3 eye, dir;
|
||||
|
||||
float z = 1. / tan(radians(fov) / 2.);
|
||||
dir = normalize(vec3((v_vTexcoord - .5) * 2., -z));
|
||||
eye = vec3(0., 0., 5.);
|
||||
|
||||
dir = normalize(irotMatrix * dir) / objectScale;
|
||||
eye = irotMatrix * eye;
|
||||
eye /= objectScale;
|
||||
eye -= position;
|
||||
|
||||
vec4 res = march(eye, dir);
|
||||
float dist = res.a;
|
||||
vec3 coll = res.xyz;
|
||||
|
||||
float distNorm = (dist - viewRange.x) / (viewRange.y - viewRange.x);
|
||||
|
||||
if(dist >= viewRange.y) // Not hitting anything.
|
||||
return;
|
||||
|
||||
vec3 c = useTexture == 0? ambient.rgb : sampleTexture(1, coll.xz).rgb;
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
dir.y *= -1.;
|
||||
vec4 refl = sampleTexture(2, coll.xz);
|
||||
float _rr = (refl.x + refl.y + refl.z) / 3.;
|
||||
|
||||
vec4 ref = march(coll + dir, dir);
|
||||
if(ref.a < viewRange.y)
|
||||
c = mix(c, sampleTexture(1, ref.xz).rgb, _rr);
|
||||
else
|
||||
c = mix(c, background.rgb, _rr);
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
vec3 sunDir = normalize(coll - sunPosition) / objectScale;
|
||||
vec4 shad = march(coll + vec3(0., -distNorm * 0.1, 0.), sunDir);
|
||||
if(shad.a < viewRange.y)
|
||||
c *= 1. - shadow;
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
distNorm = 1. - distNorm;
|
||||
distNorm = smoothstep(.0, .3, distNorm);
|
||||
c = mix(background.rgb, c, mix(1., distNorm, depthInt));
|
||||
|
||||
gl_FragColor = vec4(c, 1.);
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"$GMShader":"",
|
||||
"%Name":"sh_rm_extrude",
|
||||
"name":"sh_rm_extrude",
|
||||
"%Name":"sh_rm_terrain",
|
||||
"name":"sh_rm_terrain",
|
||||
"parent":{
|
||||
"name":"ray march",
|
||||
"path":"folders/shader/ray march.yy",
|
Binary file not shown.
Before Width: | Height: | Size: 765 B |
Binary file not shown.
Before Width: | Height: | Size: 687 B |
Binary file not shown.
Before Width: | Height: | Size: 765 B |
Binary file not shown.
Before Width: | Height: | Size: 687 B |
|
@ -29,8 +29,6 @@
|
|||
{"$GMSpriteFrame":"","%Name":"53ff437f-736a-41e3-b500-bc9e840439d0","name":"53ff437f-736a-41e3-b500-bc9e840439d0","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"0da22937-fff4-452f-a8d6-3e8b57726d6e","name":"0da22937-fff4-452f-a8d6-3e8b57726d6e","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"1c600a42-babc-45aa-ba0b-00dad6ef1e04","name":"1c600a42-babc-45aa-ba0b-00dad6ef1e04","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"7a7777f3-d63b-42bd-9289-dcbf52939e67","name":"7a7777f3-d63b-42bd-9289-dcbf52939e67","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
{"$GMSpriteFrame":"","%Name":"534d2db0-0a22-4c4d-a704-ab8191fdf460","name":"534d2db0-0a22-4c4d-a704-ab8191fdf460","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
|
||||
],
|
||||
"gridX":0,
|
||||
"gridY":0,
|
||||
|
@ -67,7 +65,7 @@
|
|||
},
|
||||
"eventStubScript":null,
|
||||
"eventToFunction":{},
|
||||
"length":19.0,
|
||||
"length":17.0,
|
||||
"lockOrigin":false,
|
||||
"moments":{
|
||||
"$KeyframeStore<MomentsEventKeyframe>":"",
|
||||
|
@ -137,12 +135,6 @@
|
|||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"1c600a42-babc-45aa-ba0b-00dad6ef1e04","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"14b14ac0-8cf2-4f3f-aa4f-441b9aec23d8","IsCreationKey":false,"Key":16.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"7a7777f3-d63b-42bd-9289-dcbf52939e67","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"e713db42-3619-48c5-a8ea-0dd8c17578ec","IsCreationKey":false,"Key":17.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
|
||||
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
|
||||
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"534d2db0-0a22-4c4d-a704-ab8191fdf460","path":"sprites/s_node_shape_3d/s_node_shape_3d.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
|
||||
},"Disabled":false,"id":"770161b1-1645-4ea2-b298-14b3d25da9db","IsCreationKey":false,"Key":18.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,
|
||||
|
|
Loading…
Reference in a new issue