From 75439d0d6437a10b00b240aba75e9f12de20150b Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 26 Feb 2026 14:21:05 -0800 Subject: Add emissions, remove impostor code --- matcap.cginc | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'matcap.cginc') diff --git a/matcap.cginc b/matcap.cginc index d9391af..462ba9b 100644 --- a/matcap.cginc +++ b/matcap.cginc @@ -3,10 +3,15 @@ #include "globals.cginc" #include "lighting.cginc" +#include "math.cginc" #include "pbr.cginc" #include "texture_utils.cginc" #if defined(_MATCAP0) || defined(_MATCAP1) || defined(_RIM_LIGHTING0) +#define HAS_MATCAP_RL +#endif + +#if defined(HAS_MATCAP_RL) float2 getMatcapUV(v2f i, Pbr pbr) { const float3 cam_normal = normalize(mul(UNITY_MATRIX_V, float4(pbr.normal, 0))); const float3 cam_view_dir = normalize(mul(UNITY_MATRIX_V, float4(-i.eyeVec.xyz, 0))); @@ -52,10 +57,10 @@ float2 quantizeMatcapUV(float2 muv, float muv_r, float steps) { const float epsilon = 1e-4f; return muv_r_q * (muv / max(epsilon, muv_r)); } -#endif // _MATCAP0 || _RIM_LIGHTING0 +#endif // HAS_MATCAP_RL void applyMatcapsAndRimLighting(v2f i, inout Pbr pbr, inout LightData light_data) { -#if defined(_MATCAP0) || defined(_MATCAP1) || defined(_RIM_LIGHTING0) +#if defined(HAS_MATCAP_RL) float2 muv = getMatcapUV(i, pbr); float2 muv_centered = muv * 2 - 1; float muv_r = length(muv_centered); @@ -109,7 +114,22 @@ void applyMatcapsAndRimLighting(v2f i, inout Pbr pbr, inout LightData light_data #if defined(_RIM_LIGHTING0_QUANTIZATION) rl0_dist = floor(rl0_dist * _Rim_Lighting0_Quantization_Steps) / _Rim_Lighting0_Quantization_Steps; #endif - float3 rl0 = lerp(1, _Rim_Lighting0_Color, rl0_dist); + + float3 rl0; + switch(_Rim_Lighting0_Mode) { + case MATCAP_MODE_ADD: + // Fall through. + case MATCAP_MODE_SUBTRACT: + rl0 = lerp(0, _Rim_Lighting0_Color, rl0_dist); + break; + case MATCAP_MODE_MULTIPLY: + rl0 = lerp(1, _Rim_Lighting0_Color, rl0_dist); + break; + default: + rl0 = lerp(pbr.albedo.xyz, _Rim_Lighting0_Color, rl0_dist); + break; + } + #if defined(_RIM_LIGHTING0_MASK) float rl0_mask = _Rim_Lighting0_Mask.Sample(linear_repeat_s, UV_SCOFF(i, _Rim_Lighting0_Mask_ST, /*which_channel=*/0)); #else -- cgit v1.2.3