From e26b141841ae5c8ab3b55357fc20d4855eafdbff Mon Sep 17 00:00:00 2001 From: Tanasart Date: Thu, 5 Sep 2024 10:50:10 +0700 Subject: [PATCH] [Level] Fix alpha multiplication. --- scripts/node_colorize/node_colorize.gml | 14 +++++++++---- scripts/node_grid/node_grid.gml | 2 +- scripts/node_level/node_level.gml | 18 ++++++++--------- scripts/node_registry/node_registry.gml | 26 ++++++++++++------------- shaders/sh_colorize/sh_colorize.fsh | 21 ++++++++++---------- 5 files changed, 44 insertions(+), 37 deletions(-) diff --git a/scripts/node_colorize/node_colorize.gml b/scripts/node_colorize/node_colorize.gml index e4a495751..6c343e807 100644 --- a/scripts/node_colorize/node_colorize.gml +++ b/scripts/node_colorize/node_colorize.gml @@ -6,7 +6,7 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) newInput(1, nodeValue_Gradient("Gradient", self, new gradientObject([ cola(c_black), cola(c_white) ]))) .setMappable(11); - newInput(2, nodeValue_Float("Gradient shift", self, 0)) + newInput(2, nodeValue_Float("Gradient Shift", self, 0)) .setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, .01 ] }) .setMappable(10); @@ -18,7 +18,7 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) newInput(5, nodeValue_Bool("Active", self, true)); active_index = 5; - newInput(6, nodeValue_Bool("Multiply alpha", self, true)); + newInput(6, nodeValue_Bool("Multiply Alpha", self, true)); newInput(7, nodeValue_Toggle("Channel", self, 0b1111, { data: array_create(4, THEME.inspector_channel) })); @@ -34,9 +34,11 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) ////////////////////////////////////////////////////////////////////////////////////////////////// + newInput(13, nodeValue_Bool("Keep Alpha", self, true)); + input_display_list = [ 5, 7, ["Surfaces", true], 0, 3, 4, 8, 9, - ["Colorize", false], 1, 11, 2, 10, 6, + ["Colorize", false], 1, 11, 2, 10, 6, 13, ]; newOutput(0, nodeValue_Output("Surface out", self, VALUE_TYPE.surface, noone)); @@ -58,11 +60,15 @@ function Node_Colorize(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) } static processData = function(_outSurf, _data, _output_index, _array_index) { + var _mlAlp = _data[ 6]; + var _kpAlp = _data[13]; + surface_set_shader(_outSurf, sh_colorize); shader_set_gradient(_data[1], _data[11], _data[12], inputs[1]); shader_set_f_map("gradient_shift", _data[2], _data[10], inputs[2]); - shader_set_i("multiply_alpha", _data[6]); + shader_set_i("multiply_alpha", _mlAlp); + shader_set_i("keep_alpha", _kpAlp); draw_surface_safe(_data[0]); surface_reset_shader(); diff --git a/scripts/node_grid/node_grid.gml b/scripts/node_grid/node_grid.gml index 89a6665b0..c9360fe64 100644 --- a/scripts/node_grid/node_grid.gml +++ b/scripts/node_grid/node_grid.gml @@ -159,7 +159,7 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons shader_set_f("secScale", _data[29]); shader_set_f("secShift", _data[30]); - shader_set_color("gapCol", _col_gap); + shader_set_color("gapCol", _col_gap); shader_set_gradient(_data[5], _data[20], _data[21], inputs[5]); diff --git a/scripts/node_level/node_level.gml b/scripts/node_level/node_level.gml index 4f00470cb..d9d8501c5 100644 --- a/scripts/node_level/node_level.gml +++ b/scripts/node_level/node_level.gml @@ -39,7 +39,7 @@ function Node_Level(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con attribute_surface_depth(); - level_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region + level_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { var _h = 128; var x0 = _x; var x1 = _x + _w; @@ -70,7 +70,7 @@ function Node_Level(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con draw_rectangle(x0, y0, x1, y1, true); return _h; - }); #endregion + }); input_display_list = [ 8, 9, level_renderer, @@ -88,19 +88,19 @@ function Node_Level(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con histogramUpdate(current_data[0]); } - static onValueFromUpdate = function(index) { #region + static onValueFromUpdate = function(index) { if(index == 0) { doUpdate(); if(array_length(current_data) > 0) histogramUpdate(current_data[0]); } - } #endregion + } - static step = function() { #region + static step = function() { __step_mask_modifier(); - } #endregion + } - static processData = function(_outSurf, _data, _output_index, _array_index) { #region + static processData = function(_outSurf, _data, _output_index, _array_index) { var _wi = _data[1]; var _ri = _data[2]; var _gi = _data[3]; @@ -113,7 +113,7 @@ function Node_Level(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con var _bo = _data[15]; var _ao = _data[16]; - surface_set_shader(_outSurf, sh_level); + surface_set_shader(_outSurf, sh_level, true, BLEND.over); shader_set_2("lwi", _wi); shader_set_2("lri", _ri); shader_set_2("lgi", _gi); @@ -134,5 +134,5 @@ function Node_Level(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con _outSurf = channel_apply(_data[0], _outSurf, _data[9]); return _outSurf; - } #endregion + } } diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index d601a9449..fc9e2f12f 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -764,19 +764,19 @@ function __initNodes() { addNodeObject(generator, "Honeycomb Noise", s_node_honey, "Node_Honeycomb_Noise", [1, Node_Honeycomb_Noise],, "Generate honeycomb noise").patreonExtra(); ds_list_add(generator, "Patterns"); - addNodeObject(generator, "Stripe", s_node_stripe, "Node_Stripe", [1, Node_Stripe],, "Generate stripe pattern."); - addNodeObject(generator, "Zigzag", s_node_zigzag, "Node_Zigzag", [1, Node_Zigzag],, "Generate zigzag pattern."); - addNodeObject(generator, "Checker", s_node_checker, "Node_Checker", [1, Node_Checker],, "Generate checkerboard pattern."); - addNodeObject(generator, "Grid", s_node_grid, "Node_Grid", [1, Node_Grid], ["tile"], "Generate grid pattern."); - addNodeObject(generator, "Triangular Grid", s_node_grid_tri, "Node_Grid_Tri", [1, Node_Grid_Tri],, "Generate triangular grid pattern."); - addNodeObject(generator, "Hexagonal Grid", s_node_grid_hex, "Node_Grid_Hex", [1, Node_Grid_Hex],, "Generate hexagonal grid pattern."); - addNodeObject(generator, "Pentagonal Grid", s_node_grid_pentagonal, "Node_Grid_Pentagonal", [1, Node_Grid_Pentagonal],, "Generate Pentagonal grid pattern.").patreonExtra(); - addNodeObject(generator, "Pytagorean Tile", s_node_pytagorean_tile, "Node_Pytagorean_Tile", [1, Node_Pytagorean_Tile],, "Generate Pytagorean tile pattern.").patreonExtra(); - addNodeObject(generator, "Herringbone Tile", s_node_herringbone_tile, "Node_Herringbone_Tile", [1, Node_Herringbone_Tile],, "Generate Herringbone tile pattern.").patreonExtra(); - addNodeObject(generator, "Random Tile", s_node_random_tile, "Node_Random_Tile", [1, Node_Random_Tile],, "Generate Random tile pattern.").patreonExtra(); - addNodeObject(generator, "Box Pattern", s_node_box_pattern, "Node_Box_Pattern", [1, Node_Box_Pattern],, "Generate square-based patterns..").setVersion(11750); - addNodeObject(generator, "Quasicrystal", s_node_quasicircle, "Node_Quasicrystal", [1, Node_Quasicrystal],, "Generate Quasicrystal pattern.").setVersion(11660); - addNodeObject(generator, "Pixel Sampler", s_node_pixel_sampler, "Node_Pixel_Sampler", [1, Node_Pixel_Sampler],, "Map image on to each individual pixels of another image.").setVersion(11730); + addNodeObject(generator, "Stripe", s_node_stripe, "Node_Stripe", [1, Node_Stripe],, "Generate stripe pattern."); + addNodeObject(generator, "Zigzag", s_node_zigzag, "Node_Zigzag", [1, Node_Zigzag],, "Generate zigzag pattern."); + addNodeObject(generator, "Checker", s_node_checker, "Node_Checker", [1, Node_Checker],, "Generate checkerboard pattern."); + addNodeObject(generator, "Grid", s_node_grid, "Node_Grid", [1, Node_Grid], ["tile", "mosaic"], "Generate grid pattern."); + addNodeObject(generator, "Triangular Grid", s_node_grid_tri, "Node_Grid_Tri", [1, Node_Grid_Tri],, "Generate triangular grid pattern."); + addNodeObject(generator, "Hexagonal Grid", s_node_grid_hex, "Node_Grid_Hex", [1, Node_Grid_Hex],, "Generate hexagonal grid pattern."); + addNodeObject(generator, "Pentagonal Grid", s_node_grid_pentagonal, "Node_Grid_Pentagonal", [1, Node_Grid_Pentagonal],, "Generate Pentagonal grid pattern.").patreonExtra(); + addNodeObject(generator, "Pytagorean Tile", s_node_pytagorean_tile, "Node_Pytagorean_Tile", [1, Node_Pytagorean_Tile],, "Generate Pytagorean tile pattern.").patreonExtra(); + addNodeObject(generator, "Herringbone Tile", s_node_herringbone_tile, "Node_Herringbone_Tile", [1, Node_Herringbone_Tile], "Generate Herringbone tile pattern.").patreonExtra(); + addNodeObject(generator, "Random Tile", s_node_random_tile, "Node_Random_Tile", [1, Node_Random_Tile],, "Generate Random tile pattern.").patreonExtra(); + addNodeObject(generator, "Box Pattern", s_node_box_pattern, "Node_Box_Pattern", [1, Node_Box_Pattern],, "Generate square-based patterns..").setVersion(11750); + addNodeObject(generator, "Quasicrystal", s_node_quasicircle, "Node_Quasicrystal", [1, Node_Quasicrystal],, "Generate Quasicrystal pattern.").setVersion(11660); + addNodeObject(generator, "Pixel Sampler", s_node_pixel_sampler, "Node_Pixel_Sampler", [1, Node_Pixel_Sampler],, "Map image on to each individual pixels of another image.").setVersion(11730); ds_list_add(generator, "Populate"); addNodeObject(generator, "Repeat", s_node_repeat, "Node_Repeat", [0, Node_create_Repeat], global.node_repeat_keys, "Repeat image multiple times linearly, or in grid pattern.").setVersion(1100); diff --git a/shaders/sh_colorize/sh_colorize.fsh b/shaders/sh_colorize/sh_colorize.fsh index f6516362e..2b0e9d3ed 100644 --- a/shaders/sh_colorize/sh_colorize.fsh +++ b/shaders/sh_colorize/sh_colorize.fsh @@ -2,6 +2,7 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; uniform int multiply_alpha; +uniform int keep_alpha; uniform vec2 gradient_shift; uniform int gradient_shiftUseSurf; @@ -142,25 +143,25 @@ uniform sampler2D gradient_shiftSurf; #endregion //////////////////////////////////// GRADIENT //////////////////////////////////// -void main() { #region +void main() { float shf = gradient_shift.x; if(gradient_shiftUseSurf == 1) { vec4 _vMap = texture2D( gradient_shiftSurf, v_vTexcoord ); shf = mix(gradient_shift.x, gradient_shift.y, (_vMap.r + _vMap.g + _vMap.b) / 3.); } - vec4 _col = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord ); + vec4 _col = texture2D( gm_BaseTexture, v_vTexcoord ); float prog = abs(dot(_col.rgb, vec3(0.2126, 0.7152, 0.0722)) + shf); + if(multiply_alpha == 1) prog *= _col.a; - if(prog > 1.) { - if(prog == floor(prog)) - prog = 1.; - else - prog = fract(prog); - } - + if(prog > 1.) + prog = prog == floor(prog)? 1. : fract(prog); + vec4 col = gradientEval(prog); + if(keep_alpha == 1) + col.a = _col.a; + gl_FragColor = col; -} #endregion \ No newline at end of file +} \ No newline at end of file