Update leenkx/Shaders/std/shadows.glsl

This commit is contained in:
Onek8 2025-03-17 20:31:43 +00:00
parent 12e66d8cf1
commit f2a0dbe36c

View File

@ -88,7 +88,7 @@ float lpToDepth(vec3 lp, const vec2 lightProj) {
} }
#ifndef _ShadowMapAtlas #ifndef _ShadowMapAtlas
float PCFCube(samplerCubeShadow shadowMapCube, vec3 lp, vec3 ml, float bias, vec2 lightProj, vec3 n) { vec3 PCFCube(samplerCubeShadow shadowMapCube, samplerCube shadowMapCubeTransparent, vec3 lp, vec3 ml, float bias, vec2 lightProj, vec3 n, bool transparent) {
const float s = shadowmapCubePcfSize; const float s = shadowmapCubePcfSize;
float compare = lpToDepth(lp, lightProj) - bias * 1.5; float compare = lpToDepth(lp, lightProj) - bias * 1.5;
ml = ml + n * bias * 20; ml = ml + n * bias * 20;
@ -96,26 +96,31 @@ float PCFCube(samplerCubeShadow shadowMapCube, vec3 lp, vec3 ml, float bias, vec
ml.y = -ml.y; ml.y = -ml.y;
#endif #endif
float result = 0.0; float shadowFactor = 0.0;
// Simple PCF for non-atlas mode, using samplerCubeShadow format shadowFactor = texture(shadowMapCube, vec4(ml, compare));
result = texture(shadowMapCube, vec4(ml, compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(s, s, s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(s, s, s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(-s, s, s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(-s, s, s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(s, -s, s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(s, -s, s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(s, s, -s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(s, s, -s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(-s, -s, s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(-s, -s, s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(s, -s, -s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(s, -s, -s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(-s, s, -s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(-s, s, -s), compare)); shadowFactor += texture(shadowMapCube, vec4(ml + vec3(-s, -s, -s), compare));
result += texture(shadowMapCube, vec4(ml + vec3(-s, -s, -s), compare)); shadowFactor /= 9.0;
result /= 9.0;
vec3 result = vec3(shadowFactor);
if (transparent == false) {
vec4 shadowmap_transparent = texture(shadowMapCubeTransparent, ml);
if (shadowmap_transparent.a < compare)
result *= shadowmap_transparent.rgb;
}
return result; return result;
} }
#endif #endif
#ifdef _ShadowMapAtlas #ifdef _ShadowMapAtlas
vec3 PCFCube(samplerCubeShadow shadowMapCube, samplerCube shadowMapCubeTransparent, const vec3 lp, vec3 ml, const float bias, const vec2 lightProj, const vec3 n, const bool transparent) { vec3 PCFCube(samplerCubeShadow shadowMapCube, samplerCube shadowMapCubeTransparent, const vec3 lp, vec3 ml, const float bias, const vec2 lightProj, const vec3 n, const bool transparent) {
const float s = shadowmapCubePcfSize; // TODO: incorrect... const float s = shadowmapCubePcfSize; // TODO: incorrect...
float compare = lpToDepth(lp, lightProj) - bias * 1.5; float compare = lpToDepth(lp, lightProj) - bias * 1.5;