From 8380e460f02ee3fc15a2344940396eb7caef5d4c Mon Sep 17 00:00:00 2001 From: Tanasart Date: Fri, 19 Jan 2024 20:39:26 +0700 Subject: [PATCH] - New Diffuse node. --- PixelComposer.resource_order | 9 +- PixelComposer.yyp | 11 +- fonts/_f_sdf/_f_sdf.old.png | Bin 82361 -> 82361 bytes fonts/_f_sdf/_f_sdf.png | Bin 82361 -> 82361 bytes fonts/_f_sdf_medium/_f_sdf_medium.old.png | Bin 59906 -> 59906 bytes fonts/_f_sdf_medium/_f_sdf_medium.png | Bin 59906 -> 59906 bytes scripts/node_diffuse/node_diffuse.gml | 90 ++++++++++++ scripts/node_diffuse/node_diffuse.yy | 11 ++ scripts/node_registry/node_registry.gml | 5 +- .../node_simple_shape/node_simple_shape.gml | 13 +- scripts/panel_preview/panel_preview.gml | 2 +- .../sh_FLIP_draw_droplet.yy | 2 +- .../sh_FLIP_render_threshold.yy | 2 +- .../sh_diffuse_dissipate.fsh | 24 ++++ .../sh_diffuse_dissipate.vsh | 19 +++ .../sh_diffuse_dissipate.yy | 10 ++ shaders/sh_diffuse_flow/sh_diffuse_flow.fsh | 134 ++++++++++++++++++ shaders/sh_diffuse_flow/sh_diffuse_flow.vsh | 19 +++ shaders/sh_diffuse_flow/sh_diffuse_flow.yy | 10 ++ shaders/sh_diffuse_post/sh_diffuse_post.fsh | 12 ++ shaders/sh_diffuse_post/sh_diffuse_post.vsh | 19 +++ shaders/sh_diffuse_post/sh_diffuse_post.yy | 10 ++ shaders/sh_fluid_bleach/sh_fluid_bleach.yy | 2 +- shaders/sh_shape/sh_shape.fsh | 29 ++-- .../d1e85f96-d61b-4899-8e77-6ea2e64c5d6d.png | Bin 0 -> 2173 bytes .../97939aed-8fe8-4d7a-b6cb-3a8e69c6a402.png | Bin 0 -> 2173 bytes sprites/s_node_diffuse/s_node_diffuse.yy | 74 ++++++++++ 27 files changed, 481 insertions(+), 26 deletions(-) create mode 100644 scripts/node_diffuse/node_diffuse.gml create mode 100644 scripts/node_diffuse/node_diffuse.yy create mode 100644 shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.fsh create mode 100644 shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.vsh create mode 100644 shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy create mode 100644 shaders/sh_diffuse_flow/sh_diffuse_flow.fsh create mode 100644 shaders/sh_diffuse_flow/sh_diffuse_flow.vsh create mode 100644 shaders/sh_diffuse_flow/sh_diffuse_flow.yy create mode 100644 shaders/sh_diffuse_post/sh_diffuse_post.fsh create mode 100644 shaders/sh_diffuse_post/sh_diffuse_post.vsh create mode 100644 shaders/sh_diffuse_post/sh_diffuse_post.yy create mode 100644 sprites/s_node_diffuse/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d.png create mode 100644 sprites/s_node_diffuse/layers/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d/97939aed-8fe8-4d7a-b6cb-3a8e69c6a402.png create mode 100644 sprites/s_node_diffuse/s_node_diffuse.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 90f2fd6dc..240bf85d1 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -222,9 +222,7 @@ {"name":"filter","order":4,"path":"folders/shader/filter.yy",}, {"name":"color","order":53,"path":"folders/shader/filter/color.yy",}, {"name":"shadow caster","order":46,"path":"folders/shader/filter/shadow caster.yy",}, - {"name":"FLIP","order":23,"path":"folders/shader/FLIP.yy",}, {"name":"flood fill","order":11,"path":"folders/shader/flood fill.yy",}, - {"name":"fluid","order":20,"path":"folders/shader/fluid.yy",}, {"name":"generator","order":1,"path":"folders/shader/generator.yy",}, {"name":"blinker","order":30,"path":"folders/shader/generator/blinker.yy",}, {"name":"cell","order":31,"path":"folders/shader/generator/cell.yy",}, @@ -243,6 +241,9 @@ {"name":"morph","order":17,"path":"folders/shader/morph.yy",}, {"name":"pixel builder","order":18,"path":"folders/shader/pixel builder.yy",}, {"name":"shape seperator","order":5,"path":"folders/shader/shape seperator.yy",}, + {"name":"simulation","order":24,"path":"folders/shader/simulation.yy",}, + {"name":"diffuse","order":3,"path":"folders/shader/simulation/diffuse.yy",}, + {"name":"fluid","order":1,"path":"folders/shader/simulation/fluid.yy",}, {"name":"sprites","order":2,"path":"folders/shader/sprites.yy",}, {"name":"surface replace","order":16,"path":"folders/shader/surface replace.yy",}, {"name":"transition","order":15,"path":"folders/shader/transition.yy",}, @@ -892,6 +893,7 @@ {"name":"node_boolean","order":17,"path":"scripts/node_boolean/node_boolean.yy",}, {"name":"node_grid_tri","order":3,"path":"scripts/node_grid_tri/node_grid_tri.yy",}, {"name":"node_average","order":5,"path":"scripts/node_average/node_average.yy",}, + {"name":"sh_diffuse_flow","order":1,"path":"shaders/sh_diffuse_flow/sh_diffuse_flow.yy",}, {"name":"node_mesh_transform","order":2,"path":"scripts/node_mesh_transform/node_mesh_transform.yy",}, {"name":"node_fluid_turbulence","order":10,"path":"scripts/node_fluid_turbulence/node_fluid_turbulence.yy",}, {"name":"sh_sdf","order":1,"path":"shaders/sh_sdf/sh_sdf.yy",}, @@ -959,6 +961,7 @@ {"name":"node_path_builder","order":9,"path":"scripts/node_path_builder/node_path_builder.yy",}, {"name":"o_dialog_gradient","order":1,"path":"objects/o_dialog_gradient/o_dialog_gradient.yy",}, {"name":"sh_channel_R_grey","order":7,"path":"shaders/sh_channel_R_grey/sh_channel_R_grey.yy",}, + {"name":"s_node_diffuse","order":63,"path":"sprites/s_node_diffuse/s_node_diffuse.yy",}, {"name":"node_array_sample","order":18,"path":"scripts/node_array_sample/node_array_sample.yy",}, {"name":"sh_blend_subtract","order":5,"path":"shaders/sh_blend_subtract/sh_blend_subtract.yy",}, {"name":"BBMOD_Vec4","order":6,"path":"scripts/BBMOD_Vec4/BBMOD_Vec4.yy",}, @@ -1070,6 +1073,7 @@ {"name":"s_node_dynasurf","order":3,"path":"sprites/s_node_dynasurf/s_node_dynasurf.yy",}, {"name":"obj_reader","order":2,"path":"scripts/obj_reader/obj_reader.yy",}, {"name":"sh_invert","order":17,"path":"shaders/sh_invert/sh_invert.yy",}, + {"name":"node_diffuse","order":26,"path":"scripts/node_diffuse/node_diffuse.yy",}, {"name":"preview_overlay_puppet","order":4,"path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",}, {"name":"s_icon_64","order":2,"path":"sprites/s_icon_64/s_icon_64.yy",}, {"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",}, @@ -1471,6 +1475,7 @@ {"name":"sh_noise_wavelet","order":12,"path":"shaders/sh_noise_wavelet/sh_noise_wavelet.yy",}, {"name":"node_cache_base","order":18,"path":"scripts/node_cache_base/node_cache_base.yy",}, {"name":"fd_rectangle_set_velocity_dissipation_type","order":13,"path":"scripts/fd_rectangle_set_velocity_dissipation_type/fd_rectangle_set_velocity_dissipation_type.yy",}, + {"name":"sh_diffuse_post","order":2,"path":"shaders/sh_diffuse_post/sh_diffuse_post.yy",}, {"name":"node_color_replacement","order":3,"path":"scripts/node_color_replacement/node_color_replacement.yy",}, {"name":"path_reader","order":5,"path":"scripts/path_reader/path_reader.yy",}, {"name":"__node_3d_repeat","order":6,"path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 2215c9a36..89613d2fd 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -254,9 +254,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"filter","folderPath":"folders/shader/filter.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/shader/filter/color.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"shadow caster","folderPath":"folders/shader/filter/shadow caster.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"FLIP","folderPath":"folders/shader/FLIP.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"flood fill","folderPath":"folders/shader/flood fill.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluid","folderPath":"folders/shader/fluid.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"generator","folderPath":"folders/shader/generator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"blinker","folderPath":"folders/shader/generator/blinker.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"cell","folderPath":"folders/shader/generator/cell.yy",}, @@ -275,6 +273,10 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"morph","folderPath":"folders/shader/morph.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"pixel builder","folderPath":"folders/shader/pixel builder.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"shape seperator","folderPath":"folders/shader/shape seperator.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"simulation","folderPath":"folders/shader/simulation.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"diffuse","folderPath":"folders/shader/simulation/diffuse.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"FLIP","folderPath":"folders/shader/simulation/FLIP.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluid","folderPath":"folders/shader/simulation/fluid.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"sprites","folderPath":"folders/shader/sprites.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface replace","folderPath":"folders/shader/surface replace.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"transition","folderPath":"folders/shader/transition.yy",}, @@ -1169,6 +1171,7 @@ {"id":{"name":"node_boolean","path":"scripts/node_boolean/node_boolean.yy",},}, {"id":{"name":"node_grid_tri","path":"scripts/node_grid_tri/node_grid_tri.yy",},}, {"id":{"name":"node_average","path":"scripts/node_average/node_average.yy",},}, + {"id":{"name":"sh_diffuse_flow","path":"shaders/sh_diffuse_flow/sh_diffuse_flow.yy",},}, {"id":{"name":"node_mesh_transform","path":"scripts/node_mesh_transform/node_mesh_transform.yy",},}, {"id":{"name":"node_fluid_turbulence","path":"scripts/node_fluid_turbulence/node_fluid_turbulence.yy",},}, {"id":{"name":"sh_sdf","path":"shaders/sh_sdf/sh_sdf.yy",},}, @@ -1248,6 +1251,7 @@ {"id":{"name":"node_path_builder","path":"scripts/node_path_builder/node_path_builder.yy",},}, {"id":{"name":"o_dialog_gradient","path":"objects/o_dialog_gradient/o_dialog_gradient.yy",},}, {"id":{"name":"sh_channel_R_grey","path":"shaders/sh_channel_R_grey/sh_channel_R_grey.yy",},}, + {"id":{"name":"s_node_diffuse","path":"sprites/s_node_diffuse/s_node_diffuse.yy",},}, {"id":{"name":"node_array_sample","path":"scripts/node_array_sample/node_array_sample.yy",},}, {"id":{"name":"sh_blend_subtract","path":"shaders/sh_blend_subtract/sh_blend_subtract.yy",},}, {"id":{"name":"BBMOD_Vec4","path":"scripts/BBMOD_Vec4/BBMOD_Vec4.yy",},}, @@ -1370,6 +1374,7 @@ {"id":{"name":"s_node_dynasurf","path":"sprites/s_node_dynasurf/s_node_dynasurf.yy",},}, {"id":{"name":"obj_reader","path":"scripts/obj_reader/obj_reader.yy",},}, {"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},}, + {"id":{"name":"node_diffuse","path":"scripts/node_diffuse/node_diffuse.yy",},}, {"id":{"name":"preview_overlay_puppet","path":"scripts/preview_overlay_puppet/preview_overlay_puppet.yy",},}, {"id":{"name":"__mesh","path":"scripts/__mesh/__mesh.yy",},}, {"id":{"name":"s_icon_64","path":"sprites/s_icon_64/s_icon_64.yy",},}, @@ -1617,6 +1622,7 @@ {"id":{"name":"s_node_path_shift","path":"sprites/s_node_path_shift/s_node_path_shift.yy",},}, {"id":{"name":"node_rigid_group","path":"scripts/node_rigid_group/node_rigid_group.yy",},}, {"id":{"name":"sh_slice_spritesheet_empty_scan","path":"shaders/sh_slice_spritesheet_empty_scan/sh_slice_spritesheet_empty_scan.yy",},}, + {"id":{"name":"sh_diffuse_dissipate","path":"shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy",},}, {"id":{"name":"s_node_grid_tri","path":"sprites/s_node_grid_tri/s_node_grid_tri.yy",},}, {"id":{"name":"s_node_local_analyze","path":"sprites/s_node_local_analyze/s_node_local_analyze.yy",},}, {"id":{"name":"_f_p0b","path":"fonts/_f_p0b/_f_p0b.yy",},}, @@ -1829,6 +1835,7 @@ {"id":{"name":"sh_noise_wavelet","path":"shaders/sh_noise_wavelet/sh_noise_wavelet.yy",},}, {"id":{"name":"node_cache_base","path":"scripts/node_cache_base/node_cache_base.yy",},}, {"id":{"name":"fd_rectangle_set_velocity_dissipation_type","path":"scripts/fd_rectangle_set_velocity_dissipation_type/fd_rectangle_set_velocity_dissipation_type.yy",},}, + {"id":{"name":"sh_diffuse_post","path":"shaders/sh_diffuse_post/sh_diffuse_post.yy",},}, {"id":{"name":"node_color_replacement","path":"scripts/node_color_replacement/node_color_replacement.yy",},}, {"id":{"name":"path_reader","path":"scripts/path_reader/path_reader.yy",},}, {"id":{"name":"__node_3d_repeat","path":"scripts/__node_3d_repeat/__node_3d_repeat.yy",},}, diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index 8fce96390853eb7aa785bab3139e93efb3ba2419..3d8e91a1bb5e55eb86560df3331446b53c0d7a8e 100644 GIT binary patch delta 87 zcmdnl%(}CgwP6dRxuc+^m63^+iKVuIft7)Q)S(x?(>)v+6;Oq<=LdY8Ug^lFEQ_Mr TrmIko0SG)@{an^LB{Ts5K+PA& delta 87 zcmdnl%(}CgwP6dRxuc+gm9e>%v4OUMft7)Q#^zINrh7OtDxeBSzAF-#Ug^lFEQ_L= T?|1Nd1|aZs^>bP0l+XkKKXDiy diff --git a/fonts/_f_sdf/_f_sdf.png b/fonts/_f_sdf/_f_sdf.png index e03d2ba17aa032db876dde111d50e6bcb60ffe33..1fb881826d40d907ad6a003426cb6e048044c953 100644 GIT binary patch delta 90 zcmdnl%(}CgwP6dRnWK=Qv6Z1I5NR72SQ!|&d}1@2?%~KNk0x%qeqZ18N=HT|IaKvY SyXFTn0D-5gpUXO@geCx1Bp4h3 delta 90 zcmdnl%(}CgwP6dRnWK<_xs{=@m9eq5fq|8Qf$945m!^9-GRmWgyL>9on_lV2s3eD~ UUif*~Mg}18boFyt=akR{0F_}G761SM diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.old.png b/fonts/_f_sdf_medium/_f_sdf_medium.old.png index a087ff1050d5770a8c7766b1446ac17b02243570..9d540a00a68165e884ff0b93af7fd44745edf5b7 100644 GIT binary patch delta 83 zcmZp=!rXL)c|*fXK}#zm6Dt!-Z36=<0|Ti;FMKCYe5rscnms?@o})xkln QXBdFM)78&qol`;+0EBKCI{*Lx delta 86 zcmZp=!rXL)c|-k6Ap>(OLt`srV{HQiD+2@5_2(~5p7>H8P1xmAdEVqhFO}p_RSQ24 Q+sFU}p00i_>zopr0QAxuiU0rr diff --git a/scripts/node_diffuse/node_diffuse.gml b/scripts/node_diffuse/node_diffuse.gml new file mode 100644 index 000000000..8a635ff48 --- /dev/null +++ b/scripts/node_diffuse/node_diffuse.gml @@ -0,0 +1,90 @@ +function Node_Diffuse(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Diffuse"; + + inputs[| 0] = nodeValue("Density field", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone ); + + inputs[| 1] = nodeValue("Dissipation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.05) + .setDisplay(VALUE_DISPLAY.slider, { range: [ -0.2, 0.2, 0.001] }); + + inputs[| 2] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 4) + + inputs[| 3] = nodeValue("Randomness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 100) + + inputs[| 4] = nodeValue("Flow rate", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1) + .setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 0.2, 0.001] }); + + inputs[| 5] = nodeValue("Thershold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.7 ]) + .setDisplay(VALUE_DISPLAY.slider_range); + + inputs[| 6] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random()) + + inputs[| 7] = nodeValue("External", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone ); + + inputs[| 8] = nodeValue("External strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.3) + .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01] }); + + inputs[| 9] = nodeValue("Detail", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1) + + outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + + input_display_list = [ 0, 6, + ["Diffuse", false], 1, + ["Flow", false], 2, 9, 3, 4, + ["Forces", false], 7, 8, + ["Rendering", false], 5, + ] + + temp_surface = [ surface_create(1, 1), surface_create(1, 1) ]; + + static update = function() { + var _surf = getInputData(0); + var _diss = getInputData(1); + var _scal = getInputData(2); + var _rand = getInputData(3); + var _flow = getInputData(4); + var _thre = getInputData(5); + var _seed = getInputData(6); + var _forc = getInputData(7); + var _fstr = getInputData(8); + var _detl = getInputData(9); + if(!is_surface(_surf)) return; + + var _sw = surface_get_width_safe(_surf); + var _sh = surface_get_height_safe(_surf); + + var _outSurf = outputs[| 0].getValue(); + _outSurf = surface_verify(_outSurf, _sw, _sh); + temp_surface[0] = surface_verify(temp_surface[0], _sw, _sh); + temp_surface[1] = surface_verify(temp_surface[1], _sw, _sh); + + surface_set_shader(temp_surface[0], sh_diffuse_dissipate); + shader_set_f("dimension", _sw, _sh); + shader_set_f("dissipation", 1 - _diss); + + draw_surface_safe(_surf); + surface_reset_shader(); + + surface_set_shader(temp_surface[1], sh_diffuse_flow); + shader_set_f("dimension", _sw, _sh); + shader_set_f("scale", _scal); + shader_set_i("detail", _detl); + shader_set_f("flowRate", _flow); + shader_set_f("seed", _seed + CURRENT_FRAME / _rand); + + shader_set_i("useExternal", is_surface(_forc)); + shader_set_f("externalStrength", _fstr); + shader_set_surface("externalForce", _forc); + + draw_surface_safe(temp_surface[0]); + surface_reset_shader(); + + surface_set_shader(_outSurf, sh_diffuse_post); + shader_set_f("dimension", _sw, _sh); + shader_set_f("threshold", _thre); + + draw_surface_safe(temp_surface[1]); + surface_reset_shader(); + + outputs[| 0].setValue(_outSurf); + } +} \ No newline at end of file diff --git a/scripts/node_diffuse/node_diffuse.yy b/scripts/node_diffuse/node_diffuse.yy new file mode 100644 index 000000000..7b31bcccb --- /dev/null +++ b/scripts/node_diffuse/node_diffuse.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_diffuse", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 815db3c06..aec88e443 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -492,7 +492,7 @@ function __initNodes() { addNodeObject(filter, "RGBA Combine", s_node_RGB_combine, "Node_Combine_RGB", [1, Node_Combine_RGB],, "Combine 4 image in to one. Each image use to control RGBA channel.").setVersion(1070); addNodeObject(filter, "HSV Combine", s_node_HSV_combine, "Node_Combine_HSV", [1, Node_Combine_HSV],, "Combine 4 image in to one. Each image use to control HSVA channel.").setVersion(1070); addNodeObject(filter, "Override Channel", s_node_ovreride_channel, "Node_Override_Channel", [1, Node_Override_Channel],, "Replace RGBA value of one surface with anothers.").setVersion(11640); - + ds_list_add(filter, "Blurs"); addNodeObject(filter, "Blur", s_node_blur, "Node_Blur", [1, Node_Blur], ["gaussian blur"], "Blur image smoothly."); addNodeObject(filter, "Simple Blur", s_node_blur_simple, "Node_Blur_Simple", [1, Node_Blur_Simple],, "Blur image using simpler algorithm. Allowing for variable blur strength.").setVersion(1070); @@ -502,7 +502,7 @@ function __initNodes() { addNodeObject(filter, "Lens Blur", s_node_bokeh, "Node_Blur_Bokeh", [1, Node_Blur_Bokeh], ["bokeh"], "Create bokeh effect. Blur lighter color in a lens-like manner.").setVersion(1110); addNodeObject(filter, "Contrast Blur", s_node_blur_contrast, "Node_Blur_Contrast", [1, Node_Blur_Contrast],, "Blur only pixel of a similiar color."); addNodeObject(filter, "Average", s_node_average, "Node_Average", [1, Node_Average],, "Average color of every pixels in the image.").setVersion(1110); - + ds_list_add(filter, "Warps"); addNodeObject(filter, "Mirror", s_node_mirror, "Node_Mirror", [1, Node_Mirror],, "Reflect the image along a reflection line.").setVersion(1070); addNodeObject(filter, "Twirl", s_node_twirl, "Node_Twirl", [1, Node_Twirl], ["twist"], "Twist the image around a mid point."); @@ -660,6 +660,7 @@ function __initNodes() { addNodeObject(generator, "FLIP Fluid", s_node_fluidSim_group, "Node_FLIP_Group_Inline", [1, Node_FLIP_Group_Inline],, "Create group for fluid simulation.").setVersion(11620); addNodeObject(generator, "SmokeSim", s_node_smokeSim_group, "Node_Fluid_Group_Inline", [1, Node_Fluid_Group_Inline],, "Create group for smoke simulation.").setVersion(1120); addNodeObject(generator, "StrandSim", s_node_strandSim, "Node_Strand_Group_Inline", [1, Node_Strand_Group_Inline], ["Hair"], "Create group for hair simulation.").setVersion(1140); + addNodeObject(generator, "Diffuse", s_node_diffuse, "Node_Diffuse", [1, Node_Diffuse],, "Simulate diffusion like simulation.").setVersion(11640); addNodeObject(generator, "Reaction Diffusion", s_node_reaction_diffusion, "Node_RD", [1, Node_RD],, "Simulate reaction diffusion effect.").setVersion(11630); ds_list_add(generator, "Region"); diff --git a/scripts/node_simple_shape/node_simple_shape.gml b/scripts/node_simple_shape/node_simple_shape.gml index 7a80d87bb..965d0ff7c 100644 --- a/scripts/node_simple_shape/node_simple_shape.gml +++ b/scripts/node_simple_shape/node_simple_shape.gml @@ -1,4 +1,4 @@ -enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, leaf, crescent } +enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, leaf, crescent, donut } function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "Shape"; @@ -9,7 +9,7 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con inputs[| 1] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) - .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent" ]); + .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent", "Donut" ]); onSurfaceSize = function() { return getInputData(0, DEF_SURF); }; inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ]) @@ -275,12 +275,21 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con break; case NODE_SHAPE_TYPE.crescent : inputs[| 5].setVisible(true); + inputs[| 7].setVisible(true); inputs[| 13].setVisible(true); inputs[| 5].name = "Shift"; inputs[| 13].name = "Inner circle"; shader_set_f("outer", _data[ 5]); + shader_set_f("angle", -degtorad(_data[7])); + shader_set_f("inner", _data[13]); + break; + case NODE_SHAPE_TYPE.donut : + inputs[| 13].setVisible(true); + + inputs[| 13].name = "Inner circle"; + shader_set_f("inner", _data[13]); break; } #endregion diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 7ce0d6fa3..e96528879 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -1088,7 +1088,7 @@ function Panel_Preview() : PanelContent() constructor { var overlayHover = tool_hovering == noone && !overlay_hovering; overlayHover &= active && isHover; - overlayHover &= point_in_rectangle(mx, my, toolbar_width, toolbar_height, w, h - toolbar_height); + overlayHover &= point_in_rectangle(mx, my, (_node.tools != -1) * toolbar_width, toolbar_height, w, h - toolbar_height); overlayHover &= !key_mod_press(CTRL); var params = { w, h, toolbar_height }; diff --git a/shaders/sh_FLIP_draw_droplet/sh_FLIP_draw_droplet.yy b/shaders/sh_FLIP_draw_droplet/sh_FLIP_draw_droplet.yy index 65d5d9bbf..4030a67c0 100644 --- a/shaders/sh_FLIP_draw_droplet/sh_FLIP_draw_droplet.yy +++ b/shaders/sh_FLIP_draw_droplet/sh_FLIP_draw_droplet.yy @@ -4,7 +4,7 @@ "name": "sh_FLIP_draw_droplet", "parent": { "name": "FLIP", - "path": "folders/shader/FLIP.yy", + "path": "folders/shader/simulation/FLIP.yy", }, "type": 1, } \ No newline at end of file diff --git a/shaders/sh_FLIP_render_threshold/sh_FLIP_render_threshold.yy b/shaders/sh_FLIP_render_threshold/sh_FLIP_render_threshold.yy index 53b03d63e..87982c506 100644 --- a/shaders/sh_FLIP_render_threshold/sh_FLIP_render_threshold.yy +++ b/shaders/sh_FLIP_render_threshold/sh_FLIP_render_threshold.yy @@ -4,7 +4,7 @@ "name": "sh_FLIP_render_threshold", "parent": { "name": "FLIP", - "path": "folders/shader/FLIP.yy", + "path": "folders/shader/simulation/FLIP.yy", }, "type": 1, } \ No newline at end of file diff --git a/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.fsh b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.fsh new file mode 100644 index 000000000..b13fdef4b --- /dev/null +++ b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.fsh @@ -0,0 +1,24 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform float dissipation; + +void main() { + vec2 tx = 1. / dimension; + + vec4 f0 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, -tx.y) ); + vec4 f1 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., -tx.y) ); + vec4 f2 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, -tx.y) ); + + vec4 f3 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, 0.) ); + vec4 f4 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., 0.) ); + vec4 f5 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, 0.) ); + + vec4 f6 = texture2D( gm_BaseTexture, v_vTexcoord + vec2(-tx.x, tx.y) ); + vec4 f7 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( 0., tx.y) ); + vec4 f8 = texture2D( gm_BaseTexture, v_vTexcoord + vec2( tx.x, tx.y) ); + + vec4 clr = (f0 + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8) / 9.; + gl_FragColor = vec4(clr.rgb * dissipation, clr.a); +} diff --git a/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.vsh b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy new file mode 100644 index 000000000..22ebabdfe --- /dev/null +++ b/shaders/sh_diffuse_dissipate/sh_diffuse_dissipate.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_diffuse_dissipate", + "parent": { + "name": "diffuse", + "path": "folders/shader/simulation/diffuse.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_diffuse_flow/sh_diffuse_flow.fsh b/shaders/sh_diffuse_flow/sh_diffuse_flow.fsh new file mode 100644 index 000000000..299a41b7b --- /dev/null +++ b/shaders/sh_diffuse_flow/sh_diffuse_flow.fsh @@ -0,0 +1,134 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform float seed; +uniform float scale; +uniform int detail; +uniform float flowRate; + +uniform int useExternal; +uniform float externalStrength; +uniform sampler2D externalForce; + +float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * 43758.545); } +float grey (vec4 col) { return (col.r + col.g + col.b) / 3.; } + +vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } +vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } +vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); } +vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; } + +float snoise(vec3 vec) { #region + vec3 v = vec * 4.; + + const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0); + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + // First corner + vec3 i = floor(v + dot(v, C.yyy)); + vec3 x0 = v - i + dot(i, C.xxx); + + // Other corners + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min( g.xyz, l.zxy ); + vec3 i2 = max( g.xyz, l.zxy ); + + // x0 = x0 - 0.0 + 0.0 * C.xxx; + // x1 = x0 - i1 + 1.0 * C.xxx; + // x2 = x0 - i2 + 2.0 * C.xxx; + // x3 = x0 - 1.0 + 3.0 * C.xxx; + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y + vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + vec4 p = permute( permute( permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + float n_ = 0.142857142857; // 1.0/7.0 + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) + + vec4 x = x_ * ns.x + ns.yyyy; + vec4 y = y_ * ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + vec4 s0 = floor(b0) * 2.0 + 1.0; + vec4 s1 = floor(b1) * 2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy ; + vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww ; + + vec3 p0 = vec3(a0.xy, h.x); + vec3 p1 = vec3(a0.zw, h.y); + vec3 p2 = vec3(a1.xy, h.z); + vec3 p3 = vec3(a1.zw, h.w); + + //Normalise gradients + vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); + m = m * m; + + float n = 105.0 * dot( m * m, vec4( dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3) ) ); + n = mix(0.0, 0.5 + 0.5 * n, smoothstep(0.0, 0.003, vec.z)); + return n; +} #endregion + +float simplex(in vec2 st, in int itr) { #region + vec2 p = st * 2.0 - 1.0; + vec3 xyz = vec3(p, seed); + + float amp = pow(2., float(itr) - 1.) / (pow(2., float(itr)) - 1.); + float n = 0.; + + for(int i = 0; i < 32; i++) { + if(i >= itr) break; + + n += snoise(xyz) * amp; + + amp *= .5; + xyz *= 2.; + } + + return n; +} #endregion + +void main() { + vec2 tx = 1. / dimension; + + float x0 = simplex((v_vTexcoord + vec2(-tx.x, 0.)) / scale, detail); + float x1 = simplex((v_vTexcoord + vec2( tx.x, 0.)) / scale, detail); + float y0 = simplex((v_vTexcoord + vec2(0., -tx.y)) / scale, detail); + float y1 = simplex((v_vTexcoord + vec2(0., tx.y)) / scale, detail); + + vec2 flow = vec2(x1 - x0, y1 - y0); + if(useExternal == 1) { + vec4 _forc = texture2D( externalForce, v_vTexcoord ); + flow -= (_forc.xy - 0.5) * 2. * externalStrength; + } + + gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord - flow * flowRate ); +} diff --git a/shaders/sh_diffuse_flow/sh_diffuse_flow.vsh b/shaders/sh_diffuse_flow/sh_diffuse_flow.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_diffuse_flow/sh_diffuse_flow.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_diffuse_flow/sh_diffuse_flow.yy b/shaders/sh_diffuse_flow/sh_diffuse_flow.yy new file mode 100644 index 000000000..b17335f3e --- /dev/null +++ b/shaders/sh_diffuse_flow/sh_diffuse_flow.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_diffuse_flow", + "parent": { + "name": "diffuse", + "path": "folders/shader/simulation/diffuse.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_diffuse_post/sh_diffuse_post.fsh b/shaders/sh_diffuse_post/sh_diffuse_post.fsh new file mode 100644 index 000000000..41be0bc0b --- /dev/null +++ b/shaders/sh_diffuse_post/sh_diffuse_post.fsh @@ -0,0 +1,12 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform vec2 threshold; + +void main() { + vec4 c = texture2D( gm_BaseTexture, v_vTexcoord ); + float a = (c.r + c.g + c.b) / 3.; + + gl_FragColor = vec4(vec3(smoothstep(threshold[0], threshold[1], a)), 1.); +} diff --git a/shaders/sh_diffuse_post/sh_diffuse_post.vsh b/shaders/sh_diffuse_post/sh_diffuse_post.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_diffuse_post/sh_diffuse_post.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_diffuse_post/sh_diffuse_post.yy b/shaders/sh_diffuse_post/sh_diffuse_post.yy new file mode 100644 index 000000000..1b2ff2307 --- /dev/null +++ b/shaders/sh_diffuse_post/sh_diffuse_post.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_diffuse_post", + "parent": { + "name": "diffuse", + "path": "folders/shader/simulation/diffuse.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_fluid_bleach/sh_fluid_bleach.yy b/shaders/sh_fluid_bleach/sh_fluid_bleach.yy index 810b5ddbe..af1abe2eb 100644 --- a/shaders/sh_fluid_bleach/sh_fluid_bleach.yy +++ b/shaders/sh_fluid_bleach/sh_fluid_bleach.yy @@ -4,7 +4,7 @@ "name": "sh_fluid_bleach", "parent": { "name": "fluid", - "path": "folders/shader/fluid.yy", + "path": "folders/shader/simulation/fluid.yy", }, "type": 1, } \ No newline at end of file diff --git a/shaders/sh_shape/sh_shape.fsh b/shaders/sh_shape/sh_shape.fsh index 288126fa6..b1d20c945 100644 --- a/shaders/sh_shape/sh_shape.fsh +++ b/shaders/sh_shape/sh_shape.fsh @@ -109,9 +109,16 @@ float sdVesica(vec2 p, float r, float d) { #region : length(p-vec2(-d,0.0))-r; } #endregion -float sdCrescent(vec2 p, float s, float c) { #region +float sdCrescent(vec2 p, float s, float c, float a) { #region float o = length(p) - 1.; - float i = length(p - vec2(1. - s * c, 0.)) / s - 1.; + float i = length(p - vec2(cos(a) * (1. - s * c), sin(a) * (1. - s * c))) / s - 1.; + + return max(o, -i); +} #endregion + +float sdDonut(vec2 p, float s) { #region + float o = length(p) - 1.; + float i = length(p) / s - 1.; return max(o, -i); } #endregion @@ -135,19 +142,13 @@ void main() { } else if(shape == 3) { d = sdStar( coord, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle ); d -= corner; - } else if(shape == 4) { - d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner ); - } else if(shape == 5) { - d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. ); - } else if(shape == 6) { - d = sdCross( coord, vec2(1. + corner, outer), corner ); - } else if(shape == 7) { - d = sdVesica( coord, inner, outer ); - } else if(shape == 8) { - d = sdCrescent( coord, inner, outer ); - } + } else if(shape == 4) d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner ); + else if(shape == 5) d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. ); + else if(shape == 6) d = sdCross( coord, vec2(1. + corner, outer), corner ); + else if(shape == 7) d = sdVesica( coord, inner, outer ); + else if(shape == 8) d = sdCrescent( coord, inner, outer, angle ); + else if(shape == 9) d = sdDonut( coord, inner ); - //d = d; if(drawDF == 1) color = -d; else if(aa == 0) diff --git a/sprites/s_node_diffuse/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d.png b/sprites/s_node_diffuse/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2d4c69ac5146369ac682ae67767c02e24c825e GIT binary patch literal 2173 zcmZ`)c{J2rAOFpm!4R*RP}v%jqz4&8wuq^*OkVpCL)p?;!r1rawM@yroT)T49?6)p zM+lM1J7kSy><^l!Vra2@^!)ngJ?H)7IrrTAIp==w=iK}Ke3zSHYi%wjA|nC-fEdw& zU=O0nuPH1Du57=MSrE|P7WP&E5UUIT$!P$v3vMO<2>=mT0Ql?y00wsf;0Tq`W@iW* z1idWH3Bb=^gV|A82mnGH@i0q5?2T(W zEPlQx5xPg&hn-(9Lzm@&=H@Gx{UBb&0N2RgahcoM z$!q16hVj3)R*H*@dvul0&IQV8w8Pe0wkCS3AW$!$6ljSbJ5hpd2KGgmI17_QUFU$e zcDek#VOSlEiF+3i9h#D6Zu9;WfKBDc8uR^w)B6DhKNy2#Xb|DCAPCG4`AY>n9Nf8BUQ^qkhhXXwLHO>mj?AR)I_<=RljQ*p9Yt85}S2<)b_7&|JcVvb=v&d=RvW( zV-gY~L&a%BJX)^ua&t<8C`!SwJ@CtwoFd@F!BNdvf#m9!<}82niH{$>Drw0f%t_yc z*WY!Ozu15tKhHnbA9~jxn#{L%cJIftND-@&rkE09*7Q#cNt~J(-ALd%U9hM0>yJZt zm_$aYfR<&dj~{F99BcfuMCUE#hzTZJeksh9p$u&sHb9A;NRosp6&P;o@mMK=q7%Kn z`bq`upIX0+{J~~{7pnB!g=tKTU6w-P0HX_K)`!H z)qhJs)F?+FU38e^s!5P)0`v{UT_@So&*tR|jrcJ{WWdQUD*I@9W9BWr74+04_!l`91uV8+~z|YqlgGL!qaE3e6 z&0oUatVi2!Z#2pEJ&%p^gb&aTi9G$<<{?rjv}U8kGrIYA)^QLp>-%de-z)VtGCt%N<}o^XfWp;;q<=U%MU2o+TT^Er#)zjqm3N7GmePL@Ug){B$jC@0R|f@;sh~cc3@$Eb z%Maz3I`X?XhqniX!V|V#i;NL9Tl6TnyWKtc{f|=FN_CB!WGv~z!!LI>6l+2Xq2Uwd zuFOSv1#+h5Fc{kPuXi~eAC`e8s(y*f(cjV?xjQSTs|V|}TQX;c_;2c)ro8tJ-qvZO zI5Ai5yIxZv5yt!@+&E`;xt(-lL{6g(oCtbq?<+8zwQegEd@v*4QSSVjEmE+Hqa3@L&$pcxuRsq`>a@v!O(rCKRWq$3kSeQ=<&SiU$gj~LhPo0eFhRuA}C4o5(b{S zBFB}mBNsT?m*HSD3Q@w-rLaCMr|oK^ z^#ywDMi0|^xtx(Gy%>tnGeFJHZ2fY0ZegjUb{uZ2!vsFl_|(Gg8SZ1?9qI!DfWzXn)v=oDn))P7 zEdwn*1Ke3vEY<*vrL1W&|BnzDe9iBA%s&&P8#3iUg3AAH2=@#02@CfOr2aDpU&-zP OIRMernox7WBjs;vt=yUb literal 0 HcmV?d00001 diff --git a/sprites/s_node_diffuse/layers/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d/97939aed-8fe8-4d7a-b6cb-3a8e69c6a402.png b/sprites/s_node_diffuse/layers/d1e85f96-d61b-4899-8e77-6ea2e64c5d6d/97939aed-8fe8-4d7a-b6cb-3a8e69c6a402.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2d4c69ac5146369ac682ae67767c02e24c825e GIT binary patch literal 2173 zcmZ`)c{J2rAOFpm!4R*RP}v%jqz4&8wuq^*OkVpCL)p?;!r1rawM@yroT)T49?6)p zM+lM1J7kSy><^l!Vra2@^!)ngJ?H)7IrrTAIp==w=iK}Ke3zSHYi%wjA|nC-fEdw& zU=O0nuPH1Du57=MSrE|P7WP&E5UUIT$!P$v3vMO<2>=mT0Ql?y00wsf;0Tq`W@iW* z1idWH3Bb=^gV|A82mnGH@i0q5?2T(W zEPlQx5xPg&hn-(9Lzm@&=H@Gx{UBb&0N2RgahcoM z$!q16hVj3)R*H*@dvul0&IQV8w8Pe0wkCS3AW$!$6ljSbJ5hpd2KGgmI17_QUFU$e zcDek#VOSlEiF+3i9h#D6Zu9;WfKBDc8uR^w)B6DhKNy2#Xb|DCAPCG4`AY>n9Nf8BUQ^qkhhXXwLHO>mj?AR)I_<=RljQ*p9Yt85}S2<)b_7&|JcVvb=v&d=RvW( zV-gY~L&a%BJX)^ua&t<8C`!SwJ@CtwoFd@F!BNdvf#m9!<}82niH{$>Drw0f%t_yc z*WY!Ozu15tKhHnbA9~jxn#{L%cJIftND-@&rkE09*7Q#cNt~J(-ALd%U9hM0>yJZt zm_$aYfR<&dj~{F99BcfuMCUE#hzTZJeksh9p$u&sHb9A;NRosp6&P;o@mMK=q7%Kn z`bq`upIX0+{J~~{7pnB!g=tKTU6w-P0HX_K)`!H z)qhJs)F?+FU38e^s!5P)0`v{UT_@So&*tR|jrcJ{WWdQUD*I@9W9BWr74+04_!l`91uV8+~z|YqlgGL!qaE3e6 z&0oUatVi2!Z#2pEJ&%p^gb&aTi9G$<<{?rjv}U8kGrIYA)^QLp>-%de-z)VtGCt%N<}o^XfWp;;q<=U%MU2o+TT^Er#)zjqm3N7GmePL@Ug){B$jC@0R|f@;sh~cc3@$Eb z%Maz3I`X?XhqniX!V|V#i;NL9Tl6TnyWKtc{f|=FN_CB!WGv~z!!LI>6l+2Xq2Uwd zuFOSv1#+h5Fc{kPuXi~eAC`e8s(y*f(cjV?xjQSTs|V|}TQX;c_;2c)ro8tJ-qvZO zI5Ai5yIxZv5yt!@+&E`;xt(-lL{6g(oCtbq?<+8zwQegEd@v*4QSSVjEmE+Hqa3@L&$pcxuRsq`>a@v!O(rCKRWq$3kSeQ=<&SiU$gj~LhPo0eFhRuA}C4o5(b{S zBFB}mBNsT?m*HSD3Q@w-rLaCMr|oK^ z^#ywDMi0|^xtx(Gy%>tnGeFJHZ2fY0ZegjUb{uZ2!vsFl_|(Gg8SZ1?9qI!DfWzXn)v=oDn))P7 zEdwn*1Ke3vEY<*vrL1W&|BnzDe9iBA%s&&P8#3iUg3AAH2=@#02@CfOr2aDpU&-zP OIRMernox7WBjs;vt=yUb literal 0 HcmV?d00001 diff --git a/sprites/s_node_diffuse/s_node_diffuse.yy b/sprites/s_node_diffuse/s_node_diffuse.yy new file mode 100644 index 000000000..47a0ed090 --- /dev/null +++ b/sprites/s_node_diffuse/s_node_diffuse.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_diffuse", + "bbox_bottom": 63, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 0, + "bboxMode": 0, + "collisionKind": 1, + "collisionTolerance": 0, + "DynamicTexturePage": false, + "edgeFiltering": false, + "For3D": false, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d1e85f96-d61b-4899-8e77-6ea2e64c5d6d",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"97939aed-8fe8-4d7a-b6cb-3a8e69c6a402","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "filter", + "path": "folders/nodes/icons/filter.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_diffuse", + "autoRecord": true, + "backdropHeight": 768, + "backdropImageOpacity": 0.5, + "backdropImagePath": "", + "backdropWidth": 1366, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "events": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "eventStubScript": null, + "eventToFunction": {}, + "length": 1.0, + "lockOrigin": false, + "moments": {"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[],}, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "showBackdrop": true, + "showBackdropImage": false, + "timeUnits": 1, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore","resourceVersion":"1.0","Keyframes":[ + {"resourceType":"Keyframe","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"d1e85f96-d61b-4899-8e77-6ea2e64c5d6d","path":"sprites/s_node_diffuse/s_node_diffuse.yy",},},},"Disabled":false,"id":"fa33f3e1-5206-4403-8ae9-a15881009356","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,}, + ],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange": null, + "volume": 1.0, + "xorigin": 32, + "yorigin": 32, + }, + "swatchColours": null, + "swfPrecision": 2.525, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "type": 0, + "VTile": false, + "width": 64, +} \ No newline at end of file