浏览代码

Improvements to artistic nodes.

- Added the fuzziness slot to ReplaceColorNode and ColorMaskNode. It works like
  the fuzziness parameter in Photoshop that gives softer edges to the mask.
- Changed the output format of ColorMaskNode from Vector3 to Vector1. It only
  outputs single channel masks.
- Added the opacity slot to BlendNode. It's useful when one tries using
  BlendNode like layers in Photoshop.
/main
Keijiro Takahashi 7 年前
当前提交
820e58c3
共有 3 个文件被更改,包括 84 次插入47 次删除
  1. 10
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Adjustment/ReplaceColorNode.cs
  2. 112
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Blend/BlendNode.cs
  3. 9
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Mask/ColorMaskNode.cs

10
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Adjustment/ReplaceColorNode.cs


[Slot(1, Binding.None)] ColorRGB From,
[Slot(2, Binding.None)] ColorRGB To,
[Slot(3, Binding.None)] Vector1 Range,
[Slot(4, Binding.None)] out Vector3 Out)
[Slot(4, Binding.None)] Vector1 Fuzziness,
[Slot(5, Binding.None)] out Vector3 Out)
Out = Vector2.zero;
Out = Vector3.zero;
{precision}3 col = In;
if(Distance <= Range)
col = To;
Out = col;
Out = lerp(To, In, saturate((Distance - Range) / max(Fuzziness, 1e-5f)));
}";
}
}

112
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Blend/BlendNode.cs


static string Unity_Blend_Burn(
[Slot(0, Binding.None)] DynamicDimensionVector Base,
[Slot(1, Binding.None)] DynamicDimensionVector Blend,
[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
{precision}{slot2dimension} result1 = 1.0 - 2.0 * (1.0 - Base) * (1.0 - Blend);
{precision}{slot2dimension} result2 = 2.0 * Base * Blend;
{precision}{slot2dimension} zeroOrOne = step(Blend, 0.5);
{precision}{slot3dimension} result1 = 1.0 - 2.0 * (1.0 - Base) * (1.0 - Blend);
{precision}{slot3dimension} result2 = 2.0 * Base * Blend;
{precision}{slot3dimension} zeroOrOne = step(Blend, 0.5);
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}";
}

[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
{precision}{slot2dimension} result1 = 1.0 - 2.0 * (1.0 - Base) * (1.0 - Blend);
{precision}{slot2dimension} result2 = 2.0 * Base * Blend;
{precision}{slot2dimension} zeroOrOne = step(Base, 0.5);
{precision}{slot3dimension} result1 = 1.0 - 2.0 * (1.0 - Base) * (1.0 - Blend);
{precision}{slot3dimension} result2 = 2.0 * Base * Blend;
{precision}{slot3dimension} zeroOrOne = step(Base, 0.5);
Out = lerp(Base, Out, Opacity);
}
";
}

[Slot(1, Binding.None)] DynamicDimensionVector Blend,
[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
{precision}{slot2dimension} check = step (0.5, Blend);
{precision}{slot2dimension} result1 = check * max(2.0 * (Base - 0.5), Blend);
{precision}{slot3dimension} check = step (0.5, Blend);
{precision}{slot3dimension} result1 = check * max(2.0 * (Base - 0.5), Blend);
Out = lerp(Base, Out, Opacity);
}
";
}

[Slot(1, Binding.None)] DynamicDimensionVector Blend,
[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
{precision}{slot2dimension} result1 = 2.0 * Base * Blend + Base * Base * (1.0 - 2.0 * Blend);
{precision}{slot2dimension} result2 = sqrt(Base) * (2.0 * Blend - 1.0) + 2.0 * Base * (1.0 - Blend);
{precision}{slot2dimension} zeroOrOne = step(0.5, Blend);
{precision}{slot3dimension} result1 = 2.0 * Base * Blend + Base * Base * (1.0 - 2.0 * Blend);
{precision}{slot3dimension} result2 = sqrt(Base) * (2.0 * Blend - 1.0) + 2.0 * Base * (1.0 - Blend);
{precision}{slot3dimension} zeroOrOne = step(0.5, Blend);
Out = lerp(Base, Out, Opacity);
}
";
}

[Slot(1, Binding.None)] DynamicDimensionVector Blend,
[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
{precision}{slot2dimension} result1 = 1.0 - (1.0 - Blend) / (2.0 * Base);
{precision}{slot2dimension} result2 = Blend / (2.0 * (1.0 - Base));
{precision}{slot2dimension} zeroOrOne = step(0.5, Base);
{precision}{slot3dimension} result1 = 1.0 - (1.0 - Blend) / (2.0 * Base);
{precision}{slot3dimension} result2 = Blend / (2.0 * (1.0 - Base));
{precision}{slot3dimension} zeroOrOne = step(0.5, Base);
Out = lerp(Base, Out, Opacity);
}
";
}

[Slot(1, Binding.None)] DynamicDimensionVector Blend,
[Slot(2, Binding.None)] out DynamicDimensionVector Out)
[Slot(2, Binding.None)] Vector1 Opacity,
[Slot(3, Binding.None)] out DynamicDimensionVector Out)
Out = lerp(Base, Out, Opacity);
}
";
}

9
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Data/Nodes/Artistic/Mask/ColorMaskNode.cs


[Slot(0, Binding.None)] Vector3 In,
[Slot(1, Binding.None)] ColorRGB MaskColor,
[Slot(2, Binding.None)] Vector1 Range,
[Slot(3, Binding.None)] out Vector3 Out)
[Slot(3, Binding.None)] Vector1 Fuzziness,
[Slot(4, Binding.None)] out Vector1 Out)
Out = Vector3.zero;
{precision}3 col = {precision}3(0, 0, 0);
if(Distance <= Range)
col = {precision}3(1, 1, 1);
Out = col;
Out = saturate(1 - (Distance - Range) / max(Fuzziness, 1e-5));
}";
}
}
正在加载...
取消
保存