diff --git a/src/main/resources/assets/voxy/shaders/hiz/blit.fsh b/src/main/resources/assets/voxy/shaders/hiz/blit.fsh index 4fa79954..80b346b4 100644 --- a/src/main/resources/assets/voxy/shaders/hiz/blit.fsh +++ b/src/main/resources/assets/voxy/shaders/hiz/blit.fsh @@ -6,7 +6,7 @@ layout(binding = 0) uniform sampler2D depthTex; void main() { vec4 depths = textureGather(depthTex, uv, 0); // Get depth values from all surrounding texels. - bvec4 cv = lessThanEqual(vec4(0.999999f), depths); + bvec4 cv = lessThanEqual(vec4(0.999999999f), depths); if (any(cv)) {//Patch holes (its very dodgy but should work :tm:, should clamp it to the first 3 levels) depths = mix(vec4(0.0f), depths, cv); } diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl b/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl index fbf78835..8e4b4741 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchical/screenspace.glsl @@ -134,7 +134,7 @@ bool isCulledByHiz() { //TODO: make a path for if the miplevel would result in the textureSampler sampling a size of 1 - miplevel = ceil(miplevel); + miplevel = floor(miplevel)-1; miplevel = clamp(miplevel, 0, 20); if (miplevel >= 10.0f) {//Level 9 or 10// TODO: FIX THIS JANK SHIT @@ -145,18 +145,26 @@ bool isCulledByHiz() { float testAgainst = minBB.z; //the *2.0f-1.0f converts from the 0->1 range to -1->1 range that depth is in (not having this causes tighter bounds, but causes culling issues in caves) - testAgainst = testAgainst*2.0f-1.0f; - + //testAgainst = testAgainst*2.0f-1.0f; + int ml = int(miplevel); + ivec2 msize = textureSize(hizDepthSampler, ml); + ivec2 mxbb = clamp(ivec2(ceil(maxBB.xy*msize)), ivec2(0), msize); + ivec2 mnbb = clamp(ivec2(floor(minBB.xy*msize)), ivec2(0), msize); + float pointSample = 0.0f; + for (int x = mnbb.x; x<=mxbb.x; x++) { + for (int y = mnbb.y; y<=mxbb.y; y++) { + float sp = texelFetch(hizDepthSampler, ivec2(x, y), ml).x; + //sp = mix(sp, pointSample, 1.0f<=sp); + pointSample = max(sp, pointSample); + } + } /* - ivec2 msize = textureSize(hizDepthSampler, int(miplevel)); - ivec2 mxbb = ivec2(maxBB.xy); - ivec2 mnbb = ivec2(minBB.xy);*/ - float pointSample = textureLod(hizDepthSampler, maxBB.xy, miplevel).x; pointSample = max(pointSample, textureLod(hizDepthSampler, vec2(maxBB.x, minBB.y), miplevel).x); pointSample = max(pointSample, textureLod(hizDepthSampler, vec2(minBB.x, maxBB.y), miplevel).x); pointSample = max(pointSample, textureLod(hizDepthSampler, minBB.xy, miplevel).x); + */ //printf("HiZ sample point: (%f,%f)@%f against %f", midpoint.x, midpoint.y, miplevel, minBB.z);