From 8c7fa1712f55f4db1417d1cfe71caced0b85f5db Mon Sep 17 00:00:00 2001 From: Tanasart Date: Sun, 17 Mar 2024 20:24:24 +0700 Subject: [PATCH] flow noise, hsv --- PixelComposer.resource_order | 3 + PixelComposer.yyp | 3 + 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_combine_hsv/node_combine_hsv.gml | 58 +++++++++----- scripts/node_combine_rgb/node_combine_rgb.gml | 29 +++++-- scripts/node_flow_noise/node_flow_noise.gml | 25 ++++++ scripts/node_flow_noise/node_flow_noise.yy | 11 +++ scripts/node_flow_noise/node_gradient.yy | 12 +++ .../node_local_analyze/node_local_analyze.gml | 11 +-- scripts/node_mk_blinker/node_mk_blinker.gml | 5 +- scripts/node_registry/node_registry.gml | 1 + scripts/node_shadow_cast/node_shadow_cast.gml | 4 +- scripts/node_shape_map/node_shape_map.gml | 2 +- scripts/node_smear/node_smear.gml | 2 +- .../node_surface_replace.gml | 4 +- shaders/sh_combine_hsv/sh_combine_hsv.fsh | 28 ++++--- shaders/sh_combine_rgb/sh_combine_rgb.fsh | 3 - shaders/sh_d3d_default/sh_d3d_default.fsh | 2 +- shaders/sh_d3d_default/sh_d3d_default.vsh | 3 +- shaders/sh_noise_flow/sh_noise_flow.fsh | 21 +++++ shaders/sh_noise_flow/sh_noise_flow.vsh | 19 +++++ shaders/sh_noise_flow/sh_noise_flow.yy | 10 +++ shaders/sh_water_caustic/sh_water_caustic.fsh | 1 + .../ca846195-d720-444c-94e8-0bb21a581395.png | Bin 0 -> 4552 bytes .../50a45570-fcb4-4eb4-84f6-423e422a8483.png | Bin 0 -> 4552 bytes .../s_node_flow_noise/s_node_flow_noise.yy | 74 ++++++++++++++++++ 29 files changed, 274 insertions(+), 57 deletions(-) create mode 100644 scripts/node_flow_noise/node_flow_noise.gml create mode 100644 scripts/node_flow_noise/node_flow_noise.yy create mode 100644 scripts/node_flow_noise/node_gradient.yy create mode 100644 shaders/sh_noise_flow/sh_noise_flow.fsh create mode 100644 shaders/sh_noise_flow/sh_noise_flow.vsh create mode 100644 shaders/sh_noise_flow/sh_noise_flow.yy create mode 100644 sprites/s_node_flow_noise/ca846195-d720-444c-94e8-0bb21a581395.png create mode 100644 sprites/s_node_flow_noise/layers/ca846195-d720-444c-94e8-0bb21a581395/50a45570-fcb4-4eb4-84f6-423e422a8483.png create mode 100644 sprites/s_node_flow_noise/s_node_flow_noise.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index fa281ef1c..83ad6c59f 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -756,6 +756,7 @@ {"name":"sh_fd_advect_material_a_16_glsl","order":2,"path":"shaders/sh_fd_advect_material_a_16_glsl/sh_fd_advect_material_a_16_glsl.yy",}, {"name":"distribution_function","order":12,"path":"scripts/distribution_function/distribution_function.yy",}, {"name":"TabletStuff","order":16,"path":"extensions/TabletStuff/TabletStuff.yy",}, + {"name":"sh_noise_flow","order":17,"path":"shaders/sh_noise_flow/sh_noise_flow.yy",}, {"name":"sh_blur_radial","order":9,"path":"shaders/sh_blur_radial/sh_blur_radial.yy",}, {"name":"node_iterator_each_input","order":1,"path":"scripts/node_iterator_each_input/node_iterator_each_input.yy",}, {"name":"json_minify","order":6,"path":"scripts/json_minify/json_minify.yy",}, @@ -1371,6 +1372,7 @@ {"name":"sh_erode","order":8,"path":"shaders/sh_erode/sh_erode.yy",}, {"name":"fd_rectangle_get_velocity_dissipation_value","order":21,"path":"scripts/fd_rectangle_get_velocity_dissipation_value/fd_rectangle_get_velocity_dissipation_value.yy",}, {"name":"node_pixel_cloud","order":20,"path":"scripts/node_pixel_cloud/node_pixel_cloud.yy",}, + {"name":"s_node_flow_noise","order":48,"path":"sprites/s_node_flow_noise/s_node_flow_noise.yy",}, {"name":"s_node_crop_content","order":13,"path":"sprites/s_node_crop_content/s_node_crop_content.yy",}, {"name":"draw_line_zigzag","order":14,"path":"scripts/draw_line_zigzag/draw_line_zigzag.yy",}, {"name":"sh_alpha_grey","order":1,"path":"shaders/sh_alpha_grey/sh_alpha_grey.yy",}, @@ -1915,6 +1917,7 @@ {"name":"s_node_fluidSim_force","order":13,"path":"sprites/s_node_fluidSim_force/s_node_fluidSim_force.yy",}, {"name":"node_repeat","order":8,"path":"scripts/node_repeat/node_repeat.yy",}, {"name":"draw_arc","order":16,"path":"scripts/draw_arc/draw_arc.yy",}, + {"name":"node_flow_noise","order":18,"path":"scripts/node_flow_noise/node_flow_noise.yy",}, {"name":"sh_fd_advect_velocity_1_glsl","order":7,"path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",}, {"name":"mac_window_step","order":1,"path":"scripts/mac_window_step/mac_window_step.yy",}, {"name":"node_midi_in","order":20,"path":"scripts/node_midi_in/node_midi_in.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 1f30d9e58..b1c0caedd 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1007,6 +1007,7 @@ {"id":{"name":"sh_fd_advect_material_a_16_glsl","path":"shaders/sh_fd_advect_material_a_16_glsl/sh_fd_advect_material_a_16_glsl.yy",},}, {"id":{"name":"distribution_function","path":"scripts/distribution_function/distribution_function.yy",},}, {"id":{"name":"TabletStuff","path":"extensions/TabletStuff/TabletStuff.yy",},}, + {"id":{"name":"sh_noise_flow","path":"shaders/sh_noise_flow/sh_noise_flow.yy",},}, {"id":{"name":"sh_blur_radial","path":"shaders/sh_blur_radial/sh_blur_radial.yy",},}, {"id":{"name":"node_blur","path":"scripts/node_blur/node_blur.yy",},}, {"id":{"name":"node_iterator_each_input","path":"scripts/node_iterator_each_input/node_iterator_each_input.yy",},}, @@ -1705,6 +1706,7 @@ {"id":{"name":"mac_window_init","path":"scripts/mac_window_init/mac_window_init.yy",},}, {"id":{"name":"fd_rectangle_get_velocity_dissipation_value","path":"scripts/fd_rectangle_get_velocity_dissipation_value/fd_rectangle_get_velocity_dissipation_value.yy",},}, {"id":{"name":"node_pixel_cloud","path":"scripts/node_pixel_cloud/node_pixel_cloud.yy",},}, + {"id":{"name":"s_node_flow_noise","path":"sprites/s_node_flow_noise/s_node_flow_noise.yy",},}, {"id":{"name":"s_node_crop_content","path":"sprites/s_node_crop_content/s_node_crop_content.yy",},}, {"id":{"name":"draw_line_zigzag","path":"scripts/draw_line_zigzag/draw_line_zigzag.yy",},}, {"id":{"name":"sh_alpha_grey","path":"shaders/sh_alpha_grey/sh_alpha_grey.yy",},}, @@ -2336,6 +2338,7 @@ {"id":{"name":"s_node_fluidSim_force","path":"sprites/s_node_fluidSim_force/s_node_fluidSim_force.yy",},}, {"id":{"name":"node_repeat","path":"scripts/node_repeat/node_repeat.yy",},}, {"id":{"name":"draw_arc","path":"scripts/draw_arc/draw_arc.yy",},}, + {"id":{"name":"node_flow_noise","path":"scripts/node_flow_noise/node_flow_noise.yy",},}, {"id":{"name":"sh_fd_advect_velocity_1_glsl","path":"shaders/sh_fd_advect_velocity_1_glsl/sh_fd_advect_velocity_1_glsl.yy",},}, {"id":{"name":"mac_window_step","path":"scripts/mac_window_step/mac_window_step.yy",},}, {"id":{"name":"node_midi_in","path":"scripts/node_midi_in/node_midi_in.yy",},}, diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index 574e5e96d8107fef4604f4d4807ab5c7515af23b..845f21a74c14953f626966e927ddf275b27b9fb4 100644 GIT binary patch delta 96 zcmdnl%(}CgwP6dRiKB>lh=HM%vALD8iMD}(m4QKM%<+Wj9*&H%7&0o1^>?OMIx;FK VpzA3XiDPB}0#8>zmvv4FO#t6r7+C-S delta 96 zcmdnl%(}CgwP6dRiKB>Vh=HM%p@o&9iMD}(m4SifK6az&9*&H%7&0D@_xDY&bYxUe WK-VMxZC)S)5O})!xvXlh=H+{p}Cc@v9^JMm4U&E(_d4jdpI)6V#wT_=6hp$r6Z$) W0=k~Q<{WkgAnFh=Gxnk+GGbxwe6Um4U(Eu!z*@9*&H%7&1NF4{lDcbYxUe WK-Y6y?jRcj5O})!xvX5%UlOLn~u*D`OLF0|P4qgV31c36m$jlnp_bP+_dU!@$6xQQ{g= ul9E`GYE_b%n_66wm|MVLWME{XYhbKvh_0ttB#s%Vhr!d;&t;ucLK6Ut=OLZ| delta 119 zcmZp=!rXL)c|+|>5z`O@Ln}iID?<})0|P4q1IvBvMw2JLlnp_b@OZqxkAZjH?_DVF}Hxh$iT=%*T7iU5M7V_w|Rj;Jq(_%elF{r5}E*>IwJc3 diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.png b/fonts/_f_sdf_medium/_f_sdf_medium.png index ba46f82333446e120e906bef67e3b7f35945bb0d..28a10103f4c29119536a7883bbf737eebbf340fd 100644 GIT binary patch delta 119 zcmZp=!rXL)c|+|>5%UlOV=F^*D`R7A0|P4qgB7R0rc9prQZ@u#;^s8p8w?B#8YQj~ vB`Jv|sa7SKxv9k^iMa&~Mg~SEx(3F&hUj|wnseBJdKf%i{an^LB{Ts5HeDn? delta 119 zcmZp=!rXL)c|+|>5wj2jBP%0gD?@W_0|P4qgTG-BsgozZlnp_b=;3~FlYxOjqr^3$ uBqgyV)v6>jH?_DVF}Hxh$iT=%*T7iU5M9r0xr1y#Jq(_%elF{r5}E+v;UjVY diff --git a/scripts/node_combine_hsv/node_combine_hsv.gml b/scripts/node_combine_hsv/node_combine_hsv.gml index 8eda95a9a..cce810c3c 100644 --- a/scripts/node_combine_hsv/node_combine_hsv.gml +++ b/scripts/node_combine_hsv/node_combine_hsv.gml @@ -1,38 +1,56 @@ function Node_Combine_HSV(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "HSV Combine"; - shader = sh_combine_hsv; - uniform_h = shader_get_sampler_index(shader, "samH"); - uniform_s = shader_get_sampler_index(shader, "samS"); - uniform_v = shader_get_sampler_index(shader, "samV"); - inputs[| 0] = nodeValue("Hue", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); inputs[| 1] = nodeValue("Saturation", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); inputs[| 2] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + inputs[| 3] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + + inputs[| 4] = nodeValue("Array Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + + inputs[| 5] = nodeValue("HSV Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, []) + .setArrayDepth(1); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); + input_display_list = [ + ["Surfaces", true], 4, 0, 1, 2, 3, 5, + ] + attribute_surface_depth(); + static step = function() { #region + var _arr = getInputData(4); + + inputs[| 0].setVisible(!_arr, !_arr); + inputs[| 1].setVisible(!_arr, !_arr); + inputs[| 2].setVisible(!_arr, !_arr); + inputs[| 3].setVisible(!_arr, !_arr); + + inputs[| 5].setVisible(_arr, _arr); + } #endregion + static processData = function(_outSurf, _data, _output_index, _array_index) { #region - var _h = _data[0]; - var _s = _data[1]; - var _v = _data[2]; + var _arr = _data[4]; - surface_set_target(_outSurf); - DRAW_CLEAR - BLEND_OVERRIDE; + var _h = _arr? array_safe_get(_data[5], 0) : _data[0]; + var _s = _arr? array_safe_get(_data[5], 1) : _data[1]; + var _v = _arr? array_safe_get(_data[5], 2) : _data[2]; + var _a = _arr? array_safe_get(_data[5], 3) : _data[3]; - shader_set(shader); - texture_set_stage(uniform_h, surface_get_texture(_h)); - texture_set_stage(uniform_s, surface_get_texture(_s)); - texture_set_stage(uniform_v, surface_get_texture(_v)); + surface_set_shader(_outSurf, sh_combine_hsv); + shader_set_surface("samH", _h); + shader_set_surface("samS", _s); + shader_set_surface("samV", _v); + shader_set_surface("samA", _a); - draw_sprite_ext(s_fx_pixel, 0, 0, 0, surface_get_width_safe(_outSurf), surface_get_width_safe(_outSurf), 0, c_white, 1); - shader_reset(); - - BLEND_NORMAL; - surface_reset_target(); + shader_set_i("useH", is_surface(_h)); + shader_set_i("useS", is_surface(_s)); + shader_set_i("useV", is_surface(_v)); + shader_set_i("useA", is_surface(_a)); + + draw_sprite_stretched(s_fx_pixel, 0, 0, 0, surface_get_width_safe(_outSurf), surface_get_width_safe(_outSurf)); + surface_reset_shader(); return _outSurf; } #endregion diff --git a/scripts/node_combine_rgb/node_combine_rgb.gml b/scripts/node_combine_rgb/node_combine_rgb.gml index c45f929d1..f976228b9 100644 --- a/scripts/node_combine_rgb/node_combine_rgb.gml +++ b/scripts/node_combine_rgb/node_combine_rgb.gml @@ -20,24 +20,40 @@ function Node_Combine_RGB(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou ////////////////////////////////////////////////////////////////////////////////////////////////// + inputs[| 7] = nodeValue("Array Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + + inputs[| 8] = nodeValue("RGBA Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, []) + .setArrayDepth(1); + outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); input_display_list = [ ["Sampling", false], 4, 5, 6, - ["Surfaces", true], 0, 1, 2, 3, + ["Surfaces", true], 7, 0, 1, 2, 3, 8, ] attribute_surface_depth(); static step = function() { #region inputs[| 5].mappableStep(); + + var _arr = getInputData(7); + + inputs[| 0].setVisible(!_arr, !_arr); + inputs[| 1].setVisible(!_arr, !_arr); + inputs[| 2].setVisible(!_arr, !_arr); + inputs[| 3].setVisible(!_arr, !_arr); + + inputs[| 8].setVisible(_arr, _arr); } #endregion static processData = function(_outSurf, _data, _output_index, _array_index) { #region - var _r = _data[0]; - var _g = _data[1]; - var _b = _data[2]; - var _a = _data[3]; + var _arr = _data[7]; + + var _r = _arr? array_safe_get(_data[8], 0) : _data[0]; + var _g = _arr? array_safe_get(_data[8], 1) : _data[1]; + var _b = _arr? array_safe_get(_data[8], 2) : _data[2]; + var _a = _arr? array_safe_get(_data[8], 3) : _data[3]; var _baseS = _r; if(!is_surface(_baseS)) _baseS = _g; @@ -47,11 +63,12 @@ function Node_Combine_RGB(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou _outSurf = surface_verify(_outSurf, surface_get_width_safe(_baseS), surface_get_height_safe(_baseS)); surface_set_shader(_outSurf, sh_combine_rgb); + shader_set_surface("samplerR", _r); shader_set_surface("samplerG", _g); shader_set_surface("samplerB", _b); shader_set_surface("samplerA", _a); - + shader_set_i("useR", is_surface(_r)); shader_set_i("useG", is_surface(_g)); shader_set_i("useB", is_surface(_b)); diff --git a/scripts/node_flow_noise/node_flow_noise.gml b/scripts/node_flow_noise/node_flow_noise.gml new file mode 100644 index 000000000..6b320ea2e --- /dev/null +++ b/scripts/node_flow_noise/node_flow_noise.gml @@ -0,0 +1,25 @@ +function Node_Flow_Noise(_x, _y, _group = noone) : Node_Shader_Generator(_x, _y, _group) constructor { + name = "Flow Noise"; + shader = sh_noise_flow; + + inputs[| 1] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + .setDisplay(VALUE_DISPLAY.vector) + .setUnitRef(function(index) { return getDimension(index); }); + addShaderProp(SHADER_UNIFORM.float, "position"); + + inputs[| 2] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 2, 2 ]) + .setDisplay(VALUE_DISPLAY.vector); + addShaderProp(SHADER_UNIFORM.float, "scale"); + + inputs[| 3] = nodeValue("Progress", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + addShaderProp(SHADER_UNIFORM.float, "progress"); + + inputs[| 4] = nodeValue("Detail", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 1, 8 ]) + .setDisplay(VALUE_DISPLAY.slider_range, { range: [ 1, 16, 1 ] }); + addShaderProp(SHADER_UNIFORM.float, "detail"); + + input_display_list = [ + ["Output", true], 0, + ["Noise", false], 1, 2, 3, 4, + ]; +} \ No newline at end of file diff --git a/scripts/node_flow_noise/node_flow_noise.yy b/scripts/node_flow_noise/node_flow_noise.yy new file mode 100644 index 000000000..67845569c --- /dev/null +++ b/scripts/node_flow_noise/node_flow_noise.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_flow_noise", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "noise", + "path": "folders/nodes/data/generator/noise.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_flow_noise/node_gradient.yy b/scripts/node_flow_noise/node_gradient.yy new file mode 100644 index 000000000..fa813bb58 --- /dev/null +++ b/scripts/node_flow_noise/node_gradient.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_gradient", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_local_analyze/node_local_analyze.gml b/scripts/node_local_analyze/node_local_analyze.gml index 28cb48910..a031f5045 100644 --- a/scripts/node_local_analyze/node_local_analyze.gml +++ b/scripts/node_local_analyze/node_local_analyze.gml @@ -13,8 +13,8 @@ function Node_Local_Analyze(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Empty", "Clamp", "Repeat" ]); inputs[| 4] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) - .setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Square", s_node_shape, 0), - new scrollItem("Circle", s_node_shape, 1), + .setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Square", s_node_shape_type, 0), + new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Diamond", s_node_shape_misc, 0) ]); inputs[| 5] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); @@ -51,13 +51,14 @@ function Node_Local_Analyze(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr var _sam = struct_try_get(attributes, "oversample"); surface_set_shader(_outSurf, sh_local_analyze); - shader_set_f("dimension" , surface_get_width_safe(_data[0]), surface_get_height_safe(_data[0])); + shader_set_f("dimension" , surface_get_dimension(_data[0])); shader_set_i("algorithm" , _alg); shader_set_f("size" , _siz); shader_set_i("shape" , _shp); shader_set_i("sampleMode", _sam); - draw_surface_safe(_data[0], 0, 0); - surface_reset_target(); + + draw_surface_safe(_data[0]); + surface_reset_shader(); __process_mask_modifier(_data); _outSurf = mask_apply(_data[0], _outSurf, _data[5], _data[6]); diff --git a/scripts/node_mk_blinker/node_mk_blinker.gml b/scripts/node_mk_blinker/node_mk_blinker.gml index 5f12c0903..7ae3407bb 100644 --- a/scripts/node_mk_blinker/node_mk_blinker.gml +++ b/scripts/node_mk_blinker/node_mk_blinker.gml @@ -5,7 +5,7 @@ function Node_MK_Blinker(_x, _y, _group = noone) : Node_Processor(_x, _y, _group inputs[| 1] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); - inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random()) + inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random()); inputs[| 3] = nodeValue("Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) .setDisplay(VALUE_DISPLAY.slider); @@ -41,8 +41,7 @@ function Node_MK_Blinker(_x, _y, _group = noone) : Node_Processor(_x, _y, _group ] temp_surface = [ surface_create( 1, 1 ), surface_create( 1, 1 ), surface_create( 1, 1 ) ]; - - light_only = []; + light_only = []; surface_blur_init(); diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 47d76f8b9..a6aa1bde8 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -695,6 +695,7 @@ function __initNodes() { addNodeObject(generator, "Fold Noise", s_node_fold_noise, "Node_Fold_Noise", [1, Node_Fold_Noise]).setVersion(11650); addNodeObject(generator, "Strand Noise", s_node_strand_noise, "Node_Noise_Strand", [1, Node_Noise_Strand]).setVersion(11650); addNodeObject(generator, "Bubble Noise", s_node_bubble_noise, "Node_Noise_Bubble", [1, Node_Noise_Bubble]).patreonExtra(); + addNodeObject(generator, "Flow Noise", s_node_flow_noise, "Node_Flow_Noise", [1, Node_Flow_Noise]).patreonExtra(); ds_list_add(generator, "Patterns"); addNodeObject(generator, "Stripe", s_node_stripe, "Node_Stripe", [1, Node_Stripe],, "Generate stripe pattern."); diff --git a/scripts/node_shadow_cast/node_shadow_cast.gml b/scripts/node_shadow_cast/node_shadow_cast.gml index 9da91d67c..f7404559f 100644 --- a/scripts/node_shadow_cast/node_shadow_cast.gml +++ b/scripts/node_shadow_cast/node_shadow_cast.gml @@ -70,8 +70,9 @@ function Node_Shadow_Cast(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou input_display_list = [ 17, ["Surfaces", true], 0, 1, - ["Light", false], 5, 12, 8, 2, 3, 4, ["BG Shadow Caster", true, 10], 11, + ["Light", false], 5, 12, 8, 2, + ["Soft Light", false], 4, 3, ["Render", false], 13, 14, 7, 6, 9, ["Ambient Occlusion", false], 15, 16, ]; @@ -113,7 +114,6 @@ function Node_Shadow_Cast(_x, _y, _group = noone) : Node_Processor(_x, _y, _grou var _bg_thr = _data[11]; inputs[| 8].setVisible(_type == 0); - inputs[| 11].setVisible(_bg_use); if(!is_surface(_bg)) return _outSurf; diff --git a/scripts/node_shape_map/node_shape_map.gml b/scripts/node_shape_map/node_shape_map.gml index 47ca671df..a01894ddf 100644 --- a/scripts/node_shape_map/node_shape_map.gml +++ b/scripts/node_shape_map/node_shape_map.gml @@ -27,7 +27,7 @@ function Node_Shape_Map(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) input_display_list = [ 1, ["Surfaces", true], 0, - ["Shape", false], 2, 4, 5, 6, 7, + ["Shape", false], 2, 5, 6, 7, ["Mapping", false], 3, ]; diff --git a/scripts/node_smear/node_smear.gml b/scripts/node_smear/node_smear.gml index 4aab09d5a..8811cd329 100644 --- a/scripts/node_smear/node_smear.gml +++ b/scripts/node_smear/node_smear.gml @@ -35,7 +35,7 @@ function Node_Smear(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con inputs[| 11] = nodeValue("Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.enum_button, [ "Greyscale", "Alpha" ]); - inputs[| 12] = nodeValue("Modulate strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) + inputs[| 12] = nodeValue("Modulate strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); inputs[| 13] = nodeValue("Spread", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.slider, { range : [ 0, 30, 1 ] }); diff --git a/scripts/node_surface_replace/node_surface_replace.gml b/scripts/node_surface_replace/node_surface_replace.gml index cf7db58c4..ba4da62da 100644 --- a/scripts/node_surface_replace/node_surface_replace.gml +++ b/scripts/node_surface_replace/node_surface_replace.gml @@ -13,9 +13,9 @@ function Node_Surface_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _ inputs[| 3] = nodeValue("Color Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1, "How similiar the color need to be in order to be count as matched." ) .setDisplay(VALUE_DISPLAY.slider); - inputs[| 4] = nodeValue("Draw Base Image", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ) + inputs[| 4] = nodeValue("Draw Base Image", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ); - inputs[| 5] = nodeValue("Fast Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ) + inputs[| 5] = nodeValue("Fast Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ); inputs[| 6] = nodeValue("Pixel Threshold", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.1, "How many pixel need to me matched to replace with replacement image." ) .setDisplay(VALUE_DISPLAY.slider); diff --git a/shaders/sh_combine_hsv/sh_combine_hsv.fsh b/shaders/sh_combine_hsv/sh_combine_hsv.fsh index 1290dcb86..4e052f256 100644 --- a/shaders/sh_combine_hsv/sh_combine_hsv.fsh +++ b/shaders/sh_combine_hsv/sh_combine_hsv.fsh @@ -1,10 +1,15 @@ -// -// Simple passthrough fragment shader -// varying vec2 v_vTexcoord; varying vec4 v_vColour; -uniform sampler2D samH, samS, samV; +uniform sampler2D samH; +uniform sampler2D samS; +uniform sampler2D samV; +uniform sampler2D samA; + +uniform int useR; +uniform int useG; +uniform int useB; +uniform int useA; vec3 hsv2rgb(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); @@ -12,14 +17,13 @@ vec3 hsv2rgb(vec3 c) { return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); } +float sample(vec4 col, int ch) { return (col[0] + col[1] + col[2]) / 3. * col[3]; } + void main() { - vec4 _h = texture2D( samH, v_vTexcoord ); - vec4 _s = texture2D( samS, v_vTexcoord ); - vec4 _v = texture2D( samV, v_vTexcoord ); + float h = (useH == 1)? sample(texture2D( samH, v_vTexcoord ), 0) : 0.; + float s = (useS == 1)? sample(texture2D( samS, v_vTexcoord ), 1) : 0.; + float v = (useV == 1)? sample(texture2D( samV, v_vTexcoord ), 2) : 0.; + float a = (useA == 1)? sample(texture2D( samA, v_vTexcoord ), 3) : 1.; - float h = (_h[0] + _h[1] + _h[2]) / 3.; - float s = (_s[0] + _s[1] + _s[2]) / 3.; - float v = (_v[0] + _v[1] + _v[2]) / 3.; - - gl_FragColor = vec4(hsv2rgb(vec3(h, s, v)), 1.); + gl_FragColor = vec4(hsv2rgb(vec3(h, s, v)), a); } diff --git a/shaders/sh_combine_rgb/sh_combine_rgb.fsh b/shaders/sh_combine_rgb/sh_combine_rgb.fsh index 60dcc9ea7..9d4df0ac8 100644 --- a/shaders/sh_combine_rgb/sh_combine_rgb.fsh +++ b/shaders/sh_combine_rgb/sh_combine_rgb.fsh @@ -1,6 +1,3 @@ -// -// Simple passthrough fragment shader -// varying vec2 v_vTexcoord; varying vec4 v_vColour; diff --git a/shaders/sh_d3d_default/sh_d3d_default.fsh b/shaders/sh_d3d_default/sh_d3d_default.fsh index 146ec2abe..83b31ea5c 100644 --- a/shaders/sh_d3d_default/sh_d3d_default.fsh +++ b/shaders/sh_d3d_default/sh_d3d_default.fsh @@ -320,5 +320,5 @@ void main() { gl_FragData[0] = final_color; gl_FragData[1] = vec4(0.5 + normal * 0.5, final_color.a); - gl_FragData[2] = vec4(vec3(v_cameraDistance), final_color.a); + gl_FragData[2] = vec4(vec3(1. - abs(v_cameraDistance)), final_color.a); } diff --git a/shaders/sh_d3d_default/sh_d3d_default.vsh b/shaders/sh_d3d_default/sh_d3d_default.vsh index 7a609c7b3..97d1971f6 100644 --- a/shaders/sh_d3d_default/sh_d3d_default.vsh +++ b/shaders/sh_d3d_default/sh_d3d_default.vsh @@ -26,6 +26,7 @@ void main() { vec3 worldNormal = normalize(gm_Matrices[MATRIX_WORLD] * vec4(in_Normal, 0.)).xyz; v_vNormal = worldNormal; - float ndcDepth = (gl_Position.z - planeNear - planeFar) / (planeFar - planeNear); + float depthRange = abs(planeFar - planeNear); + float ndcDepth = (gl_Position.z - planeNear) / depthRange; v_cameraDistance = ndcDepth * 0.5 + 0.5; } diff --git a/shaders/sh_noise_flow/sh_noise_flow.fsh b/shaders/sh_noise_flow/sh_noise_flow.fsh new file mode 100644 index 000000000..45ce89add --- /dev/null +++ b/shaders/sh_noise_flow/sh_noise_flow.fsh @@ -0,0 +1,21 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform float progress; +uniform vec2 detail; + +uniform vec2 u_resolution; +uniform vec2 position; +uniform vec2 scale; + +void main() { + vec2 uv = (v_vTexcoord + position) * scale; + + for(float i = detail.x; i <= detail.y; i++) { + uv.x += .5 / i * sin(i * 3. * uv.y + progress); + uv.y += .3 / i * cos(i * 3. * uv.x + progress); + } + + float a = .5 + .5 * sin(uv.x); + gl_FragColor = vec4(vec3(a), 1.); +} diff --git a/shaders/sh_noise_flow/sh_noise_flow.vsh b/shaders/sh_noise_flow/sh_noise_flow.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_noise_flow/sh_noise_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_noise_flow/sh_noise_flow.yy b/shaders/sh_noise_flow/sh_noise_flow.yy new file mode 100644 index 000000000..8222233e2 --- /dev/null +++ b/shaders/sh_noise_flow/sh_noise_flow.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_noise_flow", + "parent": { + "name": "noise", + "path": "folders/shader/generator/noise.yy", + }, + "type": 1, +} \ No newline at end of file diff --git a/shaders/sh_water_caustic/sh_water_caustic.fsh b/shaders/sh_water_caustic/sh_water_caustic.fsh index 7c904c4af..f94c17e8a 100644 --- a/shaders/sh_water_caustic/sh_water_caustic.fsh +++ b/shaders/sh_water_caustic/sh_water_caustic.fsh @@ -6,6 +6,7 @@ varying vec4 v_vColour; uniform float seed; uniform float progress; uniform float detail; + uniform vec2 u_resolution; uniform vec2 position; uniform vec2 scale; diff --git a/sprites/s_node_flow_noise/ca846195-d720-444c-94e8-0bb21a581395.png b/sprites/s_node_flow_noise/ca846195-d720-444c-94e8-0bb21a581395.png new file mode 100644 index 0000000000000000000000000000000000000000..3273212012003ee0f8e278e16b2b9cb3618fd534 GIT binary patch literal 4552 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 literal 0 HcmV?d00001 diff --git a/sprites/s_node_flow_noise/layers/ca846195-d720-444c-94e8-0bb21a581395/50a45570-fcb4-4eb4-84f6-423e422a8483.png b/sprites/s_node_flow_noise/layers/ca846195-d720-444c-94e8-0bb21a581395/50a45570-fcb4-4eb4-84f6-423e422a8483.png new file mode 100644 index 0000000000000000000000000000000000000000..3273212012003ee0f8e278e16b2b9cb3618fd534 GIT binary patch literal 4552 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 literal 0 HcmV?d00001 diff --git a/sprites/s_node_flow_noise/s_node_flow_noise.yy b/sprites/s_node_flow_noise/s_node_flow_noise.yy new file mode 100644 index 000000000..6df9d1caf --- /dev/null +++ b/sprites/s_node_flow_noise/s_node_flow_noise.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_flow_noise", + "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":"ca846195-d720-444c-94e8-0bb21a581395",}, + ], + "gridX": 0, + "gridY": 0, + "height": 64, + "HTile": false, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"50a45570-fcb4-4eb4-84f6-423e422a8483","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,}, + ], + "nineSlice": null, + "origin": 4, + "parent": { + "name": "generator", + "path": "folders/nodes/icons/generator.yy", + }, + "preMultiplyAlpha": false, + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_flow_noise", + "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":"ca846195-d720-444c-94e8-0bb21a581395","path":"sprites/s_node_flow_noise/s_node_flow_noise.yy",},},},"Disabled":false,"id":"f8b18a5d-af37-49f3-896f-647bc2151389","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