Terrains with overhangs?

Started by
19 comments, last by s_p_oneil 18 years, 10 months ago
Quote:Original post by davepermen
the only reason why heightmaps are such muchloved is because of their simplicity: anyone can create one with mspaint.exe to get something up and working.

Out of curiosity, how does the increased amount of data that needs to be loaded (3d coordinates for surface control points vs pretty much 1d data for heightmap) affect performance for applications which need to chew through large quantities of terrain..?
Advertisement
Quote:
Out of curiosity, how does the increased amount of data that needs to be loaded (3d coordinates for surface control points vs pretty much 1d data for heightmap) affect performance for applications which need to chew through large quantities of terrain..?

Depends if you use high-res displacement maps (1D) with low-res control points (3D) or not. If you do then you're effectively using same memory as a heightfield (a little bit more actually). Unless you stream the high-res 3D data from disk both approaches would need some run-time caching for the GPU (need to convert heightfield to 3d points for GPU). For caching, the control points approach takes more CPU to subdivide the control mesh and perturb along surface normal using displacement map, but since it's amortized over many frames it's ok.
Quote:
I'm assumming that by high-order you mean Bezier patches?

I think he means any algorithm that generates a higher resolution smooth surface (or maybe doesn't even have to be smooth) from lower resolution control points (eg, bezier, b-spline, subdivision surface, etc).
I've been doing a little bit of preliminary work on this myself and I've been wondering how to create these bezierpatches (that's what I'm starting with, might move to other surfaces later). I'm not certain what kind of support modelling packages have for this (and since I don't have the money to blow on them it's a bit hard to test this). I've been contemplating making my own editor, but tbh, I'd rather not if it can be avoided.

I did terrain with overhangs a few years ago, the site still exists:

www.iehovah.com

It is 1-bit voxel based, very small datasets are required. The voxel data is converted to polygons and rendered with multiple LOD's.

The demo works best on GeForce cards, but I heard from people it doesn't run well on ATI.

I cannot work on it any more because I now work at a Dutch game developer company. Not much spare time left like in those days...

Peter
Does anyone know of any good tutorials on using high-order surfaces besides drawing a simple patch?
//------------------------------------------------------------------------------------------------------The great logician Bertrand Russell once claimed that he could prove anything if given that 1+1=1. So one day, some fool asked him, "Ok. Prove that you're the Pope." He thought for a while and proclaimed, "I am one. The Pope is one. Therefore, the Pope and I are one."
Quote:Original post by Soiled
I use a Catmull-Clark (quad-based) subdivision surface to get arbitrary topology for terrain. It's basically b-splines extended to arbitrary topology.
I then impose a few extra constraints to make it a little easier to generate - basically starts out as a heightfield mesh with a sample spacing of 4 metres - then only allow extrude quads, join quads, etc to get cliffs, overhangs, arches, tunnels, etc but no subdividing of quads into more control points as this can introduce control triangles and also complicates texturing and terrain LOD - however this does limit how fine you can create structures to about 4 metres.

Because it's quad-based you can adapt quad-type terrain LOD algorithms to it. Eg, something like quad-tree chunked LOD need to change quad-tree to something like an ABT tree.


I'd be very interested to know how you are allowing the creation of tunnels. I looked into this before but gave up as it got pretty complicated. However, I still wanted caves and tunnels so I went with a voxel based approach instead (screenie)

Originally I was using a grid of catmull-rom surfaces.
I was reading this article on filpcode, and it said voxels were great as long as there were no overhangs. Also, does anyone know of any other articles on voxels. It seems once you get away from heightmaps, there is very little information regarding alternatives. Some old source code here and there, but not much besides that.

[Edited by - Sfpiano on May 23, 2005 9:12:10 PM]
//------------------------------------------------------------------------------------------------------The great logician Bertrand Russell once claimed that he could prove anything if given that 1+1=1. So one day, some fool asked him, "Ok. Prove that you're the Pope." He thought for a while and proclaimed, "I am one. The Pope is one. Therefore, the Pope and I are one."
Quote:Original post by Yann L
Eeek, heightmaps ! I see that the anti-heightmap propaganda I used to cover these forums in is starting to wear off... Time for a reinforcement sometime, I guess [grin]

Seriously though, you should consider replacing the heightmap by a high order surface approach. The results are very pleasing, and you can do whatever you want with the topography.
I was thinking when I first read this thread "If Yann was about he'd have something scathing to say about heightmaps!" I actually think they still have a lot of potential, but if you want complex terrain it probably is better to use something more powerful rather than bodge it. For instance Erik Rufelt's technique allows only one cave - what if you want a cliff-face with many caves at different heights above each other?

Quote:Original post by averisk
I'd be very interested to know how you are allowing the creation of tunnels. I looked into this before but gave up as it got pretty complicated.

The artist does this. They could extrude a quad face of the control mesh into the side of a hill to form a cave (the extrusion retains original quad and creates 4 new quads that from the cave walls, floor and ceiling). You could keep extruding the original quad until you reach the other side of the hill and then merge it with a quad face belonging to the other side of the hill and then remove both quads to form a tunnel.

Quote:Original post by averisk
However, I still wanted caves and tunnels so I went with a voxel based approach instead (screenie)

Originally I was using a grid of catmull-rom surfaces.

And you've got some neat LOD going on there too... nice !
Quote:Original post by Soiled
The artist does this. They could extrude a quad face of the control mesh into the side of a hill to form a cave (the extrusion retains original quad and creates 4 new quads that from the cave walls, floor and ceiling). You could keep extruding the original quad until you reach the other side of the hill and then merge it with a quad face belonging to the other side of the hill and then remove both quads to form a tunnel.


Like I said I was using catmull-rom patches, which required that I give each patch eight neighbours (up, down, right, left, top right, etc). So I could not simply extrude a quad in the same way. The only solution I could come up with was to use slope constraints, but it seemed too messy so I switched to voxels

I wish I would have known about catmull-clark subdivision, which apparently allows something like this

Btw, thanks for the explanation

Quote:Original post by Soiled
Quote:Original post by averisk
However, I still wanted caves and tunnels so I went with a voxel based approach instead (screenie)

Originally I was using a grid of catmull-rom surfaces.

And you've got some neat LOD going on there too... nice !


Thanks :)
But actually there isn't any LOD yet--although I've got a bit of a start on it. I've found that texturing and LOD can be tricky when you're no longer working with surfaces directly

This topic is closed to new replies.

Advertisement