summaryrefslogtreecommitdiffstats
path: root/matcap.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-02-26 14:21:05 -0800
committeryum <yum.food.vr@gmail.com>2026-02-26 14:21:05 -0800
commit75439d0d6437a10b00b240aba75e9f12de20150b (patch)
treeaf30dceabad1b486f6411c8e89e3656887e55fff /matcap.cginc
parent5460dbc62fe6f404cb244410af949864cce286f5 (diff)
Add emissions, remove impostor code
Diffstat (limited to 'matcap.cginc')
-rw-r--r--matcap.cginc26
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