Procedural Emptiness

Download Alpha and Omega v2.7.1.19.0
Binaries as Win32 Installer (3 MB)
Download Alpha and Omega v2.7.1.19.0
Source as Visual Studio 2010 Solution (4 MB)

I have seen quite a few papers, blogs, video's and presentations about procedural content and I'm sorry to say that I'm not impressed. Sometimes I'll come across some procedural generated world that looks awesome, but visual prowess is not the only criteria I set for procedural awesomeness. Hmmm, let me rephrase, I am impressed, but most of these awesome looking worlds should not be used for what I have mind. I probably have unreasonable expectations of what I think should be possible to create.

Just look at this stunning desert and forest from http://procworld.blogspot.nl/:

   
Wow, that is quiet something isn't it? You could say it is a bit 'empty', but that's just because it isn't a game (yet). If you'll add some models like wildlife and a gun, then it'll be pretty interesting =D (actually he want's to create a minecraft-like game from it). There are also several resources on generating complete landscapes where all sorts of biomes are combined. These usually try to create an island where we'll see mountains, forests and maybe even deserts. These models are faced with difficult problems such as creating natural looking rivers and some sort of gradient transition between different climates.
 Amit's page with techniques to create a procedural island Shamus Young's Project Frontier 
   
On even a bigger scale are those games that try to create a whole planet procedurally, and sometimes even a whole universe.
 Silviu Andrei's procedural planet Spore creates a whole planet for your civilization to live on 
   
Not all procedural content is about nature. It is also possible generate buildings or even cities.
 Miguel Cepero's VoxelStudio Introversion's city generator (a dropped project) 
   
Creating procedurally generated lifeforms is even more complicated. Not many games can be found that actually managed to implement this. The games that do have something like this probably have ascii-based graphics such as Dwarf Fortress. The best random creatures can still be found in Spore. Even if the model for the creature is designed, the way it walks or dances is still generated by the game.
 Dwarf Fortress doesn't contain text bubbles, I just wanted to add some context Spore is still the best for creating weird creatures 
   

The creation of Dwarf Fortress actually started at 2002 which is around the same time that they started making Spore. If you don't know Dwarf Fortress you are surprised to hear me say that Dwarf Fortress is probably the better one :P. I'm guessing now, but I think that Dwarf Fortress is more played nowadays than Spore is. You have to agree with me that the creature editor of Spore was pretty damn awesome! Was? did I say "was"? I can't think of any game that has something even close to that awesomeness.

There are also games that procedurally generate things like guns, but let's face it, that's just a feature to support their sales-pitch. Giving the user access to a gazillion guns might sound like 'awesome', but this number is often just high because of the number of permutations. There are still only a few types and the player probably won't be surprised by a new type of gun after 2 hours of gameplay. I frown upon those 'randomness'-features, they almost never add that extra 'umpf' to the game that I desire.

Filling the Void

A procedural generated world often feel empty because it lacks inhabitants, history, signs of architecture or a simple story. Dwarf Fortress is the only game I know that decently tackled this problem, but it's a whole lot easier to create when limiting yourself to ASCII characters. Some games do not consider this a problem because all these features are meant to be created by the player himself (e.g. Minecraft). For what I have in mind the world should already have some kind of history when we start playing, because the world is filled with creatures that will impact the surroundings. We need to have a plan that allows for a content-rich world to be created. It's unreasonable to dive onto the specifics at this point, because I rather have a playable game to test core concepts than having an awesome world only fit for screensavers. Let's just create a generic outline of how this content-rich world should be created so we'll keep this in the back of our mind when we're extending the game.

The layout of the planet will be created from a very coarse-grained approach towards a very fine-grained approach. The coarse grained approach is created in such a way that it is possible to have all the information in memory at one time, even if the planet is huge. The fine grained approach will create landscapes on a per-sector basis. We should be able to create a single sector knowing only the current sector and the sectors adjacent to it. This way we are able to procedurally generate the world on-the-fly without having to generate all polygons for the planet beforehand. This method does not allow us to use fancy erosion-algorithms, so when creating things like rivers we have to make sure that water doesn't flow upwards.

  • Phase #1, we'll first create a coarse-grained lifeless planet.
    We'll start just like any other planet; a lifeless chunk of mass. Even without life we should make sure that there is plenty of diversity.
    • Maze
      Every area on the planet should theoretically be accessible so we don't want to have huge isolated area's that just fills up space. We also want to prevent the player from walking in a strait line all the time, because that wouldn't be very adventurous. We'll start by creating a maze that will give hints to future algorithms where it is allowed to create less-accessible regions like oceans, rivers, cliffs, mountains or just a thick wall of trees.
    • Clusters
      We want to have a diverse planet where each biome is small enough for the player to notice the diversity. Being stuck in a desert for hours on end may be realistic, but it wouldn't be fun.
    • Temperature
      To ensure a little bit of realism we'll give each cluster a temperature-value. This temperature-value will play a small role in determining what type of area the cluster becomes. The north and south poles will have the coldest temperature while the equator will be the warmest.
    • Inaccessible Physiotomes
      We'll use our maze and clustering to determine which clusters may become inaccessible physiotomes such as oceans, canyons, mountains and lava-pools. Every cluster that has only one access point in the maze (being a dead-end) may become such a physiotome. Using only these clusters ensures us that we do not accidentally create an isolated landmass.
    • Rivers
      Having created the oceans it has become time to create a couple of rivers. Rivers do not care about sectors or clusters, they will traverse using the walls we have generated for our maze. Each river will end-up in an ocean that we've created in the previous step.
    • Humidity
      Having created all water-bodies for the planet we'll be creating a humidity map for the planet. We'll be using both the humidity and temperature in the next couple of algorithms to determine where to place the different biomes.
    • Physiotomes (landforms)  and Geotopes (rocks/soil)
      Knowing the temperature and humidity we'll be creating the landforms on the remaining clusters. Note that we still do not assign areas for flora and fauna, that will be something to think about in the next phase.
  • Phase #2, Fine-grained world.
    Having a coarse-grained world that supplies the information about the landscape we need to actually create the polygonal landscape. Each different physiotime needs to have it's own set of algorithms to create the landscape to create 'actual' diversity. Not only is it a lot of work to create the polygons, we also need to texture them! This may be the time that I'll be experimenting with procedurally generated virtual textures. I'm looking forward to it!
  • Phase #3, Flora and fauna
    I'm not sure how to tackle this problem, but that's okay, I still have time to think about this. Since I don't know any good 3D-artist we may have to consider procedurally generating this one too. Flowers, grass and bushes are easy but what about bigger things like trees? Trees are not my biggest worry though, I'm pretty sure I can come up with some L-System (or something similar) that'll be convincing and diverse enough. Wildlife is way more difficult and in my opinion very important for making a world feel lively. Procedurally generating creatures (with animations and all that) is something you don't see very often because it's pain in the bum to build. Oh my, this is quiet a big hurdle to overcome, which makes it one of the more interesting topics to think about :)
  • Phase #4, Intelligent life
    Without any intelligent life there isn't much interesting history that makes the world feel like it existed long before you started playing the game. To have an interesting history we need to add intelligent life that creates recorded or remembered history and visible traces of that history in the landscape. Not only is it very difficult to create, there are also some practical implications to consider. We can't assume that we can simulate the whole world at polygon-level taking into account every creature's movement. Is it possible to simulate this behavior in the coarse-grained world?

We are still busy working on Phase #1 which is to create the 'void' that we need to fill in Phase #3 and #4. Reading back what I've just written makes me think that it's overly ambitious. I must force myself to think about the big picture: It needs to be a game. Another thing I'd need to remember is to limit the size of the world. Having procedural generated worlds allows for the creation of humongous worlds, which only adds to the feeling of emptiness.

Progress

We're still busy working on the coarse-grained lifeless planet. This time we've added a temperature map for each sector and cluster that will help in identifying what type of biome the clusters will become. This is also the first time that we've actually used the maze by identifying clusters that may become inaccessible. Even if we were to make every wall of the maze inaccessible (which we won't), we are still ensured that every sector on the planet is accessible, well... besides the inaccessible regions of course.

Ahhhh... so much work I still need to do. Luckily most of it will be really fun to work on :). Maybe we're able to generate some sort of map from the coarse grained world. That way my effort on visualizing each step of the generation process can actually be used in the final product. Wouldn't it be awesome if we could generate something like this?:

ClusteringReview and Refacturing
  1. Naxos says:

    Just came upon this blog recently, and I'm really enjoying it!

    I figure this post isn't that old, given the videos from procworld, but are you still working on this?

    I've been refreshing your page everyday for a few days now, hoping for a new post :) I should probably look into this whole 'RSS' thingy.

  2. eierkoek eierkoek says:

    Hi there fellow random internet guy,

    I've been not quite myself for a while since I've been hospitalized. I'm sort of fine now, so there is no need to be worried about some guy you've never met :P. There is no way that I'm stopping with stuff that I enjoy so much, but my guess is that I still need about 1, maybe 2 months before being fit enough to continue writing about my hobby. So if you're still reading this; sorry about the big delay. Give me some time and I'll be back stronger and more powerful than you can possibly imagine [EvilLaugh]Mwuhahahaha[/EvilLaugh]

  3. That is very fascinating, You are an overly professional blogger. I've joined your rss feed and sit up for looking for more of your magnificent post. Also, I have shared your web site in my social networks

line