mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 16:41:02 +02:00
Merge pull request #2936 from ey6es/master
A couple more shadow tweaks: reduce "shimmer" by moving in texel increments, use multisampling on voxels as well as models.
This commit is contained in:
commit
c52592311f
2 changed files with 14 additions and 1 deletions
|
@ -13,8 +13,15 @@
|
||||||
|
|
||||||
uniform sampler2DShadow shadowMap;
|
uniform sampler2DShadow shadowMap;
|
||||||
|
|
||||||
|
// the inverse of the size of the shadow map
|
||||||
|
const float shadowScale = 1.0 / 2048.0;
|
||||||
|
|
||||||
varying vec4 shadowColor;
|
varying vec4 shadowColor;
|
||||||
|
|
||||||
void main(void) {
|
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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2291,6 +2291,12 @@ void Application::updateShadowMap() {
|
||||||
radius = qMax(radius, glm::distance(points[i], center));
|
radius = qMax(radius, glm::distance(points[i], center));
|
||||||
}
|
}
|
||||||
center = inverseRotation * center;
|
center = inverseRotation * center;
|
||||||
|
|
||||||
|
// to reduce texture "shimmer," move in texel increments
|
||||||
|
float texelSize = (2.0f * radius) / fbo->width();
|
||||||
|
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 minima(center.x - radius, center.y - radius, center.z - radius);
|
||||||
glm::vec3 maxima(center.x + radius, center.y + radius, center.z + radius);
|
glm::vec3 maxima(center.x + radius, center.y + radius, center.z + radius);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue