improve chunk outline matching sodium checks

This commit is contained in:
mcrcortex
2025-10-07 13:14:59 +10:00
parent b2d62ec807
commit ab1c8b0f71
2 changed files with 12 additions and 14 deletions

View File

@@ -91,18 +91,18 @@ public class ChunkBoundRenderer {
long ptr = UploadStream.INSTANCE.upload(this.uniformBuffer, 0, 128); long ptr = UploadStream.INSTANCE.upload(this.uniformBuffer, 0, 128);
long matPtr = ptr; ptr += 4*4*4; long matPtr = ptr; ptr += 4*4*4;
final float renderDistance = MinecraftClient.getInstance().options.getClampedViewDistance()*16;//In blocks final float renderDistance = MinecraftClient.getInstance().options.getClampedViewDistance()*16+0.01f;//In blocks
{//This is recomputed to be in chunk section space not worldsection {//This is recomputed to be in chunk section space not worldsection
int sx = MathHelper.floor(viewport.cameraX) >> 4; int sx = MathHelper.floor(viewport.cameraX);
int sy = MathHelper.floor(viewport.cameraY) >> 4; int sy = MathHelper.floor(viewport.cameraY);
int sz = MathHelper.floor(viewport.cameraZ) >> 4; int sz = MathHelper.floor(viewport.cameraZ);
new Vector3i(sx, sy, sz).getToAddress(ptr); ptr += 4*4; new Vector3i(sx, sy, sz).getToAddress(ptr); ptr += 4*4;
var negInnerSec = new Vector3f( var negInnerSec = new Vector3f(
-(float) (viewport.cameraX - (sx << 4)), -(float) (viewport.cameraX - sx),
-(float) (viewport.cameraY - (sy << 4)), -(float) (viewport.cameraY - sy),
-(float) (viewport.cameraZ - (sz << 4))); -(float) (viewport.cameraZ - sz));
viewport.MVP.translate(negInnerSec, new Matrix4f()).getToAddress(matPtr); viewport.MVP.translate(negInnerSec, new Matrix4f()).getToAddress(matPtr);

View File

@@ -15,10 +15,8 @@ ivec3 unpackPos(ivec2 pos) {
} }
bool shouldRender(ivec3 icorner) { bool shouldRender(ivec3 icorner) {
vec3 corner = vec3(icorner*16)+negInnerSec.xyz; vec3 corner = vec3(mix(mix(ivec3(0), icorner-1, lessThan(ivec3(0), icorner-1)), icorner+17, lessThan(icorner+17, ivec3(0))))-negInnerSec.xyz;
//closest point TODO: OPTIMIZE return (corner.x*corner.x + corner.z*corner.z <= negInnerSec.w*negInnerSec.w) && abs(corner.y) <= negInnerSec.w;
corner = mix(mix(vec3(0), corner, lessThan(vec3(0), corner)), corner+16, lessThan(corner+16, vec3(0)));
return (corner.x*corner.x + corner.z*corner.z < negInnerSec.w*negInnerSec.w) && abs(corner.y) < negInnerSec.w;
} }
#ifdef TAA #ifdef TAA
@@ -28,7 +26,7 @@ vec2 getTAA();
void main() { void main() {
uint id = (gl_InstanceID<<5)+gl_BaseInstance+(gl_VertexID>>3); uint id = (gl_InstanceID<<5)+gl_BaseInstance+(gl_VertexID>>3);
ivec3 origin = unpackPos(chunkPos[id]); ivec3 origin = unpackPos(chunkPos[id])*16;
origin -= section.xyz; origin -= section.xyz;
if (!shouldRender(origin)) { if (!shouldRender(origin)) {
@@ -36,11 +34,11 @@ void main() {
return; return;
} }
ivec3 cubeCornerI = ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1); ivec3 cubeCornerI = ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1)*16;
//Expand the y height to be big (will be +- 8192) //Expand the y height to be big (will be +- 8192)
//TODO: make it W.R.T world height and offsets //TODO: make it W.R.T world height and offsets
//cubeCornerI.y = cubeCornerI.y*1024-512; //cubeCornerI.y = cubeCornerI.y*1024-512;
gl_Position = MVP * vec4(vec3(cubeCornerI+origin)*16, 1); gl_Position = MVP * vec4(vec3(cubeCornerI+origin), 1);
gl_Position.z -= 0.0005f; gl_Position.z -= 0.0005f;
#ifdef TAA #ifdef TAA