diff options
| author | yum <yum.food.vr@gmail.com> | 2024-05-27 13:28:38 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2024-05-27 13:28:38 -0700 |
| commit | 1a62981f052ca321ca47627d41cda83e8ea60420 (patch) | |
| tree | 3f9c36933b8414459a0a8c335ab2a41c148211bb /tooner_lighting.cginc | |
| parent | 33b2b8a3ab0ddea85c7a3f03f918fe5ee6874426 (diff) | |
Add mix modes to PBR overlay albedo channel
Diffstat (limited to 'tooner_lighting.cginc')
| -rw-r--r-- | tooner_lighting.cginc | 63 |
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; |
