From 03c6eff81b3a9034f2a8e8caaad84cdc29b29f23 Mon Sep 17 00:00:00 2001 From: yum Date: Sat, 2 Nov 2024 18:42:25 -0700 Subject: hack: Apply interleaved gradient noise to direct light This minimizes color banding due to dim direct lighting --- pbr.cginc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pbr.cginc b/pbr.cginc index d795267..e4e5ff1 100644 --- a/pbr.cginc +++ b/pbr.cginc @@ -347,6 +347,21 @@ float4 getLitColor( screenPos = float4(i.screenPos, 0, i.pos.w); #endif +// TODO optimize this +// Break up color banding by adding some dithering to direct light. +{ + float2 screen_uv; + { + float3 full_vec_eye_to_geometry = i.worldPos - _WorldSpaceCameraPos; + float3 world_dir = normalize(i.worldPos - _WorldSpaceCameraPos); + float perspective_divide = 1.0 / i.pos.w; + float perspective_factor = length(full_vec_eye_to_geometry * perspective_divide); + screen_uv = i.screenPos.xy * perspective_divide; + } + uint2 screen_uv_round = floor(screen_uv * _ScreenParams.xy); + direct_light.color += ign(screen_uv_round) * 0.00390625; +} + #if 1 float reflection_strength = _ReflectionStrength; #if defined(_REFLECTION_STRENGTH_TEX) -- cgit v1.2.3