From 2b8e22958a701c313c45319f34fb162907da7857 Mon Sep 17 00:00:00 2001 From: yum Date: Mon, 30 Mar 2026 15:47:57 -0700 Subject: Glitter: add spatial energy compensation --- glitter.cginc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/glitter.cginc b/glitter.cginc index 09ba0ea..ebacffe 100644 --- a/glitter.cginc +++ b/glitter.cginc @@ -152,10 +152,11 @@ float integrate_box(float2 x, float2 size, float2 mu, float2x2 sigma, sqrt(sigma[1][1]), lower_limit.y, upper_limit.y); } -float compensation(float2 x_a, float2x2 sigma_a, float res_a) { - float containing = integrate_box(0.5, 0.5, x_a, sigma_a, 0.0, 1.0); +float compensation(float2 x, float2x2 sigma, float res) { + float containing = integrate_box(0.5, 0.5, x, sigma, 0.0, 1.0); + float2 sampled_cell_center = (floor(x * res) + 0.5) / res; float explicitly_evaluated = - integrate_box(round(x_a*res_a)/res_a, 1.0/res_a, x_a, sigma_a, 0, 1); + integrate_box(sampled_cell_center, 1.0 / res, x, sigma, 0, 1); return containing - explicitly_evaluated; } @@ -217,6 +218,7 @@ float D_Kemppinen(float3 h, float alpha, float glint_alpha, float2 uv, best_g_a = g_a; } D_filter += w_lambda * compensation(x_a, sigma_a, res_a); + D_filter += w_lambda * compensation(x_s, sigma_s, res_s); } micro_normal = normalize(disk_to_ndf_ggx(best_g_a, alpha)); -- cgit v1.2.3