summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2ner.shader8
-rw-r--r--decals.cginc57
-rw-r--r--features.cginc8
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