From 39d2d4ce59bf9a8876191f22755fa7d2e788e6c9 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Sat, 1 Jun 2024 11:38:04 +0700 Subject: [PATCH] rm terrain --- PixelComposer.resource_order | 4 +- PixelComposer.yyp | 4 +- scripts/node_registry/node_registry.gml | 11 +- scripts/node_rm_extrude/node_rm_extrude.gml | 278 ------------------ .../node_rm_primitive/node_rm_primitive.gml | 19 +- .../node_outline.yy | 0 scripts/node_rm_terrain/node_rm_terrain.gml | 128 ++++++++ .../node_rm_terrain.yy} | 4 +- shaders/sh_rm_extrude/sh_rm_extrude.fsh | 10 - shaders/sh_rm_primitive/sh_rm_primitive.fsh | 25 +- shaders/sh_rm_terrain/sh_rm_terrain.fsh | 205 +++++++++++++ .../sh_rm_terrain.vsh} | 0 .../sh_rm_terrain.yy} | 4 +- .../534d2db0-0a22-4c4d-a704-ab8191fdf460.png | Bin 765 -> 0 bytes .../7a7777f3-d63b-42bd-9289-dcbf52939e67.png | Bin 687 -> 0 bytes .../b966fb12-3a24-4f05-8084-a475027ecd2c.png | Bin 765 -> 0 bytes .../b966fb12-3a24-4f05-8084-a475027ecd2c.png | Bin 687 -> 0 bytes sprites/s_node_shape_3d/s_node_shape_3d.yy | 10 +- 18 files changed, 351 insertions(+), 351 deletions(-) delete mode 100644 scripts/node_rm_extrude/node_rm_extrude.gml rename scripts/{node_rm_extrude => node_rm_terrain}/node_outline.yy (100%) create mode 100644 scripts/node_rm_terrain/node_rm_terrain.gml rename scripts/{node_rm_extrude/node_rm_extrude.yy => node_rm_terrain/node_rm_terrain.yy} (79%) delete mode 100644 shaders/sh_rm_extrude/sh_rm_extrude.fsh create mode 100644 shaders/sh_rm_terrain/sh_rm_terrain.fsh rename shaders/{sh_rm_extrude/sh_rm_extrude.vsh => sh_rm_terrain/sh_rm_terrain.vsh} (100%) rename shaders/{sh_rm_extrude/sh_rm_extrude.yy => sh_rm_terrain/sh_rm_terrain.yy} (76%) delete mode 100644 sprites/s_node_shape_3d/534d2db0-0a22-4c4d-a704-ab8191fdf460.png delete mode 100644 sprites/s_node_shape_3d/7a7777f3-d63b-42bd-9289-dcbf52939e67.png delete mode 100644 sprites/s_node_shape_3d/layers/534d2db0-0a22-4c4d-a704-ab8191fdf460/b966fb12-3a24-4f05-8084-a475027ecd2c.png delete mode 100644 sprites/s_node_shape_3d/layers/7a7777f3-d63b-42bd-9289-dcbf52939e67/b966fb12-3a24-4f05-8084-a475027ecd2c.png diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 4e828ab1b..129910a49 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -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",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 5ad124a28..f8cfa45b5 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -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",},}, diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index b3ea22ea2..b9e1b2926 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -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); diff --git a/scripts/node_rm_extrude/node_rm_extrude.gml b/scripts/node_rm_extrude/node_rm_extrude.gml deleted file mode 100644 index 5e5afe411..000000000 --- a/scripts/node_rm_extrude/node_rm_extrude.gml +++ /dev/null @@ -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; - } -} diff --git a/scripts/node_rm_primitive/node_rm_primitive.gml b/scripts/node_rm_primitive/node_rm_primitive.gml index 426e5a7bc..fe8380646 100644 --- a/scripts/node_rm_primitive/node_rm_primitive.gml +++ b/scripts/node_rm_primitive/node_rm_primitive.gml @@ -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); diff --git a/scripts/node_rm_extrude/node_outline.yy b/scripts/node_rm_terrain/node_outline.yy similarity index 100% rename from scripts/node_rm_extrude/node_outline.yy rename to scripts/node_rm_terrain/node_outline.yy diff --git a/scripts/node_rm_terrain/node_rm_terrain.gml b/scripts/node_rm_terrain/node_rm_terrain.gml new file mode 100644 index 000000000..0ed7124ee --- /dev/null +++ b/scripts/node_rm_terrain/node_rm_terrain.gml @@ -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; + } +} diff --git a/scripts/node_rm_extrude/node_rm_extrude.yy b/scripts/node_rm_terrain/node_rm_terrain.yy similarity index 79% rename from scripts/node_rm_extrude/node_rm_extrude.yy rename to scripts/node_rm_terrain/node_rm_terrain.yy index 9906e20af..7126f0427 100644 --- a/scripts/node_rm_extrude/node_rm_extrude.yy +++ b/scripts/node_rm_terrain/node_rm_terrain.yy @@ -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", diff --git a/shaders/sh_rm_extrude/sh_rm_extrude.fsh b/shaders/sh_rm_extrude/sh_rm_extrude.fsh deleted file mode 100644 index e28a17897..000000000 --- a/shaders/sh_rm_extrude/sh_rm_extrude.fsh +++ /dev/null @@ -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 ); -} diff --git a/shaders/sh_rm_primitive/sh_rm_primitive.fsh b/shaders/sh_rm_primitive/sh_rm_primitive.fsh index 4eec61974..1efecc593 100644 --- a/shaders/sh_rm_primitive/sh_rm_primitive.fsh +++ b/shaders/sh_rm_primitive/sh_rm_primitive.fsh @@ -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; } diff --git a/shaders/sh_rm_terrain/sh_rm_terrain.fsh b/shaders/sh_rm_terrain/sh_rm_terrain.fsh new file mode 100644 index 000000000..9fa0e6d0d --- /dev/null +++ b/shaders/sh_rm_terrain/sh_rm_terrain.fsh @@ -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.); +} \ No newline at end of file diff --git a/shaders/sh_rm_extrude/sh_rm_extrude.vsh b/shaders/sh_rm_terrain/sh_rm_terrain.vsh similarity index 100% rename from shaders/sh_rm_extrude/sh_rm_extrude.vsh rename to shaders/sh_rm_terrain/sh_rm_terrain.vsh diff --git a/shaders/sh_rm_extrude/sh_rm_extrude.yy b/shaders/sh_rm_terrain/sh_rm_terrain.yy similarity index 76% rename from shaders/sh_rm_extrude/sh_rm_extrude.yy rename to shaders/sh_rm_terrain/sh_rm_terrain.yy index 1ed943a92..751077823 100644 --- a/shaders/sh_rm_extrude/sh_rm_extrude.yy +++ b/shaders/sh_rm_terrain/sh_rm_terrain.yy @@ -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", diff --git a/sprites/s_node_shape_3d/534d2db0-0a22-4c4d-a704-ab8191fdf460.png b/sprites/s_node_shape_3d/534d2db0-0a22-4c4d-a704-ab8191fdf460.png deleted file mode 100644 index 7a849e3a9ab668b00f48ac9616d55519431d1c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0UZr;B5V$MLgM?|0pD z5NY4vTdy~%sd%Bz%4s?rP4|ve3yRG@V16U!3u8@F(r=zxhTlxizu6uMd+4($vU)q} zyR6`9nq{@u^G?pBt+&=)V0KPZd;VvirMmG<>7^pqP2R40^IrI*+lG?!YiR`Xpj=XqRfHv8`@=A>;mb8b28y_)s+f=RC0(lztB z3mBrWmzM3mD}BB6?UDmmvqD*_oI1jfCIwzLdHZ;0gPw!lbmjx4caMnJp1;f>y&!01 z3V*w^vSzo&0Y;q$A2s1AO)pENm|3_ve!VRD)v#aEk8zh{`py_R_4Lh=JOLUai;{UO zCIsEHXMe%6n*GN6@5jYGC7*o$sh+Ipa^Y=jc_>4{q1F7eGiQaYzN%h4E%m4o$J8@S zZ9!h_a`mF+fr+O#B^_con`W%W*MFZ!VXD{ObI(8LE)Y+-@Ktd>)AA1stwMjVxO?wj zo%Zz8Yuy%KWOL9I%`IIT5+9rK`fHVm44-x2UKNK6GE1*K;dwiMU;d(Vnhai=3#YvL zrQ~_-YweF{hYRnf1nr&hA-(=x|3-81xL@D@ZLZHdu(YB3?W^hk@Px# diff --git a/sprites/s_node_shape_3d/7a7777f3-d63b-42bd-9289-dcbf52939e67.png b/sprites/s_node_shape_3d/7a7777f3-d63b-42bd-9289-dcbf52939e67.png deleted file mode 100644 index 13be9ce0f770c908e52b0b56946dda4e54ec9808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`+6r;B5V$MLgM4tg;K zinQ%FGB8AT9X}58q?p`PEa$UEA{Ix0>DNVCB zN?GV$nW5I6*3)RWqr3WD{rU5j?bXv=S}Y>_On=uKW-$G9<(=kqCP8h-+*ziz&)F|e zW!GcO4s4d>Z!q-T@xJpuQ+xf&2j*ps)%6A$Y|;mA?%`&PVb5|svip-#k*3l#m%~C6 zjpOxPo>X_2#P0W2n|w3J?01}w*mbVfLuo5RxFT5?!W-W4uBkBZd%VY@Z*y*>*x$PU z+Hq^c;!i&I7nRQ@g zxU!P@=FcbCiZ3)KC(QNa{_3{)V$YpL3R+XUSm&qRdP`(kYX@0Ff!3KFx53S2r)3UGB&X? zFxECOure@kj8a>Vq9HdwB{QuOw*~|DdBQ*q8gLs*GILXlOA>PnaO+7I+J6S9hr!d; K&t;ucLK6U$eF(Au diff --git a/sprites/s_node_shape_3d/layers/534d2db0-0a22-4c4d-a704-ab8191fdf460/b966fb12-3a24-4f05-8084-a475027ecd2c.png b/sprites/s_node_shape_3d/layers/534d2db0-0a22-4c4d-a704-ab8191fdf460/b966fb12-3a24-4f05-8084-a475027ecd2c.png deleted file mode 100644 index 7a849e3a9ab668b00f48ac9616d55519431d1c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0UZr;B5V$MLgM?|0pD z5NY4vTdy~%sd%Bz%4s?rP4|ve3yRG@V16U!3u8@F(r=zxhTlxizu6uMd+4($vU)q} zyR6`9nq{@u^G?pBt+&=)V0KPZd;VvirMmG<>7^pqP2R40^IrI*+lG?!YiR`Xpj=XqRfHv8`@=A>;mb8b28y_)s+f=RC0(lztB z3mBrWmzM3mD}BB6?UDmmvqD*_oI1jfCIwzLdHZ;0gPw!lbmjx4caMnJp1;f>y&!01 z3V*w^vSzo&0Y;q$A2s1AO)pENm|3_ve!VRD)v#aEk8zh{`py_R_4Lh=JOLUai;{UO zCIsEHXMe%6n*GN6@5jYGC7*o$sh+Ipa^Y=jc_>4{q1F7eGiQaYzN%h4E%m4o$J8@S zZ9!h_a`mF+fr+O#B^_con`W%W*MFZ!VXD{ObI(8LE)Y+-@Ktd>)AA1stwMjVxO?wj zo%Zz8Yuy%KWOL9I%`IIT5+9rK`fHVm44-x2UKNK6GE1*K;dwiMU;d(Vnhai=3#YvL zrQ~_-YweF{hYRnf1nr&hA-(=x|3-81xL@D@ZLZHdu(YB3?W^hk@Px# diff --git a/sprites/s_node_shape_3d/layers/7a7777f3-d63b-42bd-9289-dcbf52939e67/b966fb12-3a24-4f05-8084-a475027ecd2c.png b/sprites/s_node_shape_3d/layers/7a7777f3-d63b-42bd-9289-dcbf52939e67/b966fb12-3a24-4f05-8084-a475027ecd2c.png deleted file mode 100644 index 13be9ce0f770c908e52b0b56946dda4e54ec9808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`+6r;B5V$MLgM4tg;K zinQ%FGB8AT9X}58q?p`PEa$UEA{Ix0>DNVCB zN?GV$nW5I6*3)RWqr3WD{rU5j?bXv=S}Y>_On=uKW-$G9<(=kqCP8h-+*ziz&)F|e zW!GcO4s4d>Z!q-T@xJpuQ+xf&2j*ps)%6A$Y|;mA?%`&PVb5|svip-#k*3l#m%~C6 zjpOxPo>X_2#P0W2n|w3J?01}w*mbVfLuo5RxFT5?!W-W4uBkBZd%VY@Z*y*>*x$PU z+Hq^c;!i&I7nRQ@g zxU!P@=FcbCiZ3)KC(QNa{_3{)V$YpL3R+XUSm&qRdP`(kYX@0Ff!3KFx53S2r)3UGB&X? zFxECOure@kj8a>Vq9HdwB{QuOw*~|DdBQ*q8gLs*GILXlOA>PnaO+7I+J6S9hr!d; K&t;ucLK6U$eF(Au diff --git a/sprites/s_node_shape_3d/s_node_shape_3d.yy b/sprites/s_node_shape_3d/s_node_shape_3d.yy index 36489c9d9..f1224b7e8 100644 --- a/sprites/s_node_shape_3d/s_node_shape_3d.yy +++ b/sprites/s_node_shape_3d/s_node_shape_3d.yy @@ -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":"", @@ -137,12 +135,6 @@ {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, - {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, - {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, ],"resourceType":"KeyframeStore","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, ], "visibleRange":null,