From ab93e2ca4d1b2e698a260aedba8a5552eda2a417 Mon Sep 17 00:00:00 2001 From: Emil Axelsson Date: Wed, 4 Apr 2018 16:58:24 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20atmosphere=20floating=20point=20issue?= =?UTF-8?q?=C2=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/atmosphere/rendering/atmospheredeferredcaster.cpp | 3 +++ modules/atmosphere/shaders/atmosphere_deferred_fs.glsl | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp index 46f7dd4cf6..088181189d 100644 --- a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp +++ b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp @@ -258,6 +258,9 @@ void AtmosphereDeferredcaster::preRaycast(const RenderData& renderData, program.setUniform("eyeToModel", glm::mat4(eyeToModel)); + float viewScaling = renderData.camera.scaling(); + program.setUniform("viewScaling", viewScaling); + glm::mat4 invProjection = glm::inverse(renderData.camera.projectionMatrix()); program.setUniform("inverseProjection", invProjection); diff --git a/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl b/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl index aa1e30618e..50578be199 100644 --- a/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl +++ b/modules/atmosphere/shaders/atmosphere_deferred_fs.glsl @@ -77,6 +77,7 @@ uniform int cullAtmosphere; uniform float backgroundConstant; uniform bool firstPaint; uniform float atmExposure; +uniform float viewScaling; uniform sampler2D irradianceTexture; uniform sampler3D inscatterTexture; @@ -253,6 +254,9 @@ void dCalculateRayRenderableGlobe(in int mssaSample, out dRay ray) { vec4 eyeSpaceCoords = inverseProjection * vec4(clipCoords); eyeSpaceCoords.w = 1.0; + // Scale the vector to avoid floating point inaccuracy. + eyeSpaceCoords.xyz *= viewScaling * 1000000.0; + dvec4 objectCoords = eyeToModel * eyeSpaceCoords; // ============================