Automatically generated landscape/caves?
I'm a big fan of exploration type games (yay Myst), but they all have one problem: eventually you run out of stuff to explore. So lately I have been wondering, what's the feasibility of automatically generated 3d worlds? I tried doing some research, but it seems like most of the existing systems: 1) only generate a terrain heightmap (no caves). 2) focus on algorithms that are fast enough to do while playing. (generally they don't run full-blown simulations) I'm more interested in a system that: 1) runs a simulation that takes hours, days or even weeks to finish. And possibly uses many gigs of temporary storage in the process. 2) generates caves as well as the surface terrain. 3) creates other computationally difficult details, like water flowing down into pools, algae growing on walls, etc. 4) maybe even simulates little creatures running around, creating details that make the place seem like it's been inhabited. Does anyone know of any existing projects/resources on something like this? Or have any thoughts? Thanks :)
I always thought that a random map generator for a game like CounterStrike would be cool, since there is a barrier to entry, sort of, for new players who haven't memorized every map exploit, etc. There is research on this topic if you dig for it.
One thing that occurred to me when thinking of random maps (particularly involving buildings and indoor scenes) was that it could be handled by a "grammar" that describes valid scenes. Ex... This type of level can have these types of buildings, which can have this many rooms, and these sorts of items can be found in these types of room but only if X or Y... etc.
Terrain would probably work differently... Maybe you should generate the heightmap first, then create "geotypical" foliage and geographic features based on the heightmap. If your heightmap has a valley, maybe your system should look into putting a river in it. If it has hills and cliffs, maybe some nice caves.
Once you generate the more generalized details, you would dig down and generate the finer details... your algae on the cave walls, the appropriate plants in shallow water, etc...
One thing that occurred to me when thinking of random maps (particularly involving buildings and indoor scenes) was that it could be handled by a "grammar" that describes valid scenes. Ex... This type of level can have these types of buildings, which can have this many rooms, and these sorts of items can be found in these types of room but only if X or Y... etc.
Terrain would probably work differently... Maybe you should generate the heightmap first, then create "geotypical" foliage and geographic features based on the heightmap. If your heightmap has a valley, maybe your system should look into putting a river in it. If it has hills and cliffs, maybe some nice caves.
Once you generate the more generalized details, you would dig down and generate the finer details... your algae on the cave walls, the appropriate plants in shallow water, etc...
There's a developing(?) field of procedurally generating content. The basic premise is to make up "grammars" for your systems and generate according to those grammars: i.e. generally 1 cross street within 30' to 100' of the previous to get a downtown feel. You could similarly work out grammars of the natural world to generate your terrain: find different fields of mathematics whose equations create features of your landscape, set those up in coordination through your grammars to produce randomized (yet homogeneous) systems.
Got not links about it. We've got a new hire who was working on this stuff for his master's thesis.
-me
Got not links about it. We've got a new hire who was working on this stuff for his master's thesis.
-me
Procedurally generated content has been around ever since Ken Perlin invented the first procedural texture 'Perlin-noise' back in the early 80s.
And I will never forget the line 'mov ax,0013h' :)
As for your question I'm sure it would be possible, as the demo scene has been creating procedural landscapes, buildings, etc. for years.
The problem with randomly generated content however is that it takes a lot of effort to get anything even remotely matching the quality and 'interestingness' of hand made content, and as such you get bored of having a neverending featureless mass to play through, rather than getting bored of a interesting, but limited amount of content.
Don't let me discourage you though, research methods, implement them then combine and augment to get what you need.
And I will never forget the line 'mov ax,0013h' :)
As for your question I'm sure it would be possible, as the demo scene has been creating procedural landscapes, buildings, etc. for years.
The problem with randomly generated content however is that it takes a lot of effort to get anything even remotely matching the quality and 'interestingness' of hand made content, and as such you get bored of having a neverending featureless mass to play through, rather than getting bored of a interesting, but limited amount of content.
Don't let me discourage you though, research methods, implement them then combine and augment to get what you need.
One more thing, while not quite mystlike, there is a neverending, procedurally generated space exploration game called 'noctis' which is pretty cool. It has randomly made planets with different atmospheres etc. and sometimes random animal on them. No caves/water/algae however.
Another possibility might be to have map sizes that are so small (in storage-space, not physical size) that it is feasible to transmit the level geometry from the game server as it is needed. This would allow for extremely large-scale environments without having to spend large amounts of time going to disk to load the data.
I'm currently working on such a possibility via subdivision surfaces. The idea is that you use a very low-poly representation of your world and the algorithm "tesselates" it into high-poly, smooth, rounded shapes that are good for things like rolling hills, the insides of caves and other terrain features. This is not so good for small intricate details though. My engine uses these "control-meshes" for the terrain geometry and other large objects, thus allowing me to have totally 3D levels (not just heightmaps). So you can have caves, overhangs, even wierd/twisted swiss-cheese-like levels. Then you add instances of small detail objects (grass clumps, etc) to make it more detailed.
If you want more detail, take a look at my journal. The algorithms are described (a bit) at the start of the journal (back in September of last year). I've just been fiddling around with the algorithm a bit lately, but hopefully I'll have some screenshots of a nice large test-scene up within a week or so.If you want more detail on what I'm doing, you can PM me.
I'm currently working on such a possibility via subdivision surfaces. The idea is that you use a very low-poly representation of your world and the algorithm "tesselates" it into high-poly, smooth, rounded shapes that are good for things like rolling hills, the insides of caves and other terrain features. This is not so good for small intricate details though. My engine uses these "control-meshes" for the terrain geometry and other large objects, thus allowing me to have totally 3D levels (not just heightmaps). So you can have caves, overhangs, even wierd/twisted swiss-cheese-like levels. Then you add instances of small detail objects (grass clumps, etc) to make it more detailed.
If you want more detail, take a look at my journal. The algorithms are described (a bit) at the start of the journal (back in September of last year). I've just been fiddling around with the algorithm a bit lately, but hopefully I'll have some screenshots of a nice large test-scene up within a week or so.If you want more detail on what I'm doing, you can PM me.
Twincamtinman, I remember the old demo scene. I still remember first seing Unreal and Second Reality for the first times in like 1991... man, that was great. And then if you had a Soundblaster or Gravis Ultrasound to get good sound out of it... ah, the good days.
I think what the OP is asking for, though, is in another league entirely from anything that ever showed up in a demo.
EDIT:
Ahhh...
">Future Crew: Unreal (1992)
">Future Crew: Second Reality (1993)
[Edited by - smitty1276 on January 5, 2007 11:38:39 PM]
I think what the OP is asking for, though, is in another league entirely from anything that ever showed up in a demo.
EDIT:
Ahhh...
">Future Crew: Unreal (1992)
">Future Crew: Second Reality (1993)
[Edited by - smitty1276 on January 5, 2007 11:38:39 PM]
Quote:
Original post by pinacolada
I'm a big fan of exploration type games (yay Myst), but they all have one problem: eventually you run out of stuff to explore. So lately I have been wondering, what's the feasibility of automatically generated 3d worlds?
I tried doing some research, but it seems like most of the existing systems:
1) only generate a terrain heightmap (no caves).
2) focus on algorithms that are fast enough to do while playing. (generally they don't run full-blown simulations)
I'm more interested in a system that:
1) runs a simulation that takes hours, days or even weeks to finish. And possibly uses many gigs of temporary storage in the process.
2) generates caves as well as the surface terrain.
3) creates other computationally difficult details, like water flowing down into pools, algae growing on walls, etc.
4) maybe even simulates little creatures running around, creating details that make the place seem like it's been inhabited.
Does anyone know of any existing projects/resources on something like this? Or have any thoughts?
Thanks :)
The problem I ran into with piecemeal autogenerated scenery was the complexity of patterns expanding and then conflicting with other previously generated content. The only easy way to combat that was to have an expanding box of completed pattern content so that conflicts can be handled while still in the composition state and not having to undo existing terrain (even that has difficulties with massive backtracking to shift a pattern away from a conflict).
An easy example of this is a basic river system where rivers/streams are not supposed to intersect others as you build them upstream. Have several rivers start in parallel (ie- along a coastline) and grow inland and keep from running into each other when they wander semi-randomly inland).
I found that for some patterns (like rivers and coastlines) are easier to handle by generating the entire worldmap of seed values and have the conflicts be worked out offline. Those seed values were then used at run time to guide the
mesh generation (with local irregularities/variations ) and further details to be autogenerated.
Other patterns like mountain ranges, terrain type/flora/fauna groupings (based on altitude, water proximity and clustering patterns) were also easier to determine ahead of time.
Understand that these patterns are fairly rudimentary and more complex things like human/social patterns can be much more complicated (and thus have even more restrictive conflict rules). These can be quite costly to determine/resolve at runtime.
If you can determine the major (macro) factors, then minor factors and detail placement might be handleable incrementally at game runtime.
Im working on a system that uses scripts to compose scenarios situations 'on the fly' but much of their function is to do validation checking/evaluation for required existing features and formations of elements that make sense(are valid). The rest then is to modify and fit the added props/objects/npcs into the place (including minor mesh modification, ie- flatten...). Another script function will be scanning a limited area for a match (valid placement spot) and after building the scenario then placing adjacent/outlying clues/indicators to guide the player to it.
Eventually I will have a similar system for building up whole towns with coordinated themes and fit into a larger social framework/faction system, but that is a magnitude more complex (behavior patterns/flavorings/themes...).
--------------------------------------------[size="1"]Ratings are Opinion, not Fact
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement