summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-11-11 21:22:05 -0800
committeryum <yum.food.vr@gmail.com>2025-11-11 21:22:05 -0800
commitefb0ebd7ba8cb78f4b5059147bfd7e1885968bf6 (patch)
tree389bd3e906026b269cac40ce29dc9a4da9648e30
parent883e50070aca6017c9d71945c2c6e685938d12c4 (diff)
Simplify SH9 math
-rw-r--r--lighting.cginc13
1 files changed, 5 insertions, 8 deletions
diff --git a/lighting.cginc b/lighting.cginc
index d72540d..23cdd09 100644
--- a/lighting.cginc
+++ b/lighting.cginc
@@ -117,11 +117,8 @@ float3 yumSH9(float4 n, float3 worldPos, inout LightIndirect light) {
float3 L0 = float3(unity_SHAr.w, unity_SHAg.w, unity_SHAb.w);
// L1 band
- float3 L1 = float3(
- dot(unity_SHAr.xyz, n.xyz),
- dot(unity_SHAg.xyz, n.xyz),
- dot(unity_SHAb.xyz, n.xyz)
- );
+ float3x3 L1m = float3x3(unity_SHAr.xyz, unity_SHAg.xyz, unity_SHAb.xyz);
+ float3 L1 = mul(L1m, n);
// L2 band
float4 v = float4(n.x * n.y, n.y * n.z, n.z * n.z, n.x * n.z);
@@ -152,7 +149,7 @@ float3 yumSH9(float4 n, float3 worldPos, inout LightIndirect light) {
float4 getIndirectDiffuse(v2f i, Pbr pbr, inout LightIndirect light) {
float4 diffuse = 0;
#if defined(FORWARD_BASE_PASS)
- diffuse.xyz += max(0, yumSH9(float4(pbr.normal, 0), i.worldPos, light));
+ diffuse.xyz += max(0, yumSH9(float4(i.normal, 1.0), i.worldPos, light));
#endif
return diffuse;
}
@@ -187,7 +184,7 @@ void GetLighting(v2f i, Pbr pbr, out LightData data) {
data.direct.color = lightColorIntensity.rgb * getShadowAttenuation(i);
// Indirect lighting
- float3 reflect_dir = -reflect(data.common.V, pbr.normal);
+ float3 reflect_dir = reflect(data.common.V, pbr.normal);
float3 dominant_dir = getSpecularDominantDirection(pbr.normal, reflect_dir, pbr.roughness);
data.indirect.dir = normalize(dominant_dir);
@@ -195,7 +192,7 @@ void GetLighting(v2f i, Pbr pbr, out LightData data) {
data.indirect.NoL = saturate(dot(pbr.normal, data.indirect.dir));
data.indirect.NoH = saturate(dot(pbr.normal, data.indirect.H));
#if defined(_CLEARCOAT)
- float3 dir_cc = -reflect(data.common.V, i.normal);
+ float3 dir_cc = reflect(-data.common.V, i.normal);
float3 H_cc = normalize(data.common.V + dir_cc);
data.indirect.LoH_cc = saturate(dot(dir_cc, H_cc));
#endif