diff options
| -rw-r--r-- | 2ner.shader | 8 | ||||
| -rw-r--r-- | decals.cginc | 57 | ||||
| -rw-r--r-- | features.cginc | 8 |
3 files changed, 56 insertions, 17 deletions
diff --git a/2ner.shader b/2ner.shader index 6609bdc..1f186b3 100644 --- a/2ner.shader +++ b/2ner.shader @@ -426,6 +426,7 @@ Shader "yum_food/2ner" //ifex _Decal0_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal0_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL0_SDF_SSN)] _Decal0_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL0_SDF_SSN_REPLACE)] _Decal0_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal0_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal0_SSN("Screen space normals", Float) = 0 //endex @@ -512,6 +513,7 @@ Shader "yum_food/2ner" //ifex _Decal1_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal1_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL1_SDF_SSN)] _Decal1_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL1_SDF_SSN_REPLACE)] _Decal1_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal1_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal1_SSN("Screen space normals", Float) = 0 //endex @@ -598,6 +600,7 @@ Shader "yum_food/2ner" //ifex _Decal2_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal2_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL2_SDF_SSN)] _Decal2_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL2_SDF_SSN_REPLACE)] _Decal2_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal2_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal2_SSN("Screen space normals", Float) = 0 //endex @@ -684,6 +687,7 @@ Shader "yum_food/2ner" //ifex _Decal3_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal3_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL3_SDF_SSN)] _Decal3_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL3_SDF_SSN_REPLACE)] _Decal3_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal3_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal3_SSN("Screen space normals", Float) = 0 //endex @@ -770,6 +774,7 @@ Shader "yum_food/2ner" //ifex _Decal4_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal4_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL4_SDF_SSN)] _Decal4_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL4_SDF_SSN_REPLACE)] _Decal4_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal4_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal4_SSN("Screen space normals", Float) = 0 //endex @@ -856,6 +861,7 @@ Shader "yum_food/2ner" //ifex _Decal5_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal5_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL5_SDF_SSN)] _Decal5_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL5_SDF_SSN_REPLACE)] _Decal5_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal5_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal5_SSN("Screen space normals", Float) = 0 //endex @@ -942,6 +948,7 @@ Shader "yum_food/2ner" //ifex _Decal6_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal6_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL6_SDF_SSN)] _Decal6_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL6_SDF_SSN_REPLACE)] _Decal6_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal6_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal6_SSN("Screen space normals", Float) = 0 //endex @@ -1028,6 +1035,7 @@ Shader "yum_food/2ner" //ifex _Decal7_SDF_SSN_Enabled==0 [HideInInspector] m_start_Decal7_SSN("Screen space normals", Float) = 0 [ThryToggle(_DECAL7_SDF_SSN)] _Decal7_SDF_SSN_Enabled("Enable", Float) = 0 + [ThryToggle(_DECAL7_SDF_SSN_REPLACE)] _Decal7_SDF_SSN_Replace("Replace normals", Float) = 0 _Decal7_SDF_SSN_Strength("Strength", Range(0, 10)) = 1 [HideInInspector] m_end_Decal7_SSN("Screen space normals", Float) = 0 //endex diff --git a/decals.cginc b/decals.cginc index 37b1196..96b51f9 100644 --- a/decals.cginc +++ b/decals.cginc @@ -207,7 +207,7 @@ float3 calculateSdfSsn(DecalParams params, float2 decal_uv, float4 decal_albedo) decal_albedo *= params.color; \
}
-#define APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, params) \
+#define APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, params) \
{ \
float3 sdf_normal_ts = calculateSdfSsn(params, decal_uv, decal_albedo); \
sdf_normal_ts.xy *= 1.0f - albedo.a; \
@@ -215,6 +215,13 @@ float3 calculateSdfSsn(DecalParams params, float2 decal_uv, float4 decal_albedo) normal_tangent = blendNormalsHill12(normal_tangent, sdf_normal_ts); \
}
+#define APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, params) \
+ { \
+ float3 sdf_normal_ts = calculateSdfSsn(params, decal_uv, decal_albedo); \
+ sdf_normal_ts.xy *= 1.0f - albedo.a; \
+ normal_tangent = normalize(lerp(normal_tangent, normalize(sdf_normal_ts), decal_albedo.a)); \
+ }
+
#define APPLY_DECAL_CLAMP_ON(i, albedo, normal_tangent, metallic, smoothness, emission, params) \
{ \
float eps = 1e-4; \
@@ -317,8 +324,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL0_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL0_SDF_SSN) && !defined(_DECAL0_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL0_SDF_SSN) && defined(_DECAL0_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -396,8 +405,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL1_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL1_SDF_SSN) && !defined(_DECAL1_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL1_SDF_SSN) && defined(_DECAL1_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -475,8 +486,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL2_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL2_SDF_SSN) && !defined(_DECAL2_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL2_SDF_SSN) && defined(_DECAL2_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -556,8 +569,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL3_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL3_SDF_SSN) && !defined(_DECAL3_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL3_SDF_SSN) && defined(_DECAL3_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -635,8 +650,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL4_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL4_SDF_SSN) && !defined(_DECAL4_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL4_SDF_SSN) && defined(_DECAL4_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -714,8 +731,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL5_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL5_SDF_SSN) && !defined(_DECAL5_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL5_SDF_SSN) && defined(_DECAL5_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -793,8 +812,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL6_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL6_SDF_SSN) && !defined(_DECAL6_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL6_SDF_SSN) && defined(_DECAL6_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
@@ -872,8 +893,10 @@ void applyDecals(in v2f i, inout float4 albedo, inout float3 normal_tangent, ino #else
APPLY_DECAL_NORMAL_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
- #if defined(_DECAL7_SDF_SSN)
- APPLY_DECAL_SDF_SSN_ON(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #if defined(_DECAL7_SDF_SSN) && !defined(_DECAL7_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REGULAR(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
+ #elif defined(_DECAL7_SDF_SSN) && defined(_DECAL7_SDF_SSN_REPLACE)
+ APPLY_DECAL_SDF_SSN_ON_MODE_REPLACE(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#else
APPLY_DECAL_SDF_SSN_OFF(i, albedo, normal_tangent, metallic, smoothness, emission, decal);
#endif
diff --git a/features.cginc b/features.cginc index 2f3b4b1..169b28f 100644 --- a/features.cginc +++ b/features.cginc @@ -133,6 +133,7 @@ #pragma shader_feature_local _DECAL0_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL0_SDF #pragma shader_feature_local _DECAL0_SDF_SSN +#pragma shader_feature_local _DECAL0_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL0_MASK #pragma shader_feature_local _DECAL0_TILING_MODE #pragma shader_feature_local _DECAL0_INVERT_BLEND_ORDER @@ -151,6 +152,7 @@ #pragma shader_feature_local _DECAL1_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL1_SDF #pragma shader_feature_local _DECAL1_SDF_SSN +#pragma shader_feature_local _DECAL1_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL1_MASK #pragma shader_feature_local _DECAL1_TILING_MODE #pragma shader_feature_local _DECAL1_INVERT_BLEND_ORDER @@ -169,6 +171,7 @@ #pragma shader_feature_local _DECAL2_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL2_SDF #pragma shader_feature_local _DECAL2_SDF_SSN +#pragma shader_feature_local _DECAL2_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL2_MASK #pragma shader_feature_local _DECAL2_TILING_MODE #pragma shader_feature_local _DECAL2_INVERT_BLEND_ORDER @@ -187,6 +190,7 @@ #pragma shader_feature_local _DECAL3_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL3_SDF #pragma shader_feature_local _DECAL3_SDF_SSN +#pragma shader_feature_local _DECAL3_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL3_MASK #pragma shader_feature_local _DECAL3_TILING_MODE #pragma shader_feature_local _DECAL3_INVERT_BLEND_ORDER @@ -205,6 +209,7 @@ #pragma shader_feature_local _DECAL4_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL4_SDF #pragma shader_feature_local _DECAL4_SDF_SSN +#pragma shader_feature_local _DECAL4_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL4_MASK #pragma shader_feature_local _DECAL4_TILING_MODE #pragma shader_feature_local _DECAL4_INVERT_BLEND_ORDER @@ -223,6 +228,7 @@ #pragma shader_feature_local _DECAL5_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL5_SDF #pragma shader_feature_local _DECAL5_SDF_SSN +#pragma shader_feature_local _DECAL5_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL5_MASK #pragma shader_feature_local _DECAL5_TILING_MODE #pragma shader_feature_local _DECAL5_INVERT_BLEND_ORDER @@ -241,6 +247,7 @@ #pragma shader_feature_local _DECAL6_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL6_SDF #pragma shader_feature_local _DECAL6_SDF_SSN +#pragma shader_feature_local _DECAL6_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL6_MASK #pragma shader_feature_local _DECAL6_TILING_MODE #pragma shader_feature_local _DECAL6_INVERT_BLEND_ORDER @@ -259,6 +266,7 @@ #pragma shader_feature_local _DECAL7_REFLECTIONS_ALPHA_BLEND #pragma shader_feature_local _DECAL7_SDF #pragma shader_feature_local _DECAL7_SDF_SSN +#pragma shader_feature_local _DECAL7_SDF_SSN_REPLACE #pragma shader_feature_local _DECAL7_MASK #pragma shader_feature_local _DECAL7_TILING_MODE #pragma shader_feature_local _DECAL7_INVERT_BLEND_ORDER |
