PorkStudios / FarPlaneTwo

Level-of-Detail renderer in Minecraft. Allows for render distances of millions of blocks. (Cubic Chunks-compatible) (WIP)
https://daporkchop.net/
Other
1.45k stars 52 forks source link

Several ideas to significantly improve the mod. #208

Open Terraman2 opened 2 months ago

Terraman2 commented 2 months ago

1: Darken diagonal polygons & add patterns such as checkers & lines to mimic the darkened & rough way the blocks they represent would look in full detail. The amount darker should be determined by how diagonal the polygon is, & the pattern should be determined by the specific angle of the polygon. For very large diagonal polygons, the look should be mimicked imprecisely by just darkening them without adding a pattern.

2: Temporal LOD. Other than the level of detail changing, LOD stuff only visually changes by moving relative to you when you move & things that are further away move slower as you move around. So if something is really far away, only rendering it again when you move a certain distance instead of every single frame wouldn't make it look noticeably difference. The great thing about temporal LOD is that while normal LOD makes exponentially increasing render distance only worsen performance linearly, if you combine it with temporal LOD, then each time the render distance is doubled worsens performance half as much as the last.

3: Better vertical LOD zones. If you're really high up, everything that's low-down should be as low detail as it would be if the vertical distance was removed & added to its horizontal distance. But for this to work properly, it would have to be possible to have multiple types of LOD at the same horizontal position, for example if you're in a floating city 1 million blocks up, then the ground below would have to be biome LOD, but the floating city would have to be normal LOD.

4: Cull all the biome LODs when you're close to the ground because you can't see them from there at all.

5: Smooth biome LOD colors. Generate the biome LODs in much higher detail & then shrink them. That way they generally look much better, probably without affecting performance very much, & it solves the problem where if you look at them from extremely far away, they end up just looking like a bunch of noise that vaguely resembles a Minecraft world. If generating the biome LODs currently involves taking a smooth biome value & snapping it into place at some point, then also skip snapping it into place, because all that does is make the biome LODs less smooth.

6: (Requires idea 5 being implemented first) 1 more type of LOD zone, a type beyond biome LODs where all of it is just 1 huge square that's the average color of a Minecraft world. When you're high enough up to look at the entire world, this would accurately represent the true look of the world, because at that height every pixel of the screen contains thousands of biomes, so realistically all of that would just blend together into an extremely average biome & make everything look the same.

NotStirred commented 2 months ago

a few of these are specific to heightmap mode which has been removed, voxel doesn't suffer from as many

Terraman2 commented 2 months ago

Idea 7: With these improvements, when you're really high up, the performance would be extremely good due to both normal LOD & temporal LOD being applied to almost everything, but the really far away stuff would no longer be compressed & partially obscured by being close to the horizon, so its low level of detail would be more noticeable. It would probably be best to take advantage of the better performance to increase the detail, by increasing the level of detail of far away stuff when there's less stuff nearby. Especially because with the temporal LOD making far away level of detail have a much lower effect on performance, the far away stuff could be really high detail for how far away it is.

Terraman2 commented 2 months ago

a few of these are specific to heightmap mode which has been removed, voxel doesn't suffer from as many

Why was heightmap mode removed?

CursedFlames commented 2 months ago

Why was heightmap mode removed?

As far as I'm aware, because there's minimal/no reason to use it over voxel mode, and maintaining both modes made the codebase substantially more complex.

NotStirred commented 2 months ago

Additionally it was basically pointless and never looked good

Terraman2 commented 2 months ago

Idea 1 but better: The patterns would always be positioned realistically, & the polygons would have textures that not only contain the patterns, but also contain multiple different colors, so that multiple types of blocks &/or multiple sides of the same type of blocks can be shown with just 1 polygon. & preferably the colors of the pixels should be mixes of multiple so blocks can be represented in even more detail with just 1 polygon & not much worse performance.

Terraman2 commented 2 months ago

a few of these are specific to heightmap mode which has been removed, voxel doesn't suffer from as many

Which 1s? I don't think any of them are. Maybe you misunderstood some of them.

NotStirred commented 2 months ago

3 is irrelevant with voxel 4/5. there aren't really "biome LODs", everything is terrain+biome (this is much more obvious with a big mountain cwg preset)

  1. why?
DaMatrix commented 2 months ago

What NotStirred said applies to 3,4,5,6.

2 is certainly a possibility in theory, but would likely not provide much of an advantage in practice. Even when terrain appears static, there are actually plenty of things which change all the time such as animated textures and the sky light map. In most "regular" scenes animated textures wouldn't be too much of an issue (most of the time in the overworld, the only animated texture visible in the distance is water, which hardly changes much - but with a custom resource pack, or with large groups of animated blocks (such as nether lava) you'd basically have to do a full redraw every at least every client tick anyway). The lightmap raises similar concerns - you'd have to redraw the entire scene fairly regularly to keep the lighting in sync with vanilla terrain, which would give fairly large bumps in performance.

And even with that said, there is one major thing which causes all terrain, even distant terrain, to change all the time - the camera projection. In a perspective projection, geometry on the sides of the screen gets warped significantly compared to geometry near the center, and this warping changes every time the camera rotates. The only reasonable way I can think of to prerender distant terrain would be rendering a full skybox onto a very high-res cubemap texture, and then drawing a full-screen quad which samples it (which is going to be painfully slow to update, won't be compatible with frustum culling, and eat tons of VRAM).

Terraman2 commented 2 months ago

3 is irrelevant with voxel 4/5. there aren't really "biome LODs", everything is terrain+biome (this is much more obvious with a big mountain cwg preset) 6. why?

Even if they aren't biome LODs, you can still make the colors smooth, & the point in idea 6 is because it would help a lot with having ridiculously far render distance, would probably be very easy to implement, & would theoretically allow you to literally have infinite render distance with great performance.

NotStirred commented 2 months ago

Generate the biome LODs in much higher detail & then shrink them

just isn't feasible, and defeats the entire point of lods in the first place smoothing sure, but not in this way

6, I just don't see the point in having an "infinite render distance" if it looks infinitely bad this is the exact reason heightmap was removed, have a pork quote: "heightmap mode is not really useful for actual gameplay aside from making youtube clickbait"

Terraman2 commented 2 months ago

Generate the biome LODs in much higher detail & then shrink them

just isn't feasible, and defeats the entire point of lods in the first place smoothing sure, but not in this way

6, I just don't see the point in having an "infinite render distance" if it looks infinitely bad this is the exact reason heightmap was removed, have a pork quote: "heightmap mode is not really useful for actual gameplay aside from making youtube clickbait"

It looks infinitely "bad", but it's still great because at that distance any level of detail looks basically the same as any other level of detail, including infinitely low.