summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Editor/tooner.cs61
-rw-r--r--tooner.shader24
2 files changed, 72 insertions, 13 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs
index 81dfa2f..8d4221a 100644
--- a/Editor/tooner.cs
+++ b/Editor/tooner.cs
@@ -888,13 +888,6 @@ public class ToonerGUI : ShaderGUI {
editor.FloatProperty(
bc,
"Outline width multiplier");
-
- bc = FindProperty("_Outline_Stenciling");
- bool enabled = (bc.floatValue == 1.0);
- EditorGUI.BeginChangeCheck();
- enabled = EditorGUILayout.Toggle("Enable stenciling", enabled);
- EditorGUI.EndChangeCheck();
- bc.floatValue = enabled ? 1.0f : 2.0f;
}
}
@@ -1534,6 +1527,60 @@ public class ToonerGUI : ShaderGUI {
bc.floatValue = enabled ? 1.0f : 0.0f;
EditorGUI.indentLevel -= 1;
}
+
+ EditorGUILayout.LabelField("Stenciling", EditorStyles.boldLabel);
+ for (int i = 0; i < 2; i++) {
+ EditorGUI.indentLevel += 1;
+
+ string pass_str = "";
+ switch (i) {
+ case 0:
+ pass_str = "Base";
+ break;
+ case 1:
+ pass_str = "Outline";
+ break;
+ }
+
+ EditorGUILayout.LabelField($"{pass_str} pass");
+ {
+ EditorGUI.indentLevel += 1;
+ bc = FindProperty($"_Stencil_Ref_{pass_str}");
+ editor.FloatProperty(bc, "Ref");
+
+ bc = FindProperty($"_Stencil_Comp_{pass_str}");
+ EditorGUI.BeginChangeCheck();
+ UnityEngine.Rendering.CompareFunction stencil_comp =
+ (UnityEngine.Rendering.CompareFunction) bc.floatValue;
+ stencil_comp = (UnityEngine.Rendering.CompareFunction)
+ EditorGUILayout.EnumPopup(MakeLabel("Comp"), stencil_comp);
+ EditorGUI.EndChangeCheck();
+ RecordAction("Rendering mode");
+ bc.floatValue = (float) stencil_comp;
+
+ bc = FindProperty($"_Stencil_Pass_Op_{pass_str}");
+ EditorGUI.BeginChangeCheck();
+ UnityEngine.Rendering.StencilOp stencil_op =
+ (UnityEngine.Rendering.StencilOp) bc.floatValue;
+ stencil_op = (UnityEngine.Rendering.StencilOp)
+ EditorGUILayout.EnumPopup(MakeLabel("Pass op"), stencil_op);
+ EditorGUI.EndChangeCheck();
+ RecordAction("Rendering mode");
+ bc.floatValue = (float) stencil_op;
+
+ bc = FindProperty($"_Stencil_Fail_Op_{pass_str}");
+ EditorGUI.BeginChangeCheck();
+ stencil_op = (UnityEngine.Rendering.StencilOp) bc.floatValue;
+ stencil_op = (UnityEngine.Rendering.StencilOp)
+ EditorGUILayout.EnumPopup(MakeLabel("Fail op"), stencil_op);
+ EditorGUI.EndChangeCheck();
+ RecordAction("Rendering mode");
+ bc.floatValue = (float) stencil_op;
+
+ EditorGUI.indentLevel -= 1;
+ }
+ EditorGUI.indentLevel -= 1;
+ }
}
void DoLighting() {
diff --git a/tooner.shader b/tooner.shader
index a677047..dbc4ed7 100644
--- a/tooner.shader
+++ b/tooner.shader
@@ -188,7 +188,6 @@ Shader "yum_food/tooner"
_Outline_Mask("Outline mask", 2D) = "white" {}
_Outline_Mask_Invert("Invert outline mask", Float) = 0.0
_Outline_Width_Multiplier("Outline width multiplier", Float) = 1
- [MaterialToggle] _Outline_Stenciling("Enable outline stenciling", Float) = 1
_Glitter_Enabled("Glitter enabled", Float) = 0
_Glitter_Mask("Glitter mask", 2D) = "white" {}
@@ -205,6 +204,16 @@ Shader "yum_food/tooner"
[Enum(UnityEngine.Rendering.CullMode)] _OutlinesCull ("Outlines pass culling mode", Float) = 1
[Enum(UnityEngine.Rendering.CullMode)] _Cull ("Culling mode", Float) = 2
+ _Stencil_Ref_Base("Stencil ref", Float) = 1
+ [Enum(UnityEngine.Rendering.CompareFunction)] _Stencil_Comp_Base("Stencil compare", Float) = 0 // Disabled
+ [Enum(UnityEngine.Rendering.StencilOp)] _Stencil_Pass_Op_Base("Stencil op", Float) = 0 // Keep
+ [Enum(UnityEngine.Rendering.StencilOp)] _Stencil_Fail_Op_Base("Stencil op", Float) = 0 // Keep
+
+ _Stencil_Ref_Outline("Stencil ref", Float) = 1
+ [Enum(UnityEngine.Rendering.CompareFunction)] _Stencil_Comp_Outline("Stencil compare", Float) = 0 // Disabled
+ [Enum(UnityEngine.Rendering.StencilOp)] _Stencil_Pass_Op_Outline("Stencil op", Float) = 0 // Keep
+ [Enum(UnityEngine.Rendering.StencilOp)] _Stencil_Fail_Op_Outline("Stencil op", Float) = 0 // Keep
+
[MaterialToggle] _Scroll_Toggle("Scroll toggle", Float) = 0
_Scroll_Top("Scroll top (m)", Range(-5, 5)) = 1
_Scroll_Bottom("Scroll bottom (m)", Range(-5, 5)) = 0
@@ -479,9 +488,10 @@ Shader "yum_food/tooner"
Cull [_Cull]
Stencil {
- Ref 1
- Comp Always
- Pass Replace
+ Ref [_Stencil_Ref_Base]
+ Comp [_Stencil_Comp_Base]
+ Pass [_Stencil_Pass_Op_Base]
+ Fail [_Stencil_Fail_Op_Base]
}
CGPROGRAM
@@ -541,8 +551,10 @@ Shader "yum_food/tooner"
ZTest LEqual
Stencil {
- Ref [_Outline_Stenciling]
- Comp Greater
+ Ref [_Stencil_Ref_Outline]
+ Comp [_Stencil_Comp_Outline]
+ Pass [_Stencil_Pass_Op_Outline]
+ Fail [_Stencil_Fail_Op_Outline]
}
CGPROGRAM