diff options
| author | yum <yum.food.vr@gmail.com> | 2024-06-21 18:18:50 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-06-21 18:18:50 -0700 |
| commit | 01255d3804afbcaf6c3b9fb620c51291c64f9335 (patch) | |
| tree | 9fb3c9bcca6d52d0830366b3388b5330fa4cbcee | |
| parent | eadd7efade2162ac66d35c2a9c3e73bb5826f974 (diff) | |
Add parameters for outline width multiplier & stenciling
Outline width makes it easier to animate outline width across an avatar
with many materials of different widths.
Stenciling being toggleable is just nice for customization.
| -rw-r--r-- | Editor/tooner.cs | 12 | ||||
| -rw-r--r-- | globals.cginc | 1 | ||||
| -rw-r--r-- | tooner.shader | 4 | ||||
| -rw-r--r-- | tooner_outline_pass.cginc | 2 |
4 files changed, 17 insertions, 2 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index 71e7271..da9397a 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -496,6 +496,18 @@ public class ToonerGUI : ShaderGUI { inverted = EditorGUILayout.Toggle("Invert mask", inverted); EditorGUI.EndChangeCheck(); bc.floatValue = inverted ? 1.0f : 0.0f; + + bc = FindProperty("_Outline_Width_Multiplier"); + 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; } } diff --git a/globals.cginc b/globals.cginc index 6c3d51f..c3139e1 100644 --- a/globals.cginc +++ b/globals.cginc @@ -132,6 +132,7 @@ float4 _Outline_Color; float _Outline_Emission_Strength; texture2D _Outline_Mask; float _Outline_Mask_Invert; +float _Outline_Width_Multiplier; #endif #if defined(_GLITTER) diff --git a/tooner.shader b/tooner.shader index d03d53e..d8a8283 100644 --- a/tooner.shader +++ b/tooner.shader @@ -96,6 +96,8 @@ Shader "yum_food/tooner" _Outline_Emission_Strength("Outline emission strength", Range(0, 2)) = 0.2 _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" {} @@ -400,7 +402,7 @@ Shader "yum_food/tooner" ZTest LEqual Stencil { - Ref 1 + Ref [_Outline_Stenciling] Comp Greater } diff --git a/tooner_outline_pass.cginc b/tooner_outline_pass.cginc index 1767d2c..f7bc6af 100644 --- a/tooner_outline_pass.cginc +++ b/tooner_outline_pass.cginc @@ -35,7 +35,7 @@ v2f vert(appdata v) float outline_mask = _Outline_Mask.SampleLevel(linear_repeat_s, v.uv0.xy, /*lod=*/1); outline_mask = _Outline_Mask_Invert > 1E-6 ? 1 - outline_mask : outline_mask; - worldPos += worldNormal * _Outline_Width * outline_mask; + worldPos += worldNormal * _Outline_Width * outline_mask * _Outline_Width_Multiplier; objPos = mul(unity_WorldToObject, worldPos); clipPos = UnityObjectToClipPos(objPos); |
