The learning curve towards realistic terrain

Started by
4 comments, last by paic 18 years ago
Alright, I've been experimenting with terrain and have got the typical heightmap texturing terrain going, but now I'm ready to take it a step further and look into making the terrain more and more realistic. I've been seeing all sorts of different terrain methods, in these forums and on other sites, things like ROAM, CLOD, Geoclipmapping, NURBS, etc., but I'm still vague on which one is best for what I'm trying to accomplish. So far, the last two seem best for me, I'm looking for a method that is less CPU-bound (more processing done in GPU i.e. with shaders), that can handle massive terrains, and that can scale down to very high detail (such as NURBS or some other fractal generation). At the risk of sounding like a copy-cat, I'd like to eventually pull off the level of quality what Yann is doing. My problem is knowing what to dive into and where to start. Everything I read about terrain methods are very high-level with lots of math, stuff I know is important but gives me little room to build up my understanding of what they're talking about. Like NURBS, which seems awesome for it's infinite detail, but which is loaded up with complex math that immediately flies way over my head. What would you suggest to be some good resources (online, preferably not book) for getting my foot wet in creating more and more realistic terrain rendering? Can someone give me a better idea of what terrain methods I'm looking for, maybe what the pros and cons of each one are?
Advertisement
My recommendation would be to pick a single technology and keep hammering away on it until you've tried everything out there. For example, you might pick LOD. Don't just implement one LOD algorithm, iterate through 4 or 5 of the more well known algorithms until you find one that works well for your needs. You might feel like you wasted time on the algorithms you implemented but threw away, but you will have gained invaluable experience by going through the process. Plus, you'll be pretty confident that whatever LOD algorithm you kept in the end was really the best that could be done to meet your needs.

I'll give an example of how this works out in practice. About two months ago, I decided to start learning how to master water. My first implementation completely sucked, but I went through about 4 different lighting models and 2 models of how ocean waves propogate and now I have a really nice water simulation. Not only do I have really nice water, but I also gained a ton of knowledge about the wealth of techniques used to render water in production games and am quite well versed in the tradeoffs of those techniques. I wouldn't have that knowledge if I just sat down and tried one technique and left it at that.
KISS. The simplest, most straightforward way to get realistic terrain is to use professional quality textures. Honestly. The best tech in the world will look like shit if the textures aren't worth anything. I know some post of Yann's discusses this. They buy really good textures from some company, and that's why they look incredible. Not that Yann's work isn't amazing, but it's not just the tech that gives it that look.

That said. Geomipmapping is generally regarded as a good choice because of its overall efficiency and ease of implementation. It can be adapted to streaming purposes, which makes it capable of handling large terrains at medium view distances. ROAM 2 and BDAM are the major adaptive algorithms, and are effective for terrain that is more diverse. They work extremely well when the terrain is large and features extremely long view distances. Geoclipmapping is sort of state of the art, and it's probably the optimal solution on Shader 3 hardware. On older stuff, it doesn't do so hot. CLOD is sort of between geomipmaps and the adaptive algorithms, and it sort of does ok at all different sizes. It's not stellar at any particular size, but it's not bad at any particular size either.

NURBs tend to generate really, really smooth terrain unless you use a lot of control points, and it's generally just a real pain to get right. It turns out that you can get away with arbitrarily creating detail from the existing data using some Perlin noise and get fantastic results, without spending much CPU time at all.

Then there's texturing algorithms. Splatting is a common one which burns a ton of fill rate, but manages to look pretty good. (I shudder to wonder what a lot of lighting would do to it, though.) There's brute force methods coupled with streaming, which involves doing a lot of artwork and tech work, but gives you pretty much perfect results. There's also stupidly simple tricks, like multiple textures all tiled at different frequencies, so that you get seemingly random texture detail created. This is a little touchy to pull off, in that you need to choose your source art carefully, but it requires almost no work. A simple 4 line vertex shader and 4 line pixel shader are enough.

I'd suggest you start with geomipmapping. It will run you through most of the standard junk (quadtrees, culling, division, etc) and then do splatting if you want to play with more interesting texturing.
SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
Quote:Original post by Promit
They buy really good textures from some company, and that's why they look incredible.


Marlin I believe. You can find a few free textures of similar quality on the web if you search hard enough, but Marlin's really are very very good.

[size="1"]
Thanks guys, and thanks for the informative list Promit. I may just take cwhite's advice and try each one after all. Knowing from experience that I made the right choice for my needs rather than making an assumption about what is probably best is time-consuming but still very appealing. One thing about NURBS that really got me looking into it was Yann's mention of it's ability to directly model terrain containing overhangs and tunnels, stuff you can't do with a heightmap. I can vaguely see how it might be able to accomplish that, and being able to sculpt that without using lots of 3D models would definitely be nice, I just don't know how it does it and if there are other ways to pull it off with other methods less complex than NURBS. Any thoughts on that? I guess some experimentation is in order...
Just a quick reply about the GeoClipmaping algorithm : Promit said it's good for SM3 cards, but not so much with older hardwares.
Although it's true that this tech really takes advantage of SM3, it still runs perfectly well on older cards (might be a little more on the CPU than with SM3) and is really worth the try.

This topic is closed to new replies.

Advertisement