From e28c2aa1eaf537276e5667b23d8d35b001200d31 Mon Sep 17 00:00:00 2001 From: yum Date: Tue, 3 Mar 2026 18:24:18 -0800 Subject: Fix reflection dir, matching filament --- brdf.cginc | 3 ++- lighting.cginc | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/brdf.cginc b/brdf.cginc index ee1a219..9e08325 100755 --- a/brdf.cginc +++ b/brdf.cginc @@ -70,6 +70,7 @@ float4 brdf(Pbr pbr, LightData data) { float3 specular = 0; float3 diffuse = 0; + // TODO parameterize float f0 = 0.04f; const float f90 = 1.0f; @@ -94,7 +95,7 @@ float4 brdf(Pbr pbr, LightData data) { dfg = float3(1, 1, 1); } float3 f0_color = lerp(f0, pbr.albedo.xyz, pbr.metallic); - float3 energy_comp = 1.0f + f0_color * (1.0f / dfg.xxx - 1.0f); + float3 energy_comp = 1.0f + f0_color * (1.0f / (dfg.xxx + dfg.yyy) - 1.0f); #if defined(_CLEARCOAT) const float cc_f0 = 0.04f; diff --git a/lighting.cginc b/lighting.cginc index f5957b8..1f3afe6 100755 --- a/lighting.cginc +++ b/lighting.cginc @@ -299,7 +299,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); @@ -317,7 +317,7 @@ void GetLighting(v2f i, Pbr pbr, out LightData data) { data.indirect.double_LoV = saturate(2.0f * indirect_LoV * indirect_LoV - 1.0f); data.indirect.diffuse = getIndirectDiffuse(i, pbr, data); - data.indirect.specular = getIndirectSpecular(i, pbr.roughness_perceptual, view_dir, -data.indirect.dir); + data.indirect.specular = getIndirectSpecular(i, pbr.roughness_perceptual, view_dir, data.indirect.dir); data.common.spec_ao = getSpecularAO(i, pbr, data, reflect_dir); -- cgit v1.2.3