summaryrefslogtreecommitdiffstats
path: root/tooner_lighting.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-05-27 13:28:38 -0700
committeryum <yum.food.vr@gmail.com>2024-05-27 13:28:38 -0700
commit1a62981f052ca321ca47627d41cda83e8ea60420 (patch)
tree3f9c36933b8414459a0a8c335ab2a41c148211bb /tooner_lighting.cginc
parent33b2b8a3ab0ddea85c7a3f03f918fe5ee6874426 (diff)
Add mix modes to PBR overlay albedo channel
Diffstat (limited to 'tooner_lighting.cginc')
-rw-r--r--tooner_lighting.cginc63
1 files changed, 51 insertions, 12 deletions
diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc
index 6a0dd87..f746fbf 100644
--- a/tooner_lighting.cginc
+++ b/tooner_lighting.cginc
@@ -482,6 +482,56 @@ void getOverlayAlbedo(inout PbrOverlay ov,
#endif // _PBR_OVERLAY3
}
+void mixOverlayAlbedo(inout float3 albedo, PbrOverlay ov) {
+#if defined(_PBR_OVERLAY0)
+#if defined(_PBR_OVERLAY0_MIX_ALPHA_BLEND)
+ albedo.rgb = lerp(albedo.rgb, ov.ov0_albedo.rgb, ov.ov0_albedo.a);
+#elif defined(_PBR_OVERLAY0_MIX_ADD)
+ albedo.rgb += ov.ov0_albedo;
+#elif defined(_PBR_OVERLAY0_MIX_MIN)
+ albedo.rgb = min(albedo.rgb, ov.ov0_albedo);
+#elif defined(_PBR_OVERLAY0_MIX_MAX)
+ albedo.rgb = max(albedo.rgb, ov.ov0_albedo);
+#endif
+#endif
+
+#if defined(_PBR_OVERLAY1)
+#if defined(_PBR_OVERLAY1_MIX_ALPHA_BLEND)
+ albedo.rgb = lerp(albedo.rgb, ov.ov1_albedo.rgb, ov.ov1_albedo.a);
+#elif defined(_PBR_OVERLAY1_MIX_ADD)
+ albedo.rgb += ov.ov1_albedo;
+#elif defined(_PBR_OVERLAY1_MIX_MIN)
+ albedo.rgb = min(albedo.rgb, ov.ov1_albedo);
+#elif defined(_PBR_OVERLAY1_MIX_MAX)
+ albedo.rgb = max(albedo.rgb, ov.ov1_albedo);
+#endif
+#endif
+
+#if defined(_PBR_OVERLAY2)
+#if defined(_PBR_OVERLAY2_MIX_ALPHA_BLEND)
+ albedo.rgb = lerp(albedo.rgb, ov.ov2_albedo.rgb, ov.ov2_albedo.a);
+#elif defined(_PBR_OVERLAY2_MIX_ADD)
+ albedo.rgb += ov.ov2_albedo;
+#elif defined(_PBR_OVERLAY2_MIX_MIN)
+ albedo.rgb = min(albedo.rgb, ov.ov2_albedo);
+#elif defined(_PBR_OVERLAY2_MIX_MAX)
+ albedo.rgb = max(albedo.rgb, ov.ov2_albedo);
+#endif
+#endif
+
+#if defined(_PBR_OVERLAY3)
+#if defined(_PBR_OVERLAY3_MIX_ALPHA_BLEND)
+ albedo.rgb = lerp(albedo.rgb, ov.ov3_albedo.rgb, ov.ov3_albedo.a);
+#elif defined(_PBR_OVERLAY3_MIX_ADD)
+ albedo.rgb += ov.ov3_albedo;
+#elif defined(_PBR_OVERLAY3_MIX_MIN)
+ albedo.rgb = min(albedo.rgb, ov.ov3_albedo);
+#elif defined(_PBR_OVERLAY3_MIX_MAX)
+ albedo.rgb = max(albedo.rgb, ov.ov3_albedo);
+#endif
+#endif
+}
+
void applyOverlayNormal(inout float3 raw_normal, PbrOverlay ov, v2f i, float iddx, float iddy)
{
float3 raw_normal_2;
@@ -609,18 +659,7 @@ float4 effect(inout v2f i)
float4 vertex_light_color = 0;
#endif
-#if defined(_PBR_OVERLAY0)
- albedo.rgb = lerp(albedo.rgb, ov.ov0_albedo.rgb, ov.ov0_albedo.a);
-#endif
-#if defined(_PBR_OVERLAY1)
- albedo.rgb = lerp(albedo.rgb, ov.ov1_albedo.rgb, ov.ov1_albedo.a);
-#endif
-#if defined(_PBR_OVERLAY2)
- albedo.rgb = lerp(albedo.rgb, ov.ov2_albedo.rgb, ov.ov2_albedo.a);
-#endif
-#if defined(_PBR_OVERLAY3)
- albedo.rgb = lerp(albedo.rgb, ov.ov3_albedo.rgb, ov.ov3_albedo.a);
-#endif
+ mixOverlayAlbedo(albedo.rgb, ov);
#if defined(_MATCAP0) || defined(_MATCAP1) || defined(_RIM_LIGHTING0) || defined(_RIM_LIGHTING1)
float3 matcap_emission = 0;