diff options
author | makamys <makamys@outlook.com> | 2022-06-30 10:47:35 +0200 |
---|---|---|
committer | makamys <makamys@outlook.com> | 2022-06-30 10:47:35 +0200 |
commit | 9b0de07475bf4b6d5563a936ed113caeca54206a (patch) | |
tree | 0db53c54579cdf05603560f4007d6ce15af15817 /src/main/java/makamys/neodymium | |
parent | 20782db23be14111d11ac60ae5d4b5a1d7853bb7 (diff) | |
download | Neodymium-9b0de07475bf4b6d5563a936ed113caeca54206a.tar.gz Neodymium-9b0de07475bf4b6d5563a936ed113caeca54206a.tar.bz2 Neodymium-9b0de07475bf4b6d5563a936ed113caeca54206a.zip |
Add fog occlusion
Reduced mesh count from 2529 to 2185 on Normal render distance in one scene
Diffstat (limited to 'src/main/java/makamys/neodymium')
-rw-r--r-- | src/main/java/makamys/neodymium/Config.java | 2 | ||||
-rw-r--r-- | src/main/java/makamys/neodymium/renderer/NeoRenderer.java | 21 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/main/java/makamys/neodymium/Config.java b/src/main/java/makamys/neodymium/Config.java index 8594dd5..8ac1ce3 100644 --- a/src/main/java/makamys/neodymium/Config.java +++ b/src/main/java/makamys/neodymium/Config.java @@ -44,6 +44,8 @@ public class Config { public static boolean shortUV; @ConfigInt(cat="render", def=1, min=1, max=Integer.MAX_VALUE, com="Interval (in frames) between the sorting of transparent meshes. Increasing this will reduce CPU usage, but also increase the likelyhood of graphical artifacts appearing when transparent chunks are loaded.") public static int sortFrequency; + @ConfigBoolean(cat="render", def=true, com="Don't render meshes that are shrouded in fog. OptiFine also does this when fog is turned on, this setting makes Neodymium follow suit.") + public static boolean fogOcclusion; @NeedsReload @ConfigInt(cat="render", def=512, min=1, max=Integer.MAX_VALUE, com="VRAM buffer size (MB). 512 seems to be a good value on Normal render distance. Increase this if you encounter warnings about the VRAM getting full. Does not affect RAM usage.") diff --git a/src/main/java/makamys/neodymium/renderer/NeoRenderer.java b/src/main/java/makamys/neodymium/renderer/NeoRenderer.java index 1a58d9c..b6031a5 100644 --- a/src/main/java/makamys/neodymium/renderer/NeoRenderer.java +++ b/src/main/java/makamys/neodymium/renderer/NeoRenderer.java @@ -188,7 +188,7 @@ public class NeoRenderer { piFirst[i].limit(MAX_MESHES); piCount[i].limit(MAX_MESHES); for(Mesh mesh : sentMeshes[i]) { - if(mesh.visible && (Config.maxMeshesPerFrame == -1 || renderedMeshes < Config.maxMeshesPerFrame)) { + if(shouldRenderMesh(mesh)) { int meshes = mesh.writeToIndexBuffer(piFirst[i], piCount[i], eyePosXTDiv, eyePosYTDiv, eyePosZTDiv); renderedMeshes += meshes; for(int j = piCount[i].position() - meshes; j < piCount[i].position(); j++) { @@ -201,6 +201,15 @@ public class NeoRenderer { } } + private boolean shouldRenderMesh(Mesh mesh) { + if(mesh.visible && (Config.maxMeshesPerFrame == -1 || renderedMeshes < Config.maxMeshesPerFrame)) { + if(!Config.renderFog || !Config.fogOcclusion || mesh.distSq(eyePosX / 16.0, mesh.y + 0.5, eyePosZ / 16.0) < Math.pow((fogStartEnd.get(1)) / 16.0 + 1.0, 2)) { + return true; + } + } + return false; + } + private void mainLoop() { if(Minecraft.getMinecraft().playerController.netClientHandler.doneLoadingTerrain) { for(Iterator<Entry<ChunkCoordIntPair, NeoRegion>> it = loadedRegionsMap.entrySet().iterator(); it.hasNext();) { @@ -300,13 +309,9 @@ public class NeoRenderer { glGetFloat(GL_FOG_COLOR, fogColorBuf); fogColorBuf.limit(4); - if(Config.renderFog) { - fogStartEnd.put(glGetFloat(GL_FOG_START)); - fogStartEnd.put(glGetFloat(GL_FOG_END)); - } else { - fogStartEnd.put(-1); - fogStartEnd.put(-1); - } + fogStartEnd.put(glGetFloat(GL_FOG_START)); + fogStartEnd.put(glGetFloat(GL_FOG_END)); + fogStartEnd.flip(); } |