diff options
| author | yum <yum.food.vr@gmail.com> | 2026-03-02 17:39:03 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-03-02 17:39:03 -0800 |
| commit | fd5b8029a8303e6b0db0c9c7e309aa0075302935 (patch) | |
| tree | b8aebae783f8facc8e89afe442595ea51582a425 /decal.cginc | |
| parent | 92c9035bb513886f99fde8c08694d9d6baa6f305 (diff) | |
More decal features
Diffstat (limited to 'decal.cginc')
| -rw-r--r-- | decal.cginc | 20 |
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 |
