summaryrefslogtreecommitdiffstats
path: root/decal.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-03-02 17:39:03 -0800
committeryum <yum.food.vr@gmail.com>2026-03-02 17:39:03 -0800
commitfd5b8029a8303e6b0db0c9c7e309aa0075302935 (patch)
treeb8aebae783f8facc8e89afe442595ea51582a425 /decal.cginc
parent92c9035bb513886f99fde8c08694d9d6baa6f305 (diff)
More decal features
Diffstat (limited to 'decal.cginc')
-rw-r--r--decal.cginc20
1 files changed, 20 insertions, 0 deletions
diff --git a/decal.cginc b/decal.cginc
index 69fb9e5..7673bee 100644
--- a/decal.cginc
+++ b/decal.cginc
@@ -39,6 +39,23 @@ void applyDecals(v2f i, inout Pbr pbr) {
float4 albedo = decal_sample(_Decal0_MainTex, uv, _Decal0_UV_Mode);
albedo *= _Decal0_Color;
albedo.a *= _Decal0_Opacity;
+
+#if defined(_DECAL0_MASK)
+ float2 mask_uv = get_uv_by_channel(i, _Decal0_Mask_UV_Channel);
+ mask_uv -= _Decal0_Mask_ST.zw;
+ mask_uv *= _Decal0_Mask_ST.xy;
+ // For now, mask gets the same sampling mode as the decal.
+ float mask = decal_sample(_Decal0_Mask, mask_uv, _Decal0_UV_Mode);
+#if defined(_DECAL0_MASK_INVERT)
+ mask = 1 - mask;
+#endif // _DECAL0_MASK_INVERT
+ albedo.a *= mask;
+#endif // _DECAL0_MASK
+
+#if defined(_DECAL0_ALBEDO_CLAMP)
+ albedo.rgb = saturate(albedo.rgb);
+#endif // _DECAL0_ALBEDO_CLAMP
+
[forcecase]
switch (_Decal0_Mix_Mode) {
case DECAL_MIX_MODE_ALPHA_BLEND:
@@ -47,6 +64,9 @@ void applyDecals(v2f i, inout Pbr pbr) {
case DECAL_MIX_MODE_MULTIPLY:
pbr.albedo.rgb *= lerp(1, albedo.rgb, albedo.a);
break;
+ case DECAL_MIX_MODE_ADD_PRODUCT:
+ pbr.albedo.rgb += lerp(0, albedo.rgb * pbr.albedo.rgb, albedo.a);
+ break;
}
}
#endif