From 2b54d627c0662ce0a1a0ba91386e95c8f02f54e5 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 27 May 2014 14:25:27 -0700 Subject: [PATCH 1/3] Try rounding to nearest texel unit to reduce shimmer. --- interface/src/Application.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5b43159122..32fa50e710 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2291,6 +2291,11 @@ void Application::updateShadowMap() { radius = qMax(radius, glm::distance(points[i], center)); } center = inverseRotation * center; + + // to reduce texture "shimmer," move in texel increments + float texelSize = (2.0f * radius) / fbo->width(); + center = glm::round(center / texelSize) * texelSize; + glm::vec3 minima(center.x - radius, center.y - radius, center.z - radius); glm::vec3 maxima(center.x + radius, center.y + radius, center.z + radius); From 7c124176533853fdd6be4474a78ff63bd00e61c2 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 27 May 2014 17:26:19 -0700 Subject: [PATCH 2/3] Use multisampling on the shadow maps for the voxels, too. --- interface/resources/shaders/shadow_map.frag | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/interface/resources/shaders/shadow_map.frag b/interface/resources/shaders/shadow_map.frag index 70c459ecf8..fb3474d9ef 100644 --- a/interface/resources/shaders/shadow_map.frag +++ b/interface/resources/shaders/shadow_map.frag @@ -13,8 +13,15 @@ uniform sampler2DShadow shadowMap; +// the inverse of the size of the shadow map +const float shadowScale = 1.0 / 2048.0; + varying vec4 shadowColor; void main(void) { - gl_FragColor = mix(shadowColor, gl_Color, shadow2D(shadowMap, gl_TexCoord[0].stp)); + gl_FragColor = mix(shadowColor, gl_Color, 0.25 * + (shadow2D(shadowMap, gl_TexCoord[0].stp + vec3(-shadowScale, -shadowScale, 0.0)).r + + shadow2D(shadowMap, gl_TexCoord[0].stp + vec3(-shadowScale, shadowScale, 0.0)).r + + shadow2D(shadowMap, gl_TexCoord[0].stp + vec3(shadowScale, -shadowScale, 0.0)).r + + shadow2D(shadowMap, gl_TexCoord[0].stp + vec3(shadowScale, shadowScale, 0.0)).r)); } From 62eeeaa1c61a0a43b9013442d12a49d6e9b700aa Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 27 May 2014 18:12:15 -0700 Subject: [PATCH 3/3] Fix for Windows build failure. --- interface/src/Application.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 32fa50e710..37aa23f317 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2294,7 +2294,8 @@ void Application::updateShadowMap() { // to reduce texture "shimmer," move in texel increments float texelSize = (2.0f * radius) / fbo->width(); - center = glm::round(center / texelSize) * texelSize; + center = glm::vec3(roundf(center.x / texelSize) * texelSize, roundf(center.y / texelSize) * texelSize, + roundf(center.z / texelSize) * texelSize); glm::vec3 minima(center.x - radius, center.y - radius, center.z - radius); glm::vec3 maxima(center.x + radius, center.y + radius, center.z + radius);