diff --git a/hrt/shgraph/ShaderGraph.hx b/hrt/shgraph/ShaderGraph.hx index 7caabf81c..7c05beaa7 100644 --- a/hrt/shgraph/ShaderGraph.hx +++ b/hrt/shgraph/ShaderGraph.hx @@ -1228,7 +1228,8 @@ class Graph { // continue; // } - if (Std.downcast(currentNode.instance, hrt.shgraph.nodes.Sampler) != null) { + if (Std.downcast(currentNode.instance, hrt.shgraph.nodes.Sampler) != null || + Std.downcast(currentNode.instance, hrt.shgraph.nodes.Dissolve) != null) { if (!allInputsVarsBound) { expr = makeAssign(makeVar(nodeVar.v), makeVec([0.0,0.0,0.0,0.0])); } diff --git a/hrt/shgraph/nodes/Dissolve.hx b/hrt/shgraph/nodes/Dissolve.hx index 8e78160b3..752ce11a2 100644 --- a/hrt/shgraph/nodes/Dissolve.hx +++ b/hrt/shgraph/nodes/Dissolve.hx @@ -4,21 +4,25 @@ using hxsl.Ast; @name("Dissolve") @description("Dissolve input") -@width(150) +@width(180) @group("Math") class Dissolve extends ShaderNodeHxsl { static var SRC = { - @sginput(1.0) var channel : Float; - @sginput(1.0) var progress : Float; - @sginput(0.0) var saturation : Float; + @sginput var rgba : Vec4; + @sginput(calculatedUV) var uv : Vec2; + @sginput var dissolveMap : Sampler2D; + @sginput(0.5) var progress : Float; + @sginput(0.5) var saturation : Float; @sginput(1.0) var width : Float; - @sgoutput var output : Float; + @sgoutput var output : Vec4; function fragment() { + var pix = dissolveMap.get(uv); var edge = mix(1.0 + width, -width, progress); - var ramp = saturate((1.0 + saturation) * (width - abs(edge - channel)) / width); - output = channel * ramp; + var ramp = saturate((1.0 + saturation) * (width - abs(edge - pix.r)) / width); + output.rgb = rgba.rgb; + output.a = rgba.a * ramp * pix.a; } }; } \ No newline at end of file