Project - Procedural Population of Virtual Terrains

Started by
10 comments, last by EJH 13 years, 7 months ago
Edit: I've considerably shortened this post and made some clarifications. PM me if you want more details.

I'm seeking feedback from the game development community on a project I'm designing which will be able to procedurally populate a virtual terrain with 3d or 2d vegetation models/meshes given only a heightmap, a few parameters and a set of files that define the types of vegetation used to populate the terrain. The x,y coordinates of vegetation models/meshes output by this program will be ecologically-realistic, allowing the production of highly detailed and diverse virtual environments with minimal effort required on the level designer's part.

In particular, my project could prove especially useful for populating large-scale, seamless outdoor landscapes that cross multiple climates.

The project, if completed, would be lost-cost (under $100) or even free and use a non-restrictive, open-source license. My primary motivation for developing such a project is to contribute to the independent game development community, as well as to gain experience in real-world software development and distribution.

Potential users of my project include small-scale independent teams of game developers primarily using low-cost middleware with non-restrictive licenses (GPL, LGPL, BSD etc.) such as Blender and the Ogre3d Rendering Engine.

Any and all feedback on the project is greatly appreciated. However I am particularly interested in:

  1. whether practicing independent game designers would find my project useful; and

  2. if they think that such a tool could be easily integrated into their established design workflows





[Edited by - technopolitica on August 26, 2010 8:20:18 PM]
Advertisement
I, in particular, don't get how i should use this kind of thing, expect for weed O_O

But probably other game designers, who have concepts about the real living world, would find this very useful.
Thank you for your reply. Perhaps I didn't explain the expected use-case of my program clearly enough.

Consider a 3D RPG game design, e.g. something in the spirit of The Eldar Scrolls IV: Oblivion. This RPG features large-scale, seamless outdoor areas that demand extensive placement of trees, bushes and other vegetation. Further, these outdoor areas span multiple climates which should be populated with different kinds of vegetation for realism and diversity.

This kind of level design poses several problems for designers if done by hand (i.e. manual placement of each and every vegetation model). Its slow, and tends to create incongruent transitions between different regions (especially when multiple designers work on different regions of the outdoor areas in parallel). These incongruent transitions take time and effort to correct.

With my project, the level designers would just need a heightmap for the outdoor areas they wish to populate with vegetation (which they probably already have from generating the terrain geometry) and specifications for each of the types of vegetation they wish to populate the areas with (i.e. definitions of which climates the vegetation should appear in). The program would then automatically figure out the different climates (or the user could manually define the climates) and run a population-dynamics simulation.

Without going into details, the population-dynamics simulation eventually outputs sets of x,y coordinates for each species of vegetation used in the simulation that, when rendered with the appropriate 3d meshes, looks ecologically-realistic. All this is done without all the effort that it would take to manually place all of the 3d vegetation models as explained above.
I know people who do real world vegitation mapping. One of the things they need to know aobut is where trees will grow. This can be due to soil type, slope apect, slope gradient, underlying geology, water table, altitude and many other factors.

If you were to design a tree planting system that planted trees according to some set of criteris that can be defined from your world files, then this would allow a more realistic environemnt.

SO if you had a type of tree that you specified as only growing above a certain altitude on a west facing slope aspect that was not too steep and had a rocky soil. This could be determined from the world map by looking at the hieght of certain areas (altitude), the direction of the slope (slope aspect), the steepness of the slope (slope gradient) and the rocky soil could be determined by the terrain texture for that part of the map (soil type).

You could add in more layers to deal with more of the factors (water table and underlying geology are the first to mind). This would allow you to create complex world maps quite quickly and easily by generating a layer that describes the types of vegitation you would find in certain locations by precalculating it from the various world file atributes.

Also, if you are not doing too mcuh terrain morphing, you might be able to recalculate this infomration (only for the areas that ahve changed) on the fly as the terrain is morphed. You could then cause vegitation to die off if the local environment changes and once the vegitation has died off, you can start to repopulate it over time. This way players could actually see environmental impacts that occur.

As an example: The game is an 4X game where the player can build villages and towns. As they do so, the village has a well, but this causes the water table to drop (just reduce the water table layer value around the vialge and recalculate it periodically). This might cause vegitation to die off around the village and this could be an indication to the player that water might become scarce in the future around the village. However, more hardy vegiation, or vegitation more suited to that environment (like weekds and such) might start to flourish and this crease a more dynamic world for the player.
I'd consider something like this to be absolutely fantastic; some needless nitpicking by the community aside I consider the systems implemented for Oblivion to work fantastically well in practice and certainly would be willing to license it for a personal RPG project.
clb: At the end of 2012, the positions of jupiter, saturn, mercury, and deimos are aligned so as to cause a denormalized flush-to-zero bug when computing earth's gravitational force, slinging it to the sun.
Whoa, now i get it ! Thanks.

I just haven't design such large-scale game, to have met these kind of problems. Now with the explanation it looks really useful. And 'yes' i will use this product to populate my vegetation.

One more question: if my game is sci-fi oriented and i have weird looking plants,not like in the real world who tend to grow really fast. Can i modify the software to meet my unusual conditions :?
Quote:Original post by Edtharan
...
...SO if you had a type of tree that you specified as only growing above a certain altitude on a west facing slope aspect that was not too steep and had a rocky soil. This could be determined from the world map by looking at the hieght of certain areas (altitude), the direction of the slope (slope aspect), the steepness of the slope (slope gradient) and the rocky soil could be determined by the terrain texture for that part of the map (soil type).

You could add in more layers to deal with more of the factors (water table and underlying geology are the first to mind). This would allow you to create complex world maps quite quickly and easily by generating a layer that describes the types of vegitation you would find in certain locations by precalculating it from the various world file atributes.
...


This is definitely possible, though there is a trade-off in simulation complexity with more factors to consider. Currently I'm factoring in surface air temperature, water availability (composite measure of humidity, precipitation and ground water), and solar radiation (which takes into account slope-facing and altitude). I'm trying to keep the design modular enough that I can easily add-in additional factors later on when I have a better idea of how the system works.

Quote:Original post by Edtharan
...
Also, if you are not doing too mcuh terrain morphing, you might be able to recalculate this infomration (only for the areas that ahve changed) on the fly as the terrain is morphed. You could then cause vegitation to die off if the local environment changes and once the vegitation has died off, you can start to repopulate it over time. This way players could actually see environmental impacts that occur.
...


This is also possible, but I'm not really aiming for real-time simulation capability. Though I can see running a local or remote server along side the game that calculates the next changes in the vegetation simulation and caches it, allowing for periodic updates.

[Edited by - technopolitica on August 28, 2010 3:31:19 PM]
Quote:Original post by altras
...
One more question: if my game is sci-fi oriented and i have weird looking plants,not like in the real world who tend to grow really fast. Can i modify the software to meet my unusual conditions :?


Absolutely! I've been designing this program to be completely parameterized and customizable so that, for instance, you might simulate a jungle world that has a hotter sun and larger solar constant or a frigid ice world with only a few hardy varieties of alien plants. The idea is that you could do this in a completely intuitive manner - if you want a hotter world you just raise the temperature and define a new set of vegetation to handle it.

Of course, I need to start somewhere and I figure that most of my end users are going to want real-world results. So all of the parameters will default to Earth-like conditions.

[Edited by - technopolitica on August 28, 2010 3:44:10 PM]
This kind of program sounds like it would be really useful, especially like mentioned, for games that need large, seamless worlds. I can already see it working beautifully for a couple specific game designs that I'm developing.

One quick question though, for the procedural placement of plants and vegetation: the 3d plant meshes could be swapped out with any 3d object(s)? For instance, to procedurally place my own buildings or structures as well as plants?
Quote:Original post by parallaxspace
...
One quick question though, for the procedural placement of plants and vegetation: the 3d plant meshes could be swapped out with any 3d object(s)? For instance, to procedurally place my own buildings or structures as well as plants?


My program would not make any assumptions about the type or content of visual representation (3d mesh, 2d sprite or whatever) - it would be up to the programmer to assign a mesh to each set of x,y coordinates for the particular rendering engine they are using.

So you *could* use a building mesh and pretend that it is a plant for the simulation, but obviously that wouldn't turn out too well since its placement would be based upon temperature, water availability and other factors that don't really make any sense for buildings. It may be that the framework that results from the development of my program would be general enough to do what you are asking, but I'm not aiming for that.

I have seen programs floating around the 'net that specifically focus on procedurally generating urban landscapes - you might want to check those out.

This topic is closed to new replies.

Advertisement