summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-06-21 18:18:50 -0700
committeryum <yum.food.vr@gmail.com>2024-06-21 18:18:50 -0700
commit01255d3804afbcaf6c3b9fb620c51291c64f9335 (patch)
tree9fb3c9bcca6d52d0830366b3388b5330fa4cbcee
parenteadd7efade2162ac66d35c2a9c3e73bb5826f974 (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.cs12
-rw-r--r--globals.cginc1
-rw-r--r--tooner.shader4
-rw-r--r--tooner_outline_pass.cginc2
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);