Added Percentage Closer Filter.

This commit is contained in:
Jonathas Costa
2019-10-16 18:06:02 -04:00
parent 2df5a4c9bc
commit eee55bc68f
3 changed files with 34 additions and 6 deletions

View File

@@ -265,12 +265,26 @@ Fragment getFragment() {
#if SHADOW_MAPPING_ENABLED
float shadow = 1.0;
if ( shadowCoords.z >= 0 ) {
if ( shadowCoords.w > 1 ) {
vec4 normalizedShadowCoords = shadowCoords;
normalizedShadowCoords.z = normalizeFloat(normalizedShadowCoords.w - 0.3);
normalizedShadowCoords.xy = normalizedShadowCoords.xy / normalizedShadowCoords.w;
normalizedShadowCoords.w = 1.0;
shadow = textureProj(shadowMapTexture, normalizedShadowCoords);
//shadow = textureProj(shadowMapTexture, normalizedShadowCoords);
float sum = 0;
int fStep = 5;
for (int i = 0; i < fStep; ++i) {
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, -fStep + i));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, 0));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, fStep - i));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, -fStep + i));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, fStep - i));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, -fStep + i));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, 0));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, fStep - i));
}
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, 0));
shadow = sum / (8.f * fStep + 1.f);
}
frag.color.xyz *= shadow < 0.99 ? clamp(shadow + 0.5, 0.0, 1.0) : shadow;
#endif

View File

@@ -76,7 +76,19 @@ Fragment getFragment() {
normalizedShadowCoords.z = normalizeFloat(normalizedShadowCoords.w - 0.3);
normalizedShadowCoords.xy = normalizedShadowCoords.xy / normalizedShadowCoords.w;
normalizedShadowCoords.w = 1.0;
shadow = textureProj(shadowMapTexture, normalizedShadowCoords);
//shadow = textureProj(shadowMapTexture, normalizedShadowCoords);
float sum = 0;
int fStep = 2;
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, -fStep));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, 0));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, fStep));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, -fStep));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, 0));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, fStep));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, -fStep));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, 0));
sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, fStep));
shadow = sum / 9.f;
}
// The normal for the one plane depends on whether we are dealing

View File

@@ -246,11 +246,13 @@ namespace openspace {
(static_cast<double>(_distanceFraction)/1.0E5);*/
double multiplier = originalLightDistance *
(static_cast<double>(_distanceFraction) / 10000.0);
(static_cast<double>(_distanceFraction) / 1E17);
// New light source position
glm::dvec3 lightPosition = data.modelTransform.translation +
(lightDirection * multiplier);
/*glm::dvec3 lightPosition = data.modelTransform.translation +
(lightDirection * multiplier);*/
glm::dvec3 lightPosition = data.modelTransform.translation +
(diffVector * multiplier);
//// Light Position
//glm::dvec3 lightPosition = glm::dvec3(_sunPosition);