From 46a7aa991625e90428325e9f0be790a50e1b902d Mon Sep 17 00:00:00 2001 From: yum Date: Sun, 30 Nov 2025 16:16:24 -0800 Subject: add static toggle to switch decal alpha blend order --- 2ner.shader | 8 ++++++++ decals.cginc | 36 ++++++++++++++++++++++++++++++++++++ features.cginc | 8 ++++++++ 3 files changed, 52 insertions(+) diff --git a/2ner.shader b/2ner.shader index df185d4..6b89c22 100644 --- a/2ner.shader +++ b/2ner.shader @@ -371,6 +371,7 @@ Shader "yum_food/2ner" _Decal0_Angle("Angle", Range(0, 1)) = 0.0 _Decal0_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal0_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL0_INVERT_BLEND_ORDER)] _Decal0_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL0_TILING_MODE)] _Decal0_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL0_REPLACE_ALPHA)] _Decal0_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL0_MULTIPLY)] _Decal0_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -449,6 +450,7 @@ Shader "yum_food/2ner" _Decal1_Angle("Angle", Range(0, 1)) = 0.0 _Decal1_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal1_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL1_INVERT_BLEND_ORDER)] _Decal1_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL1_TILING_MODE)] _Decal1_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL1_REPLACE_ALPHA)] _Decal1_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL1_MULTIPLY)] _Decal1_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -527,6 +529,7 @@ Shader "yum_food/2ner" _Decal2_Angle("Angle", Range(0, 1)) = 0.0 _Decal2_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal2_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL2_INVERT_BLEND_ORDER)] _Decal2_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL2_TILING_MODE)] _Decal2_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL2_REPLACE_ALPHA)] _Decal2_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL2_MULTIPLY)] _Decal2_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -605,6 +608,7 @@ Shader "yum_food/2ner" _Decal3_Angle("Angle", Range(0, 1)) = 0.0 _Decal3_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal3_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL3_INVERT_BLEND_ORDER)] _Decal3_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL3_TILING_MODE)] _Decal3_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL3_REPLACE_ALPHA)] _Decal3_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL3_MULTIPLY)] _Decal3_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -683,6 +687,7 @@ Shader "yum_food/2ner" _Decal4_Angle("Angle", Range(0, 1)) = 0.0 _Decal4_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal4_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL4_INVERT_BLEND_ORDER)] _Decal4_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL4_TILING_MODE)] _Decal4_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL4_REPLACE_ALPHA)] _Decal4_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL4_MULTIPLY)] _Decal4_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -761,6 +766,7 @@ Shader "yum_food/2ner" _Decal5_Angle("Angle", Range(0, 1)) = 0.0 _Decal5_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal5_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL5_INVERT_BLEND_ORDER)] _Decal5_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL5_TILING_MODE)] _Decal5_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL5_REPLACE_ALPHA)] _Decal5_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL5_MULTIPLY)] _Decal5_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -839,6 +845,7 @@ Shader "yum_food/2ner" _Decal6_Angle("Angle", Range(0, 1)) = 0.0 _Decal6_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal6_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL6_INVERT_BLEND_ORDER)] _Decal6_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL6_TILING_MODE)] _Decal6_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL6_REPLACE_ALPHA)] _Decal6_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL6_MULTIPLY)] _Decal6_Replace_Multiply_Mode("Multiply", Float) = 0 @@ -917,6 +924,7 @@ Shader "yum_food/2ner" _Decal7_Angle("Angle", Range(0, 1)) = 0.0 _Decal7_UV_Channel("UV channel", Range(0, 3.1)) = 0 _Decal7_Bias("Mip bias", Range(-4, 4)) = 0 + [ThryToggle(_DECAL7_INVERT_BLEND_ORDER)] _Decal7_Invert_Blend_Order("Invert blend order", Float) = 0 [ThryToggle(_DECAL7_TILING_MODE)] _Decal7_Tiling_Mode("Tiling mode", Float) = 0 [ThryToggle(_DECAL7_REPLACE_ALPHA)] _Decal7_Replace_Alpha_Mode("Replace alpha", Float) = 0 [ThryToggle(_DECAL7_MULTIPLY)] _Decal7_Replace_Multiply_Mode("Multiply", Float) = 0 diff --git a/decals.cginc b/decals.cginc index 1e9427b..38dbf6d 100644 --- a/decals.cginc +++ b/decals.cginc @@ -201,6 +201,10 @@ float4 getCmykWarpingPlanesColor(DecalParams params, float2 uv) { float decal_mask = 1; #define APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, params) \ + decal_albedo.a = lerp(0, decal_albedo.a, params.opacity); \ + albedo = alphaBlend(albedo, decal_albedo); + +#define APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, params) \ decal_albedo.a = lerp(0, decal_albedo.a, params.opacity); \ albedo = alphaBlend(decal_albedo, albedo); @@ -267,8 +271,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL0_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL0_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -329,8 +337,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL1_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL1_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -391,8 +403,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL2_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL2_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -453,8 +469,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL3_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL3_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -515,8 +535,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL4_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL4_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -577,8 +601,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL5_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL5_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -639,8 +667,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL6_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL6_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; @@ -701,8 +733,12 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #elif defined(_DECAL7_MULTIPLY) APPLY_DECAL_BLEND_MODE_MULTIPLY(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #else + #if defined(_DECAL7_INVERT_BLEND_ORDER) + APPLY_DECAL_BLEND_MODE_ALPHA_BLEND_INVERTED(i, albedo, normal_tangent, metallic, smoothness, emission, decal); + #else APPLY_DECAL_BLEND_MODE_ALPHA_BLEND(i, albedo, normal_tangent, metallic, smoothness, emission, decal); #endif + #endif #if defined(FORWARD_BASE_PASS) float3 tmp_emission = 0; diff --git a/features.cginc b/features.cginc index 696a08e..b1550c6 100644 --- a/features.cginc +++ b/features.cginc @@ -133,6 +133,7 @@ #pragma shader_feature_local _DECAL0_SDF #pragma shader_feature_local _DECAL0_MASK #pragma shader_feature_local _DECAL0_TILING_MODE +#pragma shader_feature_local _DECAL0_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL0_REPLACE_ALPHA #pragma shader_feature_local _DECAL0_MULTIPLY #pragma shader_feature_local _DECAL0_CMYK_WARPING_PLANES @@ -148,6 +149,7 @@ #pragma shader_feature_local _DECAL1_SDF #pragma shader_feature_local _DECAL1_MASK #pragma shader_feature_local _DECAL1_TILING_MODE +#pragma shader_feature_local _DECAL1_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL1_REPLACE_ALPHA #pragma shader_feature_local _DECAL1_MULTIPLY #pragma shader_feature_local _DECAL1_CMYK_WARPING_PLANES @@ -163,6 +165,7 @@ #pragma shader_feature_local _DECAL2_SDF #pragma shader_feature_local _DECAL2_MASK #pragma shader_feature_local _DECAL2_TILING_MODE +#pragma shader_feature_local _DECAL2_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL2_REPLACE_ALPHA #pragma shader_feature_local _DECAL2_MULTIPLY #pragma shader_feature_local _DECAL2_CMYK_WARPING_PLANES @@ -178,6 +181,7 @@ #pragma shader_feature_local _DECAL3_SDF #pragma shader_feature_local _DECAL3_MASK #pragma shader_feature_local _DECAL3_TILING_MODE +#pragma shader_feature_local _DECAL3_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL3_REPLACE_ALPHA #pragma shader_feature_local _DECAL3_MULTIPLY #pragma shader_feature_local _DECAL3_CMYK_WARPING_PLANES @@ -193,6 +197,7 @@ #pragma shader_feature_local _DECAL4_SDF #pragma shader_feature_local _DECAL4_MASK #pragma shader_feature_local _DECAL4_TILING_MODE +#pragma shader_feature_local _DECAL4_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL4_REPLACE_ALPHA #pragma shader_feature_local _DECAL4_MULTIPLY #pragma shader_feature_local _DECAL4_CMYK_WARPING_PLANES @@ -208,6 +213,7 @@ #pragma shader_feature_local _DECAL5_SDF #pragma shader_feature_local _DECAL5_MASK #pragma shader_feature_local _DECAL5_TILING_MODE +#pragma shader_feature_local _DECAL5_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL5_REPLACE_ALPHA #pragma shader_feature_local _DECAL5_MULTIPLY #pragma shader_feature_local _DECAL5_CMYK_WARPING_PLANES @@ -223,6 +229,7 @@ #pragma shader_feature_local _DECAL6_SDF #pragma shader_feature_local _DECAL6_MASK #pragma shader_feature_local _DECAL6_TILING_MODE +#pragma shader_feature_local _DECAL6_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL6_REPLACE_ALPHA #pragma shader_feature_local _DECAL6_MULTIPLY #pragma shader_feature_local _DECAL6_CMYK_WARPING_PLANES @@ -238,6 +245,7 @@ #pragma shader_feature_local _DECAL7_SDF #pragma shader_feature_local _DECAL7_MASK #pragma shader_feature_local _DECAL7_TILING_MODE +#pragma shader_feature_local _DECAL7_INVERT_BLEND_ORDER #pragma shader_feature_local _DECAL7_REPLACE_ALPHA #pragma shader_feature_local _DECAL7_MULTIPLY #pragma shader_feature_local _DECAL7_CMYK_WARPING_PLANES -- cgit v1.2.3