High detail in large scale terrain

Started by
9 comments, last by ndhb 16 years, 1 month ago
Hi all, I am working on a terrain system at the moment and the problem I am trying to solve is getting details into a very large terrain. The terrain is generated using heightmap (15K by 15K pixels) and at that size even using 8 bits would require a grayscale image that is 200+ meg. Wondering if anyone know of methods to either get the high level of details into the terrain without resorting to huge heightmap? Or do I simply have to look for ways to compress the grayscale image?
Advertisement
How about jpeg-compression?
| Stein Nygård - http://steinware.dk |
8 bit precision on the heightmap is rather low when considering large heightmaps. I suggest you search for "out-of-core terrain techniques" as compression will only get you so far. Reading the paper on http://www.terrain.dk/ might give you some ideas too.
stitch multiple smaller heightmaps together?
Roger that, lets run like hell!
Quote:Original post by ndhb
8 bit precision on the heightmap is rather low when considering large heightmaps. I suggest you search for "out-of-core terrain techniques" as compression will only get you so far. Reading the paper on http://www.terrain.dk/ might give you some ideas too.


Yes, 8 bits is rather low by today's standard. Ideally we want to be looking at 16-24 bits which means even bigger height map file.

However, we also want to be able to generate terrain of real world size say 10km by 10km or even bigger. While there are a lot of papers on how to render the mesh, there seems to be little reference on the artist creation/modeling process. Here I am referring to how to setup an environment where artist can create mountains, cliff and such. At the moment, we use a 10K by 10K heightmap that is almost 1m per pixel. Smaller file means user cannot create finer detail (e.g. 5K by 5K will limit user to creating detail that are at least 2m in size).
Quote:Original post by Interesting Dave
stitch multiple smaller heightmaps together?


Hm.. that just means we have multiple files where the total size of the files is the same as having 1 big file? If we used 16-24 bits for 15K by 15K we can easily be looking 600+ megs without compression just for height maps.

Perhaps I am looking for a subdivision surface kind of technology for images, where we can have the details just where we need it. It is likely that only a certain region in the entire terrain requires fine details (maybe mountains and such) whereas other regions are flat ground with no detail. A regular simple height map will have a lot of pixels wasted on the flat ground.
Quote:Original post by tts1980
Hm.. that just means we have multiple files where the total size of the files is the same as having 1 big file? If we used 16-24 bits for 15K by 15K we can easily be looking 600+ megs without compression just for height maps.

You will need to do height map compression, anyway you look at it. There are some very interesting methods for compressing height maps (as opposed to normal images), you might want to look at a few, for instance this one from Hoppe, who claims to have achieved 100x compression.

Quote:Perhaps I am looking for a subdivision surface kind of technology for images, where we can have the details just where we need it. It is likely that only a certain region in the entire terrain requires fine details (maybe mountains and such) whereas other regions are flat ground with no detail. A regular simple height map will have a lot of pixels wasted on the flat ground.

It may be a naive approach, but it sounds like even simple compression such as RLE would pretty much negate this.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Quote:
Perhaps I am looking for a subdivision surface kind of technology for images, where we can have the details just where we need it. It is likely that only a


Yes, indeed but unfortunately I don't think such a technology exists par se as images always have a fixed resolution. I can think of two paths to explore.

One is to accept that images may be almost arbitrarily large and look for a practical out-of-core solution (google terms suchs as Clipmap, Megatexture, Virtual Texture). These support very large but fixed resolutions, take note of the section "High Resolution Insets" in Tanner's classical paper "The Clipmap: A Virtual Mipmap". Insets would allow you to increase the resolution at certain interesting areas (e.g. mountains).

Another path is to work at increasing the geometry details after converting the heightmap to geometry. Classical geometry LOD papers discusses this (take a look at LOD papers on www.vterrain.org/LOD). However, most of these don't discuss the texturing aspect in depth.

There are at least two ways of getting details into the terrain. One is to rely on texturing and another is to rely on geometry. In most cases, a combination is what we really want to achieve a satisfactory result. Those approaches that work on both aspects at the same time are the most interesting (e.g. Geometry Clipmaps, as mentioned by Swiftcoder).

You also need to consider if you want full control of all details or can settle with some being supplied algorithmically. In the latter case, look out for terms such as procedural textures, noise algorithms. Maybe you want a combination where artists can work on a coarse detail level and the system supplies the fine detail level with procedural textures/noise (for instance, read http://wwwcg.in.tum.de/Research/data/Publications/vmv06.pdf).

Quote:
It may be a naive approach, but it sounds like even simple compression such as RLE would pretty much negate this.


Yes, RLE would obviously help but only after some quantization. Without quantization, RLE wouldn't achieve much on images with 16 or 24 bits precision. However, quantization decreases the amount of detail and is the opposite of what we try to do. Therefore the artists probably need to work on an uncompressed model of the terrain in the editing stage and as far as I understand tts1980, this is the problem to solve without trashing system and gpu memory.
If you are doing the terrain displacement on the fly (as with vertex textures) you can combine a base heightmap and tiled detail heightmaps, or even perlin noise in realtime to make infinite detail heightmaps.

Also, the main article on GPU-based terrain by Hoppe et al decribes a method to synthesize terrain from multiple heightmap datums (geometry clip maps).

Going forward, I cant imagaine a decent large-scale terrain solution *without* vertex textures frankly--the benefits are too great across the board to be ignored.

This topic is closed to new replies.

Advertisement