diff --git a/projects/voxelization/resources/shaders/tonemapping.comp b/projects/voxelization/resources/shaders/tonemapping.comp index 500fa0c2b2682f542e07e2491879cab00b11d596..8fa07d39ebb56eab857cdccb755a6558f5ae1ec3 100644 --- a/projects/voxelization/resources/shaders/tonemapping.comp +++ b/projects/voxelization/resources/shaders/tonemapping.comp @@ -74,11 +74,22 @@ vec3 applyGrain(ivec2 uv, vec3 c){ } vec2 computeDistortedUV(vec2 uv, float aspectRatio){ - vec2 toCenter = vec2(vec2(0.5) - uv); - float r2 = dot(toCenter, toCenter); - float k1 = 0.15f; - float k2 = 0.2f; - return uv + toCenter * (r2*k1 + r2*r2*k2); + uv = uv * 2 - 1; + float r2 = dot(uv, uv); + float k1 = 0.02f; + + float maxR2 = dot(vec2(1), vec2(1)); + float maxFactor = maxR2 * k1; + + // correction only needed for pincushion distortion + maxFactor = min(maxFactor, 0); + + uv /= 1 + r2*k1; + + // correction to avoid going out of [-1, 1] range when using barrel distortion + uv *= 1 + maxFactor; + + return uv * 0.5 + 0.5; } float computeLocalContrast(vec2 uv){