From 6647234da5e504b48cd2a72c52e24e9696ff9ee9 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 22 Aug 2024 01:45:12 -0700 Subject: Matcap can now overwrite rim lighting in a configurable way --- tooner_lighting.cginc | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) (limited to 'tooner_lighting.cginc') diff --git a/tooner_lighting.cginc b/tooner_lighting.cginc index 34c1368..6267a2d 100644 --- a/tooner_lighting.cginc +++ b/tooner_lighting.cginc @@ -1266,7 +1266,7 @@ float4 effect(inout v2f i) matcap_theta = atan2(matcap_uv.y - 0.5, matcap_uv.x - 0.5); } #endif - float matcap_overwrite_mask = 0; + float4 matcap_overwrite_mask = 0; #if defined(_MATCAP0) || defined(_MATCAP1) { #if defined(_MATCAP0) @@ -1337,7 +1337,7 @@ float4 effect(inout v2f i) albedo.rgb *= lerp(1, matcap, matcap_mask); break; case 2: - matcap_overwrite_mask = max(matcap_mask, matcap_overwrite_mask); + matcap_overwrite_mask[0] = max(matcap_mask, matcap_overwrite_mask[0]); albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask); matcap_emission = lerp(albedo.rgb, matcap, matcap_mask) * _Matcap0Emission; break; @@ -1427,7 +1427,7 @@ float4 effect(inout v2f i) albedo.rgb *= lerp(1, matcap, matcap_mask); break; case 2: - matcap_overwrite_mask = max(matcap_mask, matcap_overwrite_mask); + matcap_overwrite_mask[1] = max(matcap_mask, matcap_overwrite_mask[1]); albedo.rgb = lerp(albedo.rgb, matcap, matcap_mask); matcap_emission = lerp(albedo.rgb, matcap, matcap_mask) * _Matcap1Emission; break; @@ -1450,10 +1450,12 @@ float4 effect(inout v2f i) #endif // _MATCAP1 } #endif // _MATCAP0 || _MATCAP1 + matcap_overwrite_mask = 1 - matcap_overwrite_mask; // TODO get rid of the pow. It's a hack to make matcap replace mode look // better with overlay tattoos. - mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov, 1 - pow(matcap_overwrite_mask, 4)); + mixOverlayAlbedoRoughnessMetallic(albedo, roughness, metallic, ov, + 1 - pow((1 - min(matcap_overwrite_mask[0], matcap_overwrite_mask[1])), 8)); #if defined(_DECAL0) || defined(_DECAL1) || defined(_DECAL2) || defined(_DECAL3) float3 decal_emission = 0; applyDecal(albedo, roughness, metallic, decal_emission, i); @@ -1484,6 +1486,16 @@ float4 effect(inout v2f i) #else float matcap_mask = 1; #endif +#if defined(_MATCAP0) + if (_Matcap0_Overwrite_Rim_Lighting_0) { + matcap_mask *= matcap_overwrite_mask[0]; + } +#endif +#if defined(_MATCAP1) + if (_Matcap1_Overwrite_Rim_Lighting_0) { + matcap_mask *= matcap_overwrite_mask[1]; + } +#endif #if defined(_RIM_LIGHTING0_POLAR_MASK) if (_Rim_Lighting0_PolarMask_Enabled) { float pmask_theta = _Rim_Lighting0_PolarMask_Theta; @@ -1548,6 +1560,16 @@ float4 effect(inout v2f i) #else float matcap_mask = 1; #endif +#if defined(_MATCAP0) + if (_Matcap0_Overwrite_Rim_Lighting_1) { + matcap_mask *= matcap_overwrite_mask[0]; + } +#endif +#if defined(_MATCAP1) + if (_Matcap1_Overwrite_Rim_Lighting_1) { + matcap_mask *= matcap_overwrite_mask[1]; + } +#endif #if defined(_RIM_LIGHTING1_POLAR_MASK) if (_Rim_Lighting1_PolarMask_Enabled) { float pmask_theta = _Rim_Lighting1_PolarMask_Theta; @@ -1616,6 +1638,16 @@ float4 effect(inout v2f i) #else float matcap_mask = 1; #endif +#if defined(_MATCAP0) + if (_Matcap0_Overwrite_Rim_Lighting_2) { + matcap_mask *= matcap_overwrite_mask[0]; + } +#endif +#if defined(_MATCAP1) + if (_Matcap1_Overwrite_Rim_Lighting_2) { + matcap_mask *= matcap_overwrite_mask[1]; + } +#endif #if defined(_RIM_LIGHTING2_POLAR_MASK) if (_Rim_Lighting2_PolarMask_Enabled) { float pmask_theta = _Rim_Lighting2_PolarMask_Theta; @@ -1684,6 +1716,16 @@ float4 effect(inout v2f i) #else float matcap_mask = 1; #endif +#if defined(_MATCAP0) + if (_Matcap0_Overwrite_Rim_Lighting_3) { + matcap_mask *= matcap_overwrite_mask[0]; + } +#endif +#if defined(_MATCAP1) + if (_Matcap1_Overwrite_Rim_Lighting_3) { + matcap_mask *= matcap_overwrite_mask[1]; + } +#endif #if defined(_RIM_LIGHTING3_POLAR_MASK) if (_Rim_Lighting3_PolarMask_Enabled) { float pmask_theta = _Rim_Lighting3_PolarMask_Theta; @@ -1821,6 +1863,7 @@ float4 effect(inout v2f i) #endif #if defined(_GLITTER) float glitter_mask = _Glitter_Mask.SampleGrad(linear_repeat_s, i.uv0, iddx, iddy); + glitter_mask *= min(matcap_overwrite_mask[0], matcap_overwrite_mask[1]); float glitter = get_glitter(i.uv0, i.worldPos, normal, _Glitter_Density, _Glitter_Amount, _Glitter_Speed, glitter_mask, _Glitter_Brightness, _Glitter_Angle, _Glitter_Power); -- cgit v1.2.3