From 0b5fb449dfb31f45adc208ed5ea35837fd6455e0 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Tue, 28 May 2024 14:51:54 +0700 Subject: [PATCH] ray march node --- PixelComposer.resource_order | 1 + PixelComposer.yyp | 1 + .../node_rm_primitive/node_rm_primitive.gml | 277 +++++++++++++++++- shaders/sh_rm_primitive/sh_rm_primitive.fsh | 204 +++++++++++-- .../03f758c5-0f2b-471c-9bb3-a08437719dd7.png | Bin 0 -> 748 bytes .../0722182a-6a52-48c9-ad6e-71e2a1f4a1a6.png | Bin 0 -> 702 bytes .../13d9fd09-286d-4a23-ac42-2f3e52c09bed.png | Bin 0 -> 668 bytes .../182fec8b-d5d9-4179-8285-4dcf33c5b4aa.png | Bin 0 -> 629 bytes .../25d1fd94-e801-4236-920e-931be44954be.png | Bin 0 -> 1137 bytes .../37790c04-f438-4d6f-9883-4050e9b91ea1.png | Bin 0 -> 858 bytes .../46eca356-3c1c-4db2-9c70-fad60ee33971.png | Bin 0 -> 827 bytes .../523b3356-ed87-4998-bb44-449d347e8d0a.png | Bin 0 -> 565 bytes .../a3a465f9-7d13-48c5-a59d-e5a2453602e2.png | Bin 0 -> 677 bytes .../a8ab0827-e277-4fe0-af42-0a493e3f300e.png | Bin 0 -> 626 bytes .../ac1b25a5-14b0-48d2-8514-950fa4e40834.png | Bin 0 -> 739 bytes .../ada07b25-2b68-464c-8d15-1eb968b2aea6.png | Bin 0 -> 834 bytes .../adbc388b-49f9-47de-8d91-7ab7405eba30.png | Bin 0 -> 744 bytes .../c0f5b4b1-753c-4d80-8999-87f6036f42aa.png | Bin 0 -> 559 bytes .../d8f5c08f-c4a0-4a37-ac98-2504f79c363e.png | Bin 0 -> 447 bytes .../e55537e4-4b14-4690-9234-c3de34d01049.png | Bin 0 -> 669 bytes .../fbefaeba-464c-4984-9c90-b9fe8a68f749.png | Bin 0 -> 681 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 748 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 702 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 668 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 629 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 1137 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 858 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 827 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 565 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 677 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 626 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 739 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 834 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 744 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 559 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 447 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 669 bytes .../d643ed43-cc1b-48da-94ba-8b43d929cf56.png | Bin 0 -> 681 bytes sprites/s_node_shape_3d/s_node_shape_3d.yy | 154 ++++++++++ 39 files changed, 600 insertions(+), 37 deletions(-) create mode 100644 sprites/s_node_shape_3d/03f758c5-0f2b-471c-9bb3-a08437719dd7.png create mode 100644 sprites/s_node_shape_3d/0722182a-6a52-48c9-ad6e-71e2a1f4a1a6.png create mode 100644 sprites/s_node_shape_3d/13d9fd09-286d-4a23-ac42-2f3e52c09bed.png create mode 100644 sprites/s_node_shape_3d/182fec8b-d5d9-4179-8285-4dcf33c5b4aa.png create mode 100644 sprites/s_node_shape_3d/25d1fd94-e801-4236-920e-931be44954be.png create mode 100644 sprites/s_node_shape_3d/37790c04-f438-4d6f-9883-4050e9b91ea1.png create mode 100644 sprites/s_node_shape_3d/46eca356-3c1c-4db2-9c70-fad60ee33971.png create mode 100644 sprites/s_node_shape_3d/523b3356-ed87-4998-bb44-449d347e8d0a.png create mode 100644 sprites/s_node_shape_3d/a3a465f9-7d13-48c5-a59d-e5a2453602e2.png create mode 100644 sprites/s_node_shape_3d/a8ab0827-e277-4fe0-af42-0a493e3f300e.png create mode 100644 sprites/s_node_shape_3d/ac1b25a5-14b0-48d2-8514-950fa4e40834.png create mode 100644 sprites/s_node_shape_3d/ada07b25-2b68-464c-8d15-1eb968b2aea6.png create mode 100644 sprites/s_node_shape_3d/adbc388b-49f9-47de-8d91-7ab7405eba30.png create mode 100644 sprites/s_node_shape_3d/c0f5b4b1-753c-4d80-8999-87f6036f42aa.png create mode 100644 sprites/s_node_shape_3d/d8f5c08f-c4a0-4a37-ac98-2504f79c363e.png create mode 100644 sprites/s_node_shape_3d/e55537e4-4b14-4690-9234-c3de34d01049.png create mode 100644 sprites/s_node_shape_3d/fbefaeba-464c-4984-9c90-b9fe8a68f749.png create mode 100644 sprites/s_node_shape_3d/layers/03f758c5-0f2b-471c-9bb3-a08437719dd7/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/0722182a-6a52-48c9-ad6e-71e2a1f4a1a6/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/13d9fd09-286d-4a23-ac42-2f3e52c09bed/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/182fec8b-d5d9-4179-8285-4dcf33c5b4aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/25d1fd94-e801-4236-920e-931be44954be/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/37790c04-f438-4d6f-9883-4050e9b91ea1/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/46eca356-3c1c-4db2-9c70-fad60ee33971/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/523b3356-ed87-4998-bb44-449d347e8d0a/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/a3a465f9-7d13-48c5-a59d-e5a2453602e2/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/a8ab0827-e277-4fe0-af42-0a493e3f300e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/ac1b25a5-14b0-48d2-8514-950fa4e40834/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/ada07b25-2b68-464c-8d15-1eb968b2aea6/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/adbc388b-49f9-47de-8d91-7ab7405eba30/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/c0f5b4b1-753c-4d80-8999-87f6036f42aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/d8f5c08f-c4a0-4a37-ac98-2504f79c363e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/e55537e4-4b14-4690-9234-c3de34d01049/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/layers/fbefaeba-464c-4984-9c90-b9fe8a68f749/d643ed43-cc1b-48da-94ba-8b43d929cf56.png create mode 100644 sprites/s_node_shape_3d/s_node_shape_3d.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 82c5f70f1..600896c50 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -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",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 42c3d152f..917c7ff4a 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -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",},}, diff --git a/scripts/node_rm_primitive/node_rm_primitive.gml b/scripts/node_rm_primitive/node_rm_primitive.gml index d8d765fdc..318870bac 100644 --- a/scripts/node_rm_primitive/node_rm_primitive.gml +++ b/scripts/node_rm_primitive/node_rm_primitive.gml @@ -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; } -} \ No newline at end of file +} \ No newline at end of file diff --git a/shaders/sh_rm_primitive/sh_rm_primitive.fsh b/shaders/sh_rm_primitive/sh_rm_primitive.fsh index 7127a141b..524b340fa 100644 --- a/shaders/sh_rm_primitive/sh_rm_primitive.fsh +++ b/shaders/sh_rm_primitive/sh_rm_primitive.fsh @@ -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.xsc.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; diff --git a/sprites/s_node_shape_3d/03f758c5-0f2b-471c-9bb3-a08437719dd7.png b/sprites/s_node_shape_3d/03f758c5-0f2b-471c-9bb3-a08437719dd7.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbaea2dcf4b15afd0a305ef130b40f8a5714492 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0V9r;B5V$ML&U9rJEE zh_uzaC$@|1+K{qQVXxy32CnoO!UfGmEhTq-tC{^0QXN%Qysxy`7HwZ6HDQ94*`bLO z)=DH>$ly1pWfY3;1@gR>fikgG4pn;<6XeEVC6Yy22O_m zSLeEflx^vJF)!}=-l*&^hOuh|C)PI=2JX96EpkC+(G%Wh)~crtbF2^yjMx_J{MCfd|nZs8VzA_|W{q>6(CJDE<#qA1=D`!Z^ zjNionAk198|M*d#KUaLdWo?aeJ;B`2e{{yZSK5y(u8H3_JXTe8xAbn`uG6nA`nnsk zgMH%nd{*E%@!4j-PSd>SKOF_8e0{Rvhu~^>v9=JhEQJkiD;1 zZZAWR+hX~kQ{P>tbaaHRzPjrE`}+Go-=znNxXx#9K6tgns`kuh8|%WBH&at1ZD#sx zdRP!4>{N3z_IfbO_0s)JKUf&HV zJ^x((lF8kv`wfrna&r*;#3nmKnvv@g+Xd^6+l96aFAR?TNjk`J!NHe7)~5fZT7!0I z)sfF9_!z%PBqz>19(dsXh5i3e+gLx~*L`}gy4mJnB{1?;OI#yLQW8s2t&)pUffR$0 zfsu)>fvK*MMTmj9m5I5Pv8A?wft7*5-=ERJC>nC}Q!>*kack&V^7uVag9hA&lFZ!H b;*!MN0^E9TZ#)D{q6`e4u6{1-oD!M|H*Yfq`+Or;B5V$MLsQ_h&IV z3LLY4y5|RbFIUoXB@QvUonIzB5p}wxes@AhndW2%Ifd4xj}%bYmq~s2*V1&z@lUaz3J7wtxgOKx3@7m%uAAY$W?aOeADK- ziLUus3 z{@T>>Wh>*XWwsW{H{}>67#F@M)NM$O{F-C7+QRnS&+k@p{kylz2wyyTiXry;`n&Ts zyEdfrdHX+PG&pwaWQx&)Z_6*Qlz)(LQS=d`%i@bRVkd4YF?cM$+?IZVhb6*?`+MD zT7Pfmu$|j^_idRpgU(@tdDE|Q{IUO4_lu?3sc*Zi3hNqRbgGuPMwFx^mZVxG7o`Fz z1|tI_6I}yST_cMS19K}Ab1P#@Z36=<1B1Umqk~a2a literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/13d9fd09-286d-4a23-ac42-2f3e52c09bed.png b/sprites/s_node_shape_3d/13d9fd09-286d-4a23-ac42-2f3e52c09bed.png new file mode 100644 index 0000000000000000000000000000000000000000..69dab5d8984a8ea781774a8fadc4f19d86073325 GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}8#)5S5wtA1!>tn791$ zPo1b3O$%m53kQ9Bfi}g-CslZVHzYI7WMKNxFs;*WuHVh~-!pfxJ6qn4+}I-G0e$+#xO1QY4F;VTt$ZkFL(NFjq;uT?&<0i%)3(0aIgCDbRzqW?F>Ap zDqcjDtT&RAJdn0I^Zx61zw3@EGe@kyF2DI^k49IXnVnp}ju`j0+izbO&9BsYWKlOg zXxq{$CQ`gQrx(SoS8iDlwKk1sv4#?lbIpBsO;-VymlM)i81z1{DJ*sIirn$~W5pWp z-N(dK!}rE-QF{q*eHKkv@g+R>76 zd+8J>&99fmCR>X9XJ=5!_ZF{UjcZcKSRc0f;>(gx4A)a)qzcym`@j4@tLB5H-sW%3 z*8n3+wZt`|BqgyV)hf9t6-Y4{85o)98kp)DS%esvTbYFVdQ&MBb@0Qi6f`v3p{ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/182fec8b-d5d9-4179-8285-4dcf33c5b4aa.png b/sprites/s_node_shape_3d/182fec8b-d5d9-4179-8285-4dcf33c5b4aa.png new file mode 100644 index 0000000000000000000000000000000000000000..25db8e5ce76dead753010230f051ce44001dc74a GIT binary patch literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^l@)5S5wQ_$ZyT{tF-GIklBH8${&eAC-AFrNNwtFsD(*g67 zrYjGyKbXoq`6LU2&9NE(-w5fhZe~7^VN$iHs%PU<ZJkDs=DNX&m>rXDt3?WB$pEi9=DbAv-pHTI$nhQ-iWX85!2RZpxgs zt*VEiWrA*luW8&ZQ)#c4*Q5d*!a_YnT>B4(=l-<4yua(wx%i@U;@fZMu8l6&ZdkjI zA#(3&F~_)XcEDIrEpd$~Nl7e8wMs5Z1yT$~21X{j2Bx}379j@aRwm|F#+KR!237_J ze}6^?qiD#@PsvQH#I2!c$>aAx4H|G8N-}d(i%Sx73vlbXz3~t*tuQcny85}Sb4q9e E01$HTLjV8( literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/25d1fd94-e801-4236-920e-931be44954be.png b/sprites/s_node_shape_3d/25d1fd94-e801-4236-920e-931be44954be.png new file mode 100644 index 0000000000000000000000000000000000000000..171c0d4fbbcd90fa409488d9133df12bf2dba70e GIT binary patch literal 1137 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^;2)5S5wnS<^Nb$C5;zBR+o)uh>`^B&@ElzrFjJCy&~#CiZua>YmSezx(^0!2`T4~92Jwc&EZ44GJICDUkQ^Q^K1t=`{rmmPGM8Di?P1%euc{^b zgXsrffbWA3A3of9{nboOh*L^R>c#8VyE(6!yuI_b%p9nBR)EkCp&vibxyMCB{K!mC zcfVTtm+kiL+u3JQj2Jd{cXvNOQ2ZchTI#G>v+_<{erZy-|Gt@-**9my^wN)NbNz(* z+AS?D7w+9FyZmzJ@yCe?2@jmjW`B)bdrh8k)6Ja8DxUW}CM{uLX?A?}{Q1$VSEsU0 zIL*Znxxi|w*T%hj&;I*YckFH1^{iRTPHg%k^+W2x$;s+r4Fwiw-n@C!USYG2VH#6= zoaY1o2g$M5TXjxP^HB?y=3&ds%&feB^XAVj>(-s)n&6=_WA^ObcW&L<#K_g4bK2>8 zDfb6=RYrzu*RS8tn)R$;XH1)lXON9teN{*%Uk{JuKR(;(PfX zTeG9P=JmNu3>zbOTmz4M_+T*6qou~q-$W|4u<)bWvBw`1w%>NunyNI{@BYc+=PNec ze!KP=*w`T(b*C}vH7Q^bRx2o1V`1+nTX6Qbe#2652YHw-j zsUWbzIQi30o7PKL+MN_rBF~A(q@CNmNp;u0ecKqWT)%E?W##4W?k;-Z(xplByq4x| zoqze|6?S&^)CF2ny_+^|VsbE=xu^8SC84E^QPI&i@7{g--~mI!ym@jvRr;PiOOsR( z;d=PB>gJ6b2C<^IzZ5?RcMx^juyd!UicsbA5-WQxQ43q!)U>o`cRzkC-1y%1LuBEd zxrg(zvR<{WTD4w-$J#aU#M2^)w!+ojT{_EFz1l7;EF8SFujsM}!~XmKMGg3F_~cYp z&WzDZ&(m)#oPYlNG8y-y`nOJ;I3c}&cZS(UrB9g))(ZXHYp${L?DFf^ukT;8Zk?1< zhkuRT{rCJQt2Z3@zt#Q!>L2WO{Ka*u7?@j`m|GcJY8x0>85sQi86AwGAvZrIGp!Q0hMpyl-vc#hz-=hW%uOvWNz5(4 Wt>^Z}L%?!^fx*+&&t;ucLK6UUxc(LZ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/37790c04-f438-4d6f-9883-4050e9b91ea1.png b/sprites/s_node_shape_3d/37790c04-f438-4d6f-9883-4050e9b91ea1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0acc927f5dd4ac6dd1082417c0396b8c734c438 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}`_)5S5wl8UM>A_=3$=ryLC5y{b62o_HSdR&&)r}^@o;j+F)=ka~+o_i=d8(cH%|>9T8WT zhX!ncWnzyO?$|N;&5|9llGne!ZhwFFjo@>c_Llbx-u!Pp@X`3M z5W^vcMc?+ZCh#rzmZI{!=KkadbHsmM*0{BAo=u$o;W?jg8F$=WadTromy6}|&-M!C z2HP!dSP#wld~Kh{Ws{xDGGi{Aje)*`AYJE>AsM%FN(?$a5WINB5Iet9GR?(w&ea(0%lQ&`-7phisP>UThB9 z#U`*}Za#&7bTj_UKq7@--_$6KjxTKKj#Yx{d&&i?2n|47IACCqPKml zu(>G+l;k~jWAA4Dsa^&>>}Tut*Uvovd~)B~%P&mudR3vUy$xS<`sICqk-R=sbzvxvd;Cl zW&YhqA9YUN+x)evR&mXCw>HDJqMb4`ebn?BpKvIeo>vog3St0y;Pj_y4eMUZ&;43r z^>@qi<(9LPnLoMDcekQy458hHghq$B<>Fa?>O|`@| zq9i4;B-JXpC>2OC7#SFu=o*;n8d-!Gm|K~cTNztw8yHv_82tSi9gLzOH$NpatrE9} po+Xdp12t&CZ79jiO)V}-%q_sJ=k~@!zzo5_;OXk;vd$@?2>_2Sa((~+ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/46eca356-3c1c-4db2-9c70-fad60ee33971.png b/sprites/s_node_shape_3d/46eca356-3c1c-4db2-9c70-fad60ee33971.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4a6b1f0c65d68aa5471928906b3d41cd9edc05 GIT binary patch literal 827 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq_ZS)5S5wi zh}f=VyRvBQ!WV99IxdACtQ8lnU!ag5_+nA%RK4Gv?}c}XdMymlxS>=jA})B)<|DIQ zM?j!KuL9RWDIX@Y&XDRrAvBS4buD|@ zULV_BV)fTnfaA^eS<4(RoA{^+U&%5xnSEBEq5OD_KwRyCO>bORhWzrHq{84J;#y)Q z%W$B?%60wq+m5OXtyx=7-G9mQv*zF9bCwJmU7O~&J1JU!VeGrJs+mdWbX>~jn=5Ml zL$Cgwvq(ezsj2T}$@@&LP7k|_{Y8#OzfLfC(NgnG^+Miud)3LF;I*f5s=F8zqv;IwnLo|9tEy%9g4_TbSjmS>-T{;u0! zZ&LMoiQbv4t&iqdgs)>PXgeLC36NYhIJm3 zT$Cm%H00Xzv^yVaie=O=;3T07%0NW@LcrkT-JX_&;7gn zpZP{|@r)Rq^83KFq*~${QIe8al4_M)lnSI6j0}uSbPY^(jVwY8%&kn!t&A_|H*Yfq_xO)5S5w=bycj1vMa2y9{5J}b zpJKv3rzSMu zuoTEFzwRZyI){;U0t1WVh3wAWP_qV+6Tgpq|C^{QKJlz(gTRem*W-ov*fJ}*7O<>4 zzUX=7`{plxEkdcS|#Y3<%MTfNu~ zqAt7395-*f6y|a*xWSZt+aaYoUqiN>hU?C05fz zgSU-Jr;Xk|>9((#`A{G#^y;e2S?R%#lNsEP-u#>Koc#w&s-DZAj>f`ZU?{4VxJHzu zB$lLFB^RXvDF!10BNJT%Q(YsA5Cd~76LTwLOKk%KD+7bSKci7K$$!05HPM87(8A5T-G@yGywodzR3>& literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/a3a465f9-7d13-48c5-a59d-e5a2453602e2.png b/sprites/s_node_shape_3d/a3a465f9-7d13-48c5-a59d-e5a2453602e2.png new file mode 100644 index 0000000000000000000000000000000000000000..0edd8d0b607ac5d8b23050e593a286b66c9a21d1 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`*`r;B5V$MLgMcl$9p zia7MAB_|2EC>2hef5U&lX4BwXE8-WJ)wRD3b4axQC~RP8ViI)e)2)^rE>4G-R`>8u zVEx9()wzAPwfXZicV^DL8|=05^o{$Pf9<(?igy0lqusc0O4a7v-(FskH?|#M@H+hP zLSd}abnotA&GNW}MYj79fUV*#f<%-`?D=!jYW<-HSbFjb`C z_RWavUswG5eTbP=?j&==vP_l9C*2$}O*!PWW_ZnOP;xMv{dM=UPzCX09W~u80_F}E zm-~h)q|bWxd_IeD=d#T8^UT(=#z!0UddFU8pMAhwh(pot_~Va9)e1iRys%By`v1%S z4Ck^oW|x^2mH=Z-wZt`|BqgyV)hf9t6-Y4{85o)98kp)DS%esvTbYFVdQ&MBb@ E0AHgGzW@LL literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/a8ab0827-e277-4fe0-af42-0a493e3f300e.png b/sprites/s_node_shape_3d/a8ab0827-e277-4fe0-af42-0a493e3f300e.png new file mode 100644 index 0000000000000000000000000000000000000000..5628a9ee8966c009ec806e0defdf0716e660c113 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^mA)5S5wCyYG61vN#G@_8H6Zu$?st)3V`citx1SIGc9( zl1itXiB#|PsI_G!`6aRYFO~lN`Nr3eL+1F$Lk2cdPb%ep{r&g*Va+3v!gJpzpJZuE zJYc{x<@8e@gXc2aau09IH8|D+47os&#vm>)%~e;mUVZ&FJ!4}8FdUN$V#Qy7wJK&l zRV~n_xNmxng^XP2uKoW*{&3eVROoyBlfOcH=>e0o?DxMfS3gkQGC_SQ1H-Mi-`*DO z-1E7%UaRFsx`RE#7ls&NC#y`(rF-VrZNL4NfnjM07emX0!g-}TS(m##T>e6M=Vh56 z9YNmgz$j2Hag8WRNi0dVN-jzTQVd20Mkcxjrn*KJAqM7FCgxVgmf8jeRt5%te?|wR zXvob^$xN%nt)XYhPnaO=6f@enYfFfe$!`njxgN@xNAsgmlx literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/ac1b25a5-14b0-48d2-8514-950fa4e40834.png b/sprites/s_node_shape_3d/ac1b25a5-14b0-48d2-8514-950fa4e40834.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ca35dc2d0c6d9ac5eaa77dd7c6f8f482777723 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0Uwr;B5V$MLsQH+J22 z5NP|qRaM4vhO?4I;q+^By^}e@YL~_zIM_S?LBYg(mY;MSU#v2Teo-KJM^@qvM^58x zX70tUYYt306PGNTeN;U6#Lm+Pn$muJtv9~RBk1&CQsB-Nzv~aIX4Y6b`DIB}tsukF zl1s0@=JB^5{{FGzPGu;F|NeWvWU_(pWrhbUoxB)#?p*h}V-d%)Or`@S#|Z*7Lf_dUjDnY zB2Z-RlcSmp3a2+64?2*x`RA+O|2%sQ+f01_bKH3U{lT33;(ty4$lXiYcpz)5)9$-& ztFKz!+|MK6q~IxZq_9WDli`7Tp!+#lnd5~v41aCn*I(~<>fqm$w*B_Ur$s-*wC?U+ zmpy&m3yJxR8*Elye;qX~bwa!V%l;?2a{n8J5)33*7~aSvMP9RZ^3W-jKVJAJ&S-n= zb>1nA?kAWV_!_KZuV2hD<76l}_wcu!<*9cJB{A1)D^9krkf}XhXvefcGTCgY$ed#S zhVMbw>v?}n-|^#Q4bzFlTScrr3oioWT(!hCq9i4;B-JXpC>2OC7#SFu=o*;n8d-!G zm|K~cTNztw8yHv_82tSi9gLzOH$NpatrE9}o+Xdp12t&CZ79jiO)V}-%q_sJ=k~@! Rz?8|r;OXk;vd$@?2>@0MGAjT8 literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/ada07b25-2b68-464c-8d15-1eb968b2aea6.png b/sprites/s_node_shape_3d/ada07b25-2b68-464c-8d15-1eb968b2aea6.png new file mode 100644 index 0000000000000000000000000000000000000000..419023382e755c9f4bb90bb378117806d2f9a412 GIT binary patch literal 834 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}`?)5S5wDm+YqIaD#<5;QE@ghya zv6JVVrA1Gl{Y<^2qx&y9oLqE4{M@se^n1^LpDRB%Q}+J%O7GTtSN_^RFuiqG=s(LG zhV<+trXQxV_nUainEWoPevs_gy{=n;N%QHUrV1NBrHKxKA`F~0bL+NCUdS-n_x$tE z@9SO%=}q6Llbzf-Ygu7cRo5boE3d!Gw>mvMTvM}<{rmUtojz*CJQuRIZkxp%G0k=L zRVIh)UmpjpoWjAvApW*2`fKg|vrmgex?M|R)rC6ONVqErmc%ZP(3y1lX+>S#yKt?k zECq)9^LCz8cj8zYwRV!<^0kK#A1*MP9cmtGAk~|5*g$P-ly7mYcpRUr!UK*33z?)@ z%hG14JuH~<_wQf(-dd&!L2?WdZI0`&2VbvT!+K-e+>onBzfL~Ma=ehCK<0UZ=I^Op zufA3p2`DTzVQ+S{n(CFgd-v^iCl>wsYuDf3KW)kV@JN9``Z{+=Z_n1~( zHhgb**(vJz^XE)Es?JX9Ii6g7_RH0;U$=6w_>^*nY-7y1T{dl*)|yJKFow%o=e9ZW z96q5lbG~l6e8@qYl(%JHt87=_etT}4>Is>q_{%ew<)3ENH~(^?a8An3n7R)(@A-Cc z8r7LT$p8BOzfnE&8l&%g?4JbY0h5$!iEBhjN@7W>RdP`(kYX@0Ff!3KFx54(2r)3X zGBLL@w$wH-ure_C`!hNiMMG|WN@iLmZVf$49=``_(16=el9`)YT#}eufLqV)jfa2< PpMk;C)z4*}Q$iB}6)a=f literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/adbc388b-49f9-47de-8d91-7ab7405eba30.png b/sprites/s_node_shape_3d/adbc388b-49f9-47de-8d91-7ab7405eba30.png new file mode 100644 index 0000000000000000000000000000000000000000..527786cd175eba2a23eee2740bd17202a9fd9db1 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0V1r;B5V$MLsQ&u2Yy zkU75J^pU-oPryp?h5Z-YKkNyJs9};{n!n*o$eyp9DerA7b(^HMl;%0P9O|+#PBEDI zr|{c_fLSx_%e?tp{~n4-Gn)VY{du2fPF|hoLtX~I{LgzXaA(3__J(YRzf(-P9+aEZ zr3x*XlKD8y%k$~aMHlA@Upwg{(f0j4!|^A-|J6I$C z|Lu633(hez%=vuU<%_!H+OXAO%NUc-l*Deo{j%iN)1r%_ou>bh6HFGJ?|{QvS7-gO*)(I=2p9My|YKdz^NlIc#s#S7PDv)9@GB7gH zH89mRvIsFSw=yxeGPcw)78&qol`;+0Mzd{KL7v# literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/c0f5b4b1-753c-4d80-8999-87f6036f42aa.png b/sprites/s_node_shape_3d/c0f5b4b1-753c-4d80-8999-87f6036f42aa.png new file mode 100644 index 0000000000000000000000000000000000000000..574a1e6791d74e6e6d071ae9b4b27cc93cdc7183 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq_xU)5S5wT~d$VB4%e$@WyZQPc-cM8j6`3O_0DB{GyPb_Iu~}~l+oZUJsRw>KUF#xetgr>mdKI;Vst03aUGn*aa+ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/d8f5c08f-c4a0-4a37-ac98-2504f79c363e.png b/sprites/s_node_shape_3d/d8f5c08f-c4a0-4a37-ac98-2504f79c363e.png new file mode 100644 index 0000000000000000000000000000000000000000..3471420de59e1058143ed151ea306aa82dc30f63 GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H(?D6+}Z#WBR=_}i%$d7BM* zTpBqg8U-a91Fg6g8!#z@kdt}E-xa|EUMF`7tPJ|S*LgVdgg^e^=*o-C5(&b@baQCRqdS*6%(J)hZWeY)_ZmwypKi z-i&sy7ykb&Z>T@h>W&laGu^qht#W21+Y!;ru3v78UcRwlFZY3!j@DftIx0e^{D|99 zaMAY_#O*NBpo#FA92|H*Yfq`*?r;B5V$MLsQZL<$K zNF4uf7F2U^VbhB+ad%C=yv8yCtLfjEcig?ee_^Y0d!OtsnJJg_FI?K#hX+4<%@f4B4h`<>7GR1R1kH_Odm{mS|P--r5!yzRd& zXP>QeTYT|*f`Nhc+`h2&*X7NW3eMTO@4s)p$2Y zTPAFo?sg&DaPmnTy}w737!L!zwQAL(iy01~p$t3N0z@)dT<$L_+F28-A(A(JgJo$**0?h;dK@=+m_$&EQw+4T69N!^2x2=e3xII zD&KwdO>`fpqPjHmr=Ne8*7g~06U(pSVqb7GXP^7xK=(ykU6~FDDlU1!-Ql9to;P*I zvYleb9~W-lvPHka@LS^i%cXZ0ity~(_hFm9!?dTLqt<>)T3cZ>(_%`F_*sTIfnM>l ztvjYFp8jO{pqdv1_o9J27iA>2cu}n x%}>cptHiCLXUXIDKn)sj8%i>BQ;SOya|>|mxxMiaFz^`|JYD@<);T3K0RTVj5Jdn0 literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/fbefaeba-464c-4984-9c90-b9fe8a68f749.png b/sprites/s_node_shape_3d/fbefaeba-464c-4984-9c90-b9fe8a68f749.png new file mode 100644 index 0000000000000000000000000000000000000000..6d47c7f96250605d607e27db6f54f6b975a6f90c GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`+3r;B5V$MLsQ_h%gn z5IJV=Ehc+Q>ExU}j?BLp>>8Xuvff(AuVB|$+q_QP>dslug*z-d7tQ{`F0SYubbZDI zF%^MD%e`9?K5ut@ae@C`(fgnK?%SSJ)D#fZTe-S>*>jdV%mz)Nr{5?o+OkyWV#mI0 z7Z#$h*T6M)))(oMElNJA{sDDsl&bhr#c;ZCmA2Hgo*I#dJsN27P*7@hl zo>%Ui{Qb9W>F(I&SF_e0n(6eTwR+xjiMGP+ck^OHLl4y<> z-Ky^Xm*Th7G>b}q9-aVdX_wX57eLmx1l66H?_DVF}DD>p4%G_0n--)gQu&X J%Q~loCII6V4(R{@ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/03f758c5-0f2b-471c-9bb3-a08437719dd7/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/03f758c5-0f2b-471c-9bb3-a08437719dd7/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbaea2dcf4b15afd0a305ef130b40f8a5714492 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0V9r;B5V$ML&U9rJEE zh_uzaC$@|1+K{qQVXxy32CnoO!UfGmEhTq-tC{^0QXN%Qysxy`7HwZ6HDQ94*`bLO z)=DH>$ly1pWfY3;1@gR>fikgG4pn;<6XeEVC6Yy22O_m zSLeEflx^vJF)!}=-l*&^hOuh|C)PI=2JX96EpkC+(G%Wh)~crtbF2^yjMx_J{MCfd|nZs8VzA_|W{q>6(CJDE<#qA1=D`!Z^ zjNionAk198|M*d#KUaLdWo?aeJ;B`2e{{yZSK5y(u8H3_JXTe8xAbn`uG6nA`nnsk zgMH%nd{*E%@!4j-PSd>SKOF_8e0{Rvhu~^>v9=JhEQJkiD;1 zZZAWR+hX~kQ{P>tbaaHRzPjrE`}+Go-=znNxXx#9K6tgns`kuh8|%WBH&at1ZD#sx zdRP!4>{N3z_IfbO_0s)JKUf&HV zJ^x((lF8kv`wfrna&r*;#3nmKnvv@g+Xd^6+l96aFAR?TNjk`J!NHe7)~5fZT7!0I z)sfF9_!z%PBqz>19(dsXh5i3e+gLx~*L`}gy4mJnB{1?;OI#yLQW8s2t&)pUffR$0 zfsu)>fvK*MMTmj9m5I5Pv8A?wft7*5-=ERJC>nC}Q!>*kack&V^7uVag9hA&lFZ!H b;*!MN0^E9TZ#)D{q6`e4u6{1-oD!M|H*Yfq`+Or;B5V$MLsQ_h&IV z3LLY4y5|RbFIUoXB@QvUonIzB5p}wxes@AhndW2%Ifd4xj}%bYmq~s2*V1&z@lUaz3J7wtxgOKx3@7m%uAAY$W?aOeADK- ziLUus3 z{@T>>Wh>*XWwsW{H{}>67#F@M)NM$O{F-C7+QRnS&+k@p{kylz2wyyTiXry;`n&Ts zyEdfrdHX+PG&pwaWQx&)Z_6*Qlz)(LQS=d`%i@bRVkd4YF?cM$+?IZVhb6*?`+MD zT7Pfmu$|j^_idRpgU(@tdDE|Q{IUO4_lu?3sc*Zi3hNqRbgGuPMwFx^mZVxG7o`Fz z1|tI_6I}yST_cMS19K}Ab1P#@Z36=<1B1Umqk~a2a literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/13d9fd09-286d-4a23-ac42-2f3e52c09bed/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/13d9fd09-286d-4a23-ac42-2f3e52c09bed/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..69dab5d8984a8ea781774a8fadc4f19d86073325 GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}8#)5S5wtA1!>tn791$ zPo1b3O$%m53kQ9Bfi}g-CslZVHzYI7WMKNxFs;*WuHVh~-!pfxJ6qn4+}I-G0e$+#xO1QY4F;VTt$ZkFL(NFjq;uT?&<0i%)3(0aIgCDbRzqW?F>Ap zDqcjDtT&RAJdn0I^Zx61zw3@EGe@kyF2DI^k49IXnVnp}ju`j0+izbO&9BsYWKlOg zXxq{$CQ`gQrx(SoS8iDlwKk1sv4#?lbIpBsO;-VymlM)i81z1{DJ*sIirn$~W5pWp z-N(dK!}rE-QF{q*eHKkv@g+R>76 zd+8J>&99fmCR>X9XJ=5!_ZF{UjcZcKSRc0f;>(gx4A)a)qzcym`@j4@tLB5H-sW%3 z*8n3+wZt`|BqgyV)hf9t6-Y4{85o)98kp)DS%esvTbYFVdQ&MBb@0Qi6f`v3p{ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/182fec8b-d5d9-4179-8285-4dcf33c5b4aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/182fec8b-d5d9-4179-8285-4dcf33c5b4aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..25db8e5ce76dead753010230f051ce44001dc74a GIT binary patch literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^l@)5S5wQ_$ZyT{tF-GIklBH8${&eAC-AFrNNwtFsD(*g67 zrYjGyKbXoq`6LU2&9NE(-w5fhZe~7^VN$iHs%PU<ZJkDs=DNX&m>rXDt3?WB$pEi9=DbAv-pHTI$nhQ-iWX85!2RZpxgs zt*VEiWrA*luW8&ZQ)#c4*Q5d*!a_YnT>B4(=l-<4yua(wx%i@U;@fZMu8l6&ZdkjI zA#(3&F~_)XcEDIrEpd$~Nl7e8wMs5Z1yT$~21X{j2Bx}379j@aRwm|F#+KR!237_J ze}6^?qiD#@PsvQH#I2!c$>aAx4H|G8N-}d(i%Sx73vlbXz3~t*tuQcny85}Sb4q9e E01$HTLjV8( literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/25d1fd94-e801-4236-920e-931be44954be/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/25d1fd94-e801-4236-920e-931be44954be/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..171c0d4fbbcd90fa409488d9133df12bf2dba70e GIT binary patch literal 1137 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^;2)5S5wnS<^Nb$C5;zBR+o)uh>`^B&@ElzrFjJCy&~#CiZua>YmSezx(^0!2`T4~92Jwc&EZ44GJICDUkQ^Q^K1t=`{rmmPGM8Di?P1%euc{^b zgXsrffbWA3A3of9{nboOh*L^R>c#8VyE(6!yuI_b%p9nBR)EkCp&vibxyMCB{K!mC zcfVTtm+kiL+u3JQj2Jd{cXvNOQ2ZchTI#G>v+_<{erZy-|Gt@-**9my^wN)NbNz(* z+AS?D7w+9FyZmzJ@yCe?2@jmjW`B)bdrh8k)6Ja8DxUW}CM{uLX?A?}{Q1$VSEsU0 zIL*Znxxi|w*T%hj&;I*YckFH1^{iRTPHg%k^+W2x$;s+r4Fwiw-n@C!USYG2VH#6= zoaY1o2g$M5TXjxP^HB?y=3&ds%&feB^XAVj>(-s)n&6=_WA^ObcW&L<#K_g4bK2>8 zDfb6=RYrzu*RS8tn)R$;XH1)lXON9teN{*%Uk{JuKR(;(PfX zTeG9P=JmNu3>zbOTmz4M_+T*6qou~q-$W|4u<)bWvBw`1w%>NunyNI{@BYc+=PNec ze!KP=*w`T(b*C}vH7Q^bRx2o1V`1+nTX6Qbe#2652YHw-j zsUWbzIQi30o7PKL+MN_rBF~A(q@CNmNp;u0ecKqWT)%E?W##4W?k;-Z(xplByq4x| zoqze|6?S&^)CF2ny_+^|VsbE=xu^8SC84E^QPI&i@7{g--~mI!ym@jvRr;PiOOsR( z;d=PB>gJ6b2C<^IzZ5?RcMx^juyd!UicsbA5-WQxQ43q!)U>o`cRzkC-1y%1LuBEd zxrg(zvR<{WTD4w-$J#aU#M2^)w!+ojT{_EFz1l7;EF8SFujsM}!~XmKMGg3F_~cYp z&WzDZ&(m)#oPYlNG8y-y`nOJ;I3c}&cZS(UrB9g))(ZXHYp${L?DFf^ukT;8Zk?1< zhkuRT{rCJQt2Z3@zt#Q!>L2WO{Ka*u7?@j`m|GcJY8x0>85sQi86AwGAvZrIGp!Q0hMpyl-vc#hz-=hW%uOvWNz5(4 Wt>^Z}L%?!^fx*+&&t;ucLK6UUxc(LZ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/37790c04-f438-4d6f-9883-4050e9b91ea1/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/37790c04-f438-4d6f-9883-4050e9b91ea1/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..d0acc927f5dd4ac6dd1082417c0396b8c734c438 GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}`_)5S5wl8UM>A_=3$=ryLC5y{b62o_HSdR&&)r}^@o;j+F)=ka~+o_i=d8(cH%|>9T8WT zhX!ncWnzyO?$|N;&5|9llGne!ZhwFFjo@>c_Llbx-u!Pp@X`3M z5W^vcMc?+ZCh#rzmZI{!=KkadbHsmM*0{BAo=u$o;W?jg8F$=WadTromy6}|&-M!C z2HP!dSP#wld~Kh{Ws{xDGGi{Aje)*`AYJE>AsM%FN(?$a5WINB5Iet9GR?(w&ea(0%lQ&`-7phisP>UThB9 z#U`*}Za#&7bTj_UKq7@--_$6KjxTKKj#Yx{d&&i?2n|47IACCqPKml zu(>G+l;k~jWAA4Dsa^&>>}Tut*Uvovd~)B~%P&mudR3vUy$xS<`sICqk-R=sbzvxvd;Cl zW&YhqA9YUN+x)evR&mXCw>HDJqMb4`ebn?BpKvIeo>vog3St0y;Pj_y4eMUZ&;43r z^>@qi<(9LPnLoMDcekQy458hHghq$B<>Fa?>O|`@| zq9i4;B-JXpC>2OC7#SFu=o*;n8d-!Gm|K~cTNztw8yHv_82tSi9gLzOH$NpatrE9} po+Xdp12t&CZ79jiO)V}-%q_sJ=k~@!zzo5_;OXk;vd$@?2>_2Sa((~+ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/46eca356-3c1c-4db2-9c70-fad60ee33971/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/46eca356-3c1c-4db2-9c70-fad60ee33971/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4a6b1f0c65d68aa5471928906b3d41cd9edc05 GIT binary patch literal 827 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq_ZS)5S5wi zh}f=VyRvBQ!WV99IxdACtQ8lnU!ag5_+nA%RK4Gv?}c}XdMymlxS>=jA})B)<|DIQ zM?j!KuL9RWDIX@Y&XDRrAvBS4buD|@ zULV_BV)fTnfaA^eS<4(RoA{^+U&%5xnSEBEq5OD_KwRyCO>bORhWzrHq{84J;#y)Q z%W$B?%60wq+m5OXtyx=7-G9mQv*zF9bCwJmU7O~&J1JU!VeGrJs+mdWbX>~jn=5Ml zL$Cgwvq(ezsj2T}$@@&LP7k|_{Y8#OzfLfC(NgnG^+Miud)3LF;I*f5s=F8zqv;IwnLo|9tEy%9g4_TbSjmS>-T{;u0! zZ&LMoiQbv4t&iqdgs)>PXgeLC36NYhIJm3 zT$Cm%H00Xzv^yVaie=O=;3T07%0NW@LcrkT-JX_&;7gn zpZP{|@r)Rq^83KFq*~${QIe8al4_M)lnSI6j0}uSbPY^(jVwY8%&kn!t&A_|H*Yfq_xO)5S5w=bycj1vMa2y9{5J}b zpJKv3rzSMu zuoTEFzwRZyI){;U0t1WVh3wAWP_qV+6Tgpq|C^{QKJlz(gTRem*W-ov*fJ}*7O<>4 zzUX=7`{plxEkdcS|#Y3<%MTfNu~ zqAt7395-*f6y|a*xWSZt+aaYoUqiN>hU?C05fz zgSU-Jr;Xk|>9((#`A{G#^y;e2S?R%#lNsEP-u#>Koc#w&s-DZAj>f`ZU?{4VxJHzu zB$lLFB^RXvDF!10BNJT%Q(YsA5Cd~76LTwLOKk%KD+7bSKci7K$$!05HPM87(8A5T-G@yGywodzR3>& literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/a3a465f9-7d13-48c5-a59d-e5a2453602e2/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/a3a465f9-7d13-48c5-a59d-e5a2453602e2/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..0edd8d0b607ac5d8b23050e593a286b66c9a21d1 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`*`r;B5V$MLgMcl$9p zia7MAB_|2EC>2hef5U&lX4BwXE8-WJ)wRD3b4axQC~RP8ViI)e)2)^rE>4G-R`>8u zVEx9()wzAPwfXZicV^DL8|=05^o{$Pf9<(?igy0lqusc0O4a7v-(FskH?|#M@H+hP zLSd}abnotA&GNW}MYj79fUV*#f<%-`?D=!jYW<-HSbFjb`C z_RWavUswG5eTbP=?j&==vP_l9C*2$}O*!PWW_ZnOP;xMv{dM=UPzCX09W~u80_F}E zm-~h)q|bWxd_IeD=d#T8^UT(=#z!0UddFU8pMAhwh(pot_~Va9)e1iRys%By`v1%S z4Ck^oW|x^2mH=Z-wZt`|BqgyV)hf9t6-Y4{85o)98kp)DS%esvTbYFVdQ&MBb@ E0AHgGzW@LL literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/a8ab0827-e277-4fe0-af42-0a493e3f300e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/a8ab0827-e277-4fe0-af42-0a493e3f300e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..5628a9ee8966c009ec806e0defdf0716e660c113 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq^mA)5S5wCyYG61vN#G@_8H6Zu$?st)3V`citx1SIGc9( zl1itXiB#|PsI_G!`6aRYFO~lN`Nr3eL+1F$Lk2cdPb%ep{r&g*Va+3v!gJpzpJZuE zJYc{x<@8e@gXc2aau09IH8|D+47os&#vm>)%~e;mUVZ&FJ!4}8FdUN$V#Qy7wJK&l zRV~n_xNmxng^XP2uKoW*{&3eVROoyBlfOcH=>e0o?DxMfS3gkQGC_SQ1H-Mi-`*DO z-1E7%UaRFsx`RE#7ls&NC#y`(rF-VrZNL4NfnjM07emX0!g-}TS(m##T>e6M=Vh56 z9YNmgz$j2Hag8WRNi0dVN-jzTQVd20Mkcxjrn*KJAqM7FCgxVgmf8jeRt5%te?|wR zXvob^$xN%nt)XYhPnaO=6f@enYfFfe$!`njxgN@xNAsgmlx literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/ac1b25a5-14b0-48d2-8514-950fa4e40834/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/ac1b25a5-14b0-48d2-8514-950fa4e40834/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ca35dc2d0c6d9ac5eaa77dd7c6f8f482777723 GIT binary patch literal 739 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0Uwr;B5V$MLsQH+J22 z5NP|qRaM4vhO?4I;q+^By^}e@YL~_zIM_S?LBYg(mY;MSU#v2Teo-KJM^@qvM^58x zX70tUYYt306PGNTeN;U6#Lm+Pn$muJtv9~RBk1&CQsB-Nzv~aIX4Y6b`DIB}tsukF zl1s0@=JB^5{{FGzPGu;F|NeWvWU_(pWrhbUoxB)#?p*h}V-d%)Or`@S#|Z*7Lf_dUjDnY zB2Z-RlcSmp3a2+64?2*x`RA+O|2%sQ+f01_bKH3U{lT33;(ty4$lXiYcpz)5)9$-& ztFKz!+|MK6q~IxZq_9WDli`7Tp!+#lnd5~v41aCn*I(~<>fqm$w*B_Ur$s-*wC?U+ zmpy&m3yJxR8*Elye;qX~bwa!V%l;?2a{n8J5)33*7~aSvMP9RZ^3W-jKVJAJ&S-n= zb>1nA?kAWV_!_KZuV2hD<76l}_wcu!<*9cJB{A1)D^9krkf}XhXvefcGTCgY$ed#S zhVMbw>v?}n-|^#Q4bzFlTScrr3oioWT(!hCq9i4;B-JXpC>2OC7#SFu=o*;n8d-!G zm|K~cTNztw8yHv_82tSi9gLzOH$NpatrE9}o+Xdp12t&CZ79jiO)V}-%q_sJ=k~@! Rz?8|r;OXk;vd$@?2>@0MGAjT8 literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/ada07b25-2b68-464c-8d15-1eb968b2aea6/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/ada07b25-2b68-464c-8d15-1eb968b2aea6/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..419023382e755c9f4bb90bb378117806d2f9a412 GIT binary patch literal 834 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq}`?)5S5wDm+YqIaD#<5;QE@ghya zv6JVVrA1Gl{Y<^2qx&y9oLqE4{M@se^n1^LpDRB%Q}+J%O7GTtSN_^RFuiqG=s(LG zhV<+trXQxV_nUainEWoPevs_gy{=n;N%QHUrV1NBrHKxKA`F~0bL+NCUdS-n_x$tE z@9SO%=}q6Llbzf-Ygu7cRo5boE3d!Gw>mvMTvM}<{rmUtojz*CJQuRIZkxp%G0k=L zRVIh)UmpjpoWjAvApW*2`fKg|vrmgex?M|R)rC6ONVqErmc%ZP(3y1lX+>S#yKt?k zECq)9^LCz8cj8zYwRV!<^0kK#A1*MP9cmtGAk~|5*g$P-ly7mYcpRUr!UK*33z?)@ z%hG14JuH~<_wQf(-dd&!L2?WdZI0`&2VbvT!+K-e+>onBzfL~Ma=ehCK<0UZ=I^Op zufA3p2`DTzVQ+S{n(CFgd-v^iCl>wsYuDf3KW)kV@JN9``Z{+=Z_n1~( zHhgb**(vJz^XE)Es?JX9Ii6g7_RH0;U$=6w_>^*nY-7y1T{dl*)|yJKFow%o=e9ZW z96q5lbG~l6e8@qYl(%JHt87=_etT}4>Is>q_{%ew<)3ENH~(^?a8An3n7R)(@A-Cc z8r7LT$p8BOzfnE&8l&%g?4JbY0h5$!iEBhjN@7W>RdP`(kYX@0Ff!3KFx54(2r)3X zGBLL@w$wH-ure_C`!hNiMMG|WN@iLmZVf$49=``_(16=el9`)YT#}eufLqV)jfa2< PpMk;C)z4*}Q$iB}6)a=f literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/adbc388b-49f9-47de-8d91-7ab7405eba30/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/adbc388b-49f9-47de-8d91-7ab7405eba30/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..527786cd175eba2a23eee2740bd17202a9fd9db1 GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfr0V1r;B5V$MLsQ&u2Yy zkU75J^pU-oPryp?h5Z-YKkNyJs9};{n!n*o$eyp9DerA7b(^HMl;%0P9O|+#PBEDI zr|{c_fLSx_%e?tp{~n4-Gn)VY{du2fPF|hoLtX~I{LgzXaA(3__J(YRzf(-P9+aEZ zr3x*XlKD8y%k$~aMHlA@Upwg{(f0j4!|^A-|J6I$C z|Lu633(hez%=vuU<%_!H+OXAO%NUc-l*Deo{j%iN)1r%_ou>bh6HFGJ?|{QvS7-gO*)(I=2p9My|YKdz^NlIc#s#S7PDv)9@GB7gH zH89mRvIsFSw=yxeGPcw)78&qol`;+0Mzd{KL7v# literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/c0f5b4b1-753c-4d80-8999-87f6036f42aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/c0f5b4b1-753c-4d80-8999-87f6036f42aa/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..574a1e6791d74e6e6d071ae9b4b27cc93cdc7183 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq_xU)5S5wT~d$VB4%e$@WyZQPc-cM8j6`3O_0DB{GyPb_Iu~}~l+oZUJsRw>KUF#xetgr>mdKI;Vst03aUGn*aa+ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/d8f5c08f-c4a0-4a37-ac98-2504f79c363e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/d8f5c08f-c4a0-4a37-ac98-2504f79c363e/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..3471420de59e1058143ed151ea306aa82dc30f63 GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H(?D6+}Z#WBR=_}i%$d7BM* zTpBqg8U-a91Fg6g8!#z@kdt}E-xa|EUMF`7tPJ|S*LgVdgg^e^=*o-C5(&b@baQCRqdS*6%(J)hZWeY)_ZmwypKi z-i&sy7ykb&Z>T@h>W&laGu^qht#W21+Y!;ru3v78UcRwlFZY3!j@DftIx0e^{D|99 zaMAY_#O*NBpo#FA92|H*Yfq`*?r;B5V$MLsQZL<$K zNF4uf7F2U^VbhB+ad%C=yv8yCtLfjEcig?ee_^Y0d!OtsnJJg_FI?K#hX+4<%@f4B4h`<>7GR1R1kH_Odm{mS|P--r5!yzRd& zXP>QeTYT|*f`Nhc+`h2&*X7NW3eMTO@4s)p$2Y zTPAFo?sg&DaPmnTy}w737!L!zwQAL(iy01~p$t3N0z@)dT<$L_+F28-A(A(JgJo$**0?h;dK@=+m_$&EQw+4T69N!^2x2=e3xII zD&KwdO>`fpqPjHmr=Ne8*7g~06U(pSVqb7GXP^7xK=(ykU6~FDDlU1!-Ql9to;P*I zvYleb9~W-lvPHka@LS^i%cXZ0ity~(_hFm9!?dTLqt<>)T3cZ>(_%`F_*sTIfnM>l ztvjYFp8jO{pqdv1_o9J27iA>2cu}n x%}>cptHiCLXUXIDKn)sj8%i>BQ;SOya|>|mxxMiaFz^`|JYD@<);T3K0RTVj5Jdn0 literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/layers/fbefaeba-464c-4984-9c90-b9fe8a68f749/d643ed43-cc1b-48da-94ba-8b43d929cf56.png b/sprites/s_node_shape_3d/layers/fbefaeba-464c-4984-9c90-b9fe8a68f749/d643ed43-cc1b-48da-94ba-8b43d929cf56.png new file mode 100644 index 0000000000000000000000000000000000000000..6d47c7f96250605d607e27db6f54f6b975a6f90c GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj3dtTpz6=aiY77hwEes65fI|H*Yfq`+3r;B5V$MLsQ_h%gn z5IJV=Ehc+Q>ExU}j?BLp>>8Xuvff(AuVB|$+q_QP>dslug*z-d7tQ{`F0SYubbZDI zF%^MD%e`9?K5ut@ae@C`(fgnK?%SSJ)D#fZTe-S>*>jdV%mz)Nr{5?o+OkyWV#mI0 z7Z#$h*T6M)))(oMElNJA{sDDsl&bhr#c;ZCmA2Hgo*I#dJsN27P*7@hl zo>%Ui{Qb9W>F(I&SF_e0n(6eTwR+xjiMGP+ck^OHLl4y<> z-Ky^Xm*Th7G>b}q9-aVdX_wX57eLmx1l66H?_DVF}DD>p4%G_0n--)gQu&X J%Q~loCII6V4(R{@ literal 0 HcmV?d00001 diff --git a/sprites/s_node_shape_3d/s_node_shape_3d.yy b/sprites/s_node_shape_3d/s_node_shape_3d.yy new file mode 100644 index 000000000..89daf6a9f --- /dev/null +++ b/sprites/s_node_shape_3d/s_node_shape_3d.yy @@ -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":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":17.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "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":"","Keyframes":[ + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","resourceVersion":"2.0","Stretch":false,}, + {"$Keyframe":"","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","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, + "volume":1.0, + "xorigin":12, + "yorigin":12, + }, + "swatchColours":null, + "swfPrecision":0.5, + "textureGroupId":{ + "name":"Default", + "path":"texturegroups/Default", + }, + "type":0, + "VTile":false, + "width":24, +} \ No newline at end of file