summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-08-02 16:40:30 -0700
committeryum <yum.food.vr@gmail.com>2024-08-02 16:40:30 -0700
commitfa44a3879806176d48d0c16a960a2c4fe6198dd6 (patch)
treebc055e94014e4478bbf6d2c5430d32e50c849a9b
parenta627c1f915b86956b528af304fa85fee42dc11a0 (diff)
Add second clearcoat mask, and add invert ability
Also optimize by locking each behind a keyword.
-rw-r--r--Editor/tooner.cs27
-rw-r--r--feature_macros.cginc2
-rw-r--r--globals.cginc7
-rw-r--r--pbr.cginc17
-rw-r--r--tooner.shader3
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)
diff --git a/pbr.cginc b/pbr.cginc
index b7ed27d..6cc317d 100644
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -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" {}