diff options
| author | yum <yum.food.vr@gmail.com> | 2026-02-26 14:21:05 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-02-26 14:21:05 -0800 |
| commit | 75439d0d6437a10b00b240aba75e9f12de20150b (patch) | |
| tree | af30dceabad1b486f6411c8e89e3656887e55fff /matcap.cginc | |
| parent | 5460dbc62fe6f404cb244410af949864cce286f5 (diff) | |
Add emissions, remove impostor code
Diffstat (limited to 'matcap.cginc')
| -rw-r--r-- | matcap.cginc | 26 |
1 files changed, 23 insertions, 3 deletions
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 |
