So I was thinking, LoD saves memory usage, not CPU usage. Therefore, implementing a traditional LoD on Minecraft will not help much.
Rendering on Minecraft is so slow because:
1. It is written in Java. Java is great for modding and servers, but not good for graphics.
2. Minecraft always renders the entire chunk. The world gen of Minecraft allows floating blocks to exist, therefore rendering only the surface of the terrain is not enough. There is no "surface" in Minecraft.
We already have Nova rendering engine in progress that attempts to replace the current horrible engine with a Vulkan-based renderer. However, what about LoD?
As I see it, there is no way to implement a CPU-efficient LoD on top of Minecraft's default rendering engine. u/Draegur's solution will still require the CPU to calculate every distant chunk. Besides, that technique will work for far LoD, but not near-LoD.
The only solution is to tweak the chunk generation algorithm itself to remove the possibility of (or at least heavily discourage) generation of floating terrain. Then we can further modify the chunk generation algorithm to calculate only the surface blocks for anything beyond 9 chunks (simulation limit).
Maybe we can also modify the chunkgen algo so that a specific byte of the seed will be able to tell us the average height of a chunk when fed into an equation. Another equation will give us the biome type of that chunk.Then we can use u/Draegur's technique to generate a far LoD from that data. These two equations will only run one per chunk. When it is time to generate the complete chunk as player gets closer to it, the chunkgen algo will always respect the average value produced by the average height equation.
But what happens when a player creates a floating structure? That will cause no problem, because the player has to be present in that chunk while doing any such act. LoD of an active chunk can easily be kept updated in real-time. (And if the player uses commands to generate blocks far away.... do we even need support for succh niche cases?)
Too extreme of a solution? I don't see any other way. Pls share your thoughts.