Chunked LOD vs Tesselated Terrain

Started by
5 comments, last by BenS1 12 years, 5 months ago
I've written a basic DX11 terrain engine using the new tessellation stages, but it currently uses fixed sized patches. Given that my game allows the player to zoom right in or out I need to use a quad tree or similar to vary the size of the patches based on viewing distance...

Most Terrain articles that talk about quadtrees assume that you're using Chunked LOD and not Tessellation. As I looked into it more I started to realise that Chunked LOD (With morphing between the levels) is very simple and gives excellent results with zero popping.

So, what is the advantage of using tessellation over normal Chunked LOD (Including morphing)?

Making the terrain watertight with different sized patches is a pain with tessellation. Chunked LOD simply uses skirts, which whilst doesn't appear to be an elegant solution, its much simpler and gives perfect results.

I believe the main difference between the 2 techniques is the way the terrain morphs between levels. With Chunked LOD every other vertex morphs vertically at the same time as you move between levels. With Tessellation the new verticies emerge from existing veritices and then move horizontally to the final position.

Personally I would have thought that the vertical morphing of Chunked LOD would look less strange than the horizontal mophing you get from tessellation.

Thanks
Ben
Advertisement
Chunked LOD terrain is a bit outdated.
Today's version is GeoMipMapping. I believe GeoClipMapping to be even more efficient, but GeoMipMapping is close enough for the simplicity in implementation given that you already have a chunk system.

Also, LOD is not determined by distance, but by how much space the object occupies on the screen. If you went by distance alone and the player uses a sniper rifle, hilarity will ensue.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

You can either use heightmap based Chunked LoD, which is simple and fast, with some metric for LoD, or tessellate & displace your terrain on GPU given a heightmap.
And alternative is to use vector maps instead of height maps to allow for overhang and such, check Halo Reach presentation about that.

In Shogun 2, I chose Chunked LoD to replace geomipmapping.
Keep in mind you might pick up a different solution given your requirements...
-* So many things to do, so little time to spend. *-
Sure I'm aware of GeoMipMapping and ClipMapping but I fail to see how they are in any way better than Chunked LOD. Chunked LOD is both simple and gives perfect transitions between detail levels.

Thanks
Ben

PS. Apologies if my response seems a bit 'short', I've only got a minute between meetings.

Chunked LOD terrain is a bit outdated.
Today's version is GeoMipMapping


Has hardware changed in some way that made GMM worthwhile again? I haven't really kept up with this stuff since ChunkedLOD took over from GMM as the method du jour.

That is:

GMM - 2000
ChunkedLOD - 2002
GeoClipMaps - 2004

IIRC the error metric used in the GMM paper is much rougher than that in ChunkedLOD. The LOD models GMM (and I'm guessing GeoClipMaps) generates are nowhere near as good as ChunkedLOD - this is because of the arbitrary sampling used to select vertices at each LOD, whereas ChunkedLOD actually uses the potential screen space error per vertex and selects the most important vertices, IIRC.

But there's no reason not to mix and match. How about ChunkedLOD with adaptive tessellation to refine silhouette edges?
[size="1"]

Making the terrain watertight with different sized patches is a pain with tessellation.
[/quote]

I do not understand the problem? Can't you make a grid of quad patches. Tessellate each patch based on some metric (distance/screenspace coverage). Also be sure to tessellate each edge based only on edge properties so it is watertight.
-----Quat


Making the terrain watertight with different sized patches is a pain with tessellation.


I do not understand the problem? Can't you make a grid of quad patches. Tessellate each patch based on some metric (distance/screenspace coverage). Also be sure to tessellate each edge based only on edge properties so it is watertight.
[/quote]

There are 2 problems:
1. If you have an edge A -> B and tessellate it with a factor such as 4.3 and then on the neighbouring tile that edge becomes B -> A (Due to winding order) and tesselate that with a factor or 4.3 then its no longer watertight. You have to either stick with integer tesselation factors at the edges (In which case you will get popping when you change values), or you have to do tricks to the winding order to ensure the edges are always tesellated in the same order.

2. The other problem is how do you know what your neighbouring tiles size is? A single tile of size 64x64 could have, on a single side, multiple neighbours of different sized tiles, e.g. four tiles of sizes 32, 16, 8, 8.

Thanks
Ben

Edit: Although I guess you could just use Skirts, just like with Chunked LOD.

This topic is closed to new replies.

Advertisement