diff options
| -rw-r--r-- | Editor/tooner.cs | 61 | ||||
| -rw-r--r-- | tooner.shader | 24 |
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 |
