Archived

This topic is now archived and is closed to further replies.

WebsiteWill

Terrain creating techniques and other ??s

Recommended Posts

Ok. Well among one of the many things I like to dabble with in design is terrain rendering. I have firmly laid out a few things that I would desire in a terrain engine. 1) Large terrains (though broken up into zones. I don''t need one solid piece of land thought that would be nice. Just not necessary for this project. 2) Needs to allow for overhands. 3) Needs to support 6 degrees of freedom. Movement allowed should be in x,y and z dimension. 3) Adaptive level of detail. Those alone pretty much lead me to my method of implementation. For this I am tentatively planning on CLOD as described in this paper. [link]http://cvs.sourceforge.net/viewcvs.py/*checkout*/tu-testbed/tu-testbed/docs/sig-notes.pdf?rev=HEAD[/link] My current thoughts are that I will need a 3D structure to hold the data meaning that I will need an oct-tree and not a quad-tree because I want to allow movement in 3 dimensions and have overhangs. I''m thinking of an implementation similar to YannL''s for this. Main question is how to generate the actual terrain. Obviously heightmaps or fractal equations would be the easiest but these only generate non-overhang terrains. One work around I can think of would be to create extra models of caves and cliffs to add in and model them so that they blend in with the terrain at the connections. However, I think matching textures and such would honder this method. My other option is to create these terrains (zones) inside of 3D Studio and then extract the vertex information and feed that into the engine. I''ve used converters for the 3DS files and they work well enough for getting at the vertex information but I''m wondering if this is a good method to take. It seems like the most logical since considering 1) the style of landscape I want and 2) the fact that I didn''t spend all this money for Max just to let it sit on the shelf Also, on a side note, I gather that one of the most difficult things in regards to LOD algorithms is avoiding tears in the terrain due to different heights at block boundaries. How would something like this work. If creating the models in 3D Studio or similar I would be creating either a low poly model that would be tesselated by the engine or modeling a high poly model that would be detesselated by the engine. I''m thinking the former for disk storage. So, what if you model the terrain and create a set number of polygons that MUST occurr at the block boundaries. Have these remain static. Then in your algorithm for CLOD you can have it check and see if there is an opposing polygon. If not then you know this is an edge polygon/vertex and as such do not alter it''s position thereby leaving the edge of the block completely untouched. The rest of the block can be adapted as necessary. I''m planning to test this ouw in about a week or so after I get a decent design for the terrain engine down into pseudocode. I''m wondering about any thoughts you guys might have on this. Seems like a good idea from this side of it so I''m wondering if it''s been done yet and how''d it turn out. I''m definitely going with CLOD though as that seems to be the defacto method at this time and I have to go somewhere. Besides, I''ve found better examples and algos for this than I have for ROAM and other methods. Thoughts? Thanks, Webby

Share this post


Link to post
Share on other sites
Maybe the previous was a bit much to digest. Let me rephrase it into clearer more managable chunks.

Main problem. How to create the terrain? Height maps are out from what I gather due to their lack of overhangs. This leads to 1) creating the mesh and doing some preprocessing on it for the renderer or 2) modeling a basis for the terrain in 3DS and then applying some fractal to it after to generate that more natural terrain look.

I''ve decided to follow YannLs methods on this if I can figure out how to implement them. I''m having trouble visualizing what''s happening though. He is using what I think is a 2D structure (ADT tree) because he seems to only be splitting it on a given plane. So, how does this work for worlds with tall hills with caves or similar structures? I can''t envision how this works. Maybe some images out there that show wireframe terrains and how they are divided?

If I do model the terrain in 3DS and export it do I 1) model the entire terrain zone (say 1-2km square) and then allow the terrain software break it up as necessary for rendering? Or do I actually create different model blocks in 3DS and feed them into the renderer?

Also, the preprocessing into the ADT tree is done when? When the terrain is loaded into memory? Or are parts of the terrain loaded into memory as needed and the entire ADT tree regenerated with the necessary vertex information for every frame?

YannL, do you guys have a website with any info on it? I''ve done a search here with your name and it only gives hits for posts where someone specifically mentions your name. Don''t think there is a way to search by poster is there?

Thanks for any help understanding this,
Webby

Share this post


Link to post
Share on other sites
I hear that modern hardware is better suited to upgraded techniques, such as geomipmapping. I''ve also seen ROAM 2.0, but I don''t think the algorithm is quite done yet. Well, at least I didn''t understand the website that was up about it.

Share this post


Link to post
Share on other sites
ROAM_2 site http://www.cognigraph.com/ROAM_homepage/ROAM2/
General site on all things related to LOD
http://www.vterrain.org/LOD/Papers/index.html

Some very good information. Some good alogrithms. Some good implementations. ALL HEIGHTMAPS! Nothing that shows overhangs or allows Indoor/Outdoor terrain.

Lots of different techniques. Many of them impressive for what they show but none of them seem quite adapted to what I am looking for. That or I don''t quite know what I''m looking for :/

Webby

Share this post


Link to post
Share on other sites
I believe what Yann does with his engine is:
1. Create Terrain in Maya/3DS as parametrical surfaces.
2. Save surface control points.
3. Tesselate surface and add fractal details at load-time(?).

To do the tesselation only once, you could try saving the resulting surface to disk after it was created.

gah, i really should find some time to implement a working version of this myself :/

Share this post


Link to post
Share on other sites
quote:
Original post by Eternal
I believe what Yann does with his engine is:
1. Create Terrain in Maya/3DS as parametrical surfaces.
2. Save surface control points.
3. Tesselate surface and add fractal details at load-time(?).


Pretty much, yes. But I tesselate the terrain on the fly, not at load time. Means, that the terrain itself will be kept in its parametric form until it is actually sent to the 3D card. It will be tesselated in the very last second before rendering (the mesh will be cached, obviously, to avoid retesselation every frame). This allows for very nice LOD schemes, and reduces memory consumption. Also, if future 3D cards will be able to do the tesselation on the GPU, the system will be very easy to adapt.

After the parametric tesselation, I add high frequency, low amplitude fractal noise to the terrain. That gives the realistic and chaotic touch. It''s just an additional pass over the tesselated geometry, with a controlled seeded PRNG. I use Perlin noise as noise function, but more ''fractal'' methods such as fBm are also possible. Just make sure that they can be seeded. The resulting mesh is sent to the 3D card as standard indexed and stripped trimesh.

quote:

I''ve decided to follow YannLs methods on this if I can figure out how to implement them. I''m having trouble visualizing what''s happening though. He is using what I think is a 2D structure (ADT tree) because he seems to only be splitting it on a given plane. So, how does this work for worlds with tall hills with caves or similar structures?


I''m using an ABT (adaptive binary tree) for my terrain - the same spatial structure I use for everything else in the engine. That''s basically an adaptive form of a loose AABB tree. There are several threads on this forum that explain them.

The tree does not contain terrain geometry (unless it happens to be cached), but a very simple structure describing the terrain patch: the parametric control points from Max/Maya, the fractal seeds, frequency and amplitude, and various additional stuff (optional fractal control maps).

The creation itself is very straightforward: the artists create the basic terrain shape using Max/Maya. It is stored as NURBS control points. The NURBS density can vary from one part of the terrain to the other, ie. the artist puts as many surfaces as needed to create the desired terrain features. For example, smooth valleys are hills will contain very few but large NURBS. Complex rock formations, river beds, etc, contain very dense and small NURBS. The fractal density of the noise added in realtime will also vary depending on the area. All that is artist controlled, assisted by a little fractal creation plugin. Satellite heightmaps can also be used with that system, if the parametric surfaces are matched to the heightmap. This is also assisted by the plugin.

I know that this approach is very different to the usual fractal heightmaps. But it looks good, allows any terrain feature you want without limitations, has an inherent LOD system, and allows a direct control over how your terrain will look like. On the other hand, it takes (much) more performance than a simple heightmap.

quote:

YannL, do you guys have a website with any info on it?


Not really, unless you want screenhots. But if you have specific questions, feel free to ask.

Share this post


Link to post
Share on other sites