diff options
| author | yum <yum.food.vr@gmail.com> | 2024-08-02 16:40:30 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-08-02 16:40:30 -0700 |
| commit | fa44a3879806176d48d0c16a960a2c4fe6198dd6 (patch) | |
| tree | bc055e94014e4478bbf6d2c5430d32e50c849a9b | |
| parent | a627c1f915b86956b528af304fa85fee42dc11a0 (diff) | |
Add second clearcoat mask, and add invert ability
Also optimize by locking each behind a keyword.
| -rw-r--r-- | Editor/tooner.cs | 27 | ||||
| -rw-r--r-- | feature_macros.cginc | 2 | ||||
| -rw-r--r-- | globals.cginc | 7 | ||||
| -rw-r--r-- | pbr.cginc | 17 | ||||
| -rw-r--r-- | tooner.shader | 3 |
5 files changed, 55 insertions, 1 deletions
diff --git a/Editor/tooner.cs b/Editor/tooner.cs index f7bdc50..9efdd21 100644 --- a/Editor/tooner.cs +++ b/Editor/tooner.cs @@ -115,6 +115,33 @@ public class ToonerGUI : ShaderGUI { editor.RangeProperty(bc, "Roughness"); bc = FindProperty("_Clearcoat_Mask"); editor.TexturePropertySingleLine(MakeLabel(bc, "Mask"), bc); + SetKeyword($"_CLEARCOAT_MASK", bc.textureValue); + + if (bc.textureValue) { + EditorGUI.indentLevel += 1; + bc = FindProperty("_Clearcoat_Mask_Invert"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = EditorGUILayout.Toggle("Invert mask", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + EditorGUI.indentLevel -= 1; + } + + bc = FindProperty("_Clearcoat_Mask2"); + editor.TexturePropertySingleLine(MakeLabel(bc, "Mask 2"), bc); + SetKeyword($"_CLEARCOAT_MASK2", bc.textureValue); + + if (bc.textureValue) { + EditorGUI.indentLevel += 1; + bc = FindProperty("_Clearcoat_Mask2_Invert"); + enabled = bc.floatValue > 1E-6; + EditorGUI.BeginChangeCheck(); + enabled = EditorGUILayout.Toggle("Invert mask", enabled); + EditorGUI.EndChangeCheck(); + bc.floatValue = enabled ? 1.0f : 0.0f; + EditorGUI.indentLevel -= 1; + } } } diff --git a/feature_macros.cginc b/feature_macros.cginc index ef53155..f252524 100644 --- a/feature_macros.cginc +++ b/feature_macros.cginc @@ -96,6 +96,8 @@ #pragma shader_feature_local _ _TROCHOID #pragma shader_feature_local _ _FACE_ME_WORLD_Y #pragma shader_feature_local _ _CLEARCOAT +#pragma shader_feature_local _ _CLEARCOAT_MASK +#pragma shader_feature_local _ _CLEARCOAT_MASK2 #endif // __FEATURE_MACROS_INC diff --git a/globals.cginc b/globals.cginc index 1f2d4a6..5cb77e9 100644 --- a/globals.cginc +++ b/globals.cginc @@ -48,7 +48,14 @@ float3 _ReflShadowStrength; float _Clearcoat_Enabled; float _Clearcoat_Strength; float _Clearcoat_Roughness; +#if defined(_CLEARCOAT_MASK) texture2D _Clearcoat_Mask; +float _Clearcoat_Mask_Invert; +#endif +#if defined(_CLEARCOAT_MASK2) +texture2D _Clearcoat_Mask2; +float _Clearcoat_Mask2_Invert; +#endif #endif #if defined(SSR_ENABLED) @@ -291,7 +291,22 @@ float4 getLitColor( #if defined(_CLEARCOAT) // Direct lighting - float cc_mask = _Clearcoat_Mask.SampleGrad(linear_repeat_s, i.uv, ddx(i.uv.x), ddy(i.uv.y)); + // TODO add keywords to optimize away mask samples when not used + float cc_mask = 1; +#if defined(_CLEARCOAT_MASK) + float cc_mask_tmp = _Clearcoat_Mask.SampleGrad(linear_repeat_s, i.uv, ddx(i.uv.x), ddy(i.uv.y)); + if (_Clearcoat_Mask_Invert) { + cc_mask_tmp = 1 - cc_mask_tmp; + } + cc_mask *= cc_mask_tmp; +#endif +#if defined(_CLEARCOAT_MASK2) + float cc_mask2_tmp = _Clearcoat_Mask2.SampleGrad(linear_repeat_s, i.uv, ddx(i.uv.x), ddy(i.uv.y)); + if (_Clearcoat_Mask_Invert) { + cc_mask2_tmp = 1 - cc_mask2_tmp; + } + cc_mask *= cc_mask2_tmp; +#endif { float3 cc_L = direct_light.dir; half3 cc_H = Unity_SafeNormalize(cc_L + view_dir); diff --git a/tooner.shader b/tooner.shader index c7901fe..5ae08ed 100644 --- a/tooner.shader +++ b/tooner.shader @@ -10,6 +10,9 @@ Shader "yum_food/tooner" _Clearcoat_Strength("Clearcoat strength", Range(0, 1)) = 0 _Clearcoat_Roughness("Clearcoat strength", Range(0, 1)) = 0 _Clearcoat_Mask("Clearcoat mask", 2D) = "white" {} + _Clearcoat_Mask_Invert("Clearcoat mask invert", Float) = 0 + _Clearcoat_Mask2("Clearcoat mask 2", 2D) = "white" {} + _Clearcoat_Mask2_Invert("Clearcoat mask 2 invert", Float) = 0 [NoScaleOffset] _MainTex("Base color", 2D) = "white" {} [NoScaleOffset] _NormalTex("Normal", 2D) = "bump" {} |
