Ecosystem simulation - Follow up

Making Of / 30 May 2018

In this post, I'll be going over some of the results of the ecosystem simulation system, some reflection on what I learned as well as ideas for the future!

Easy mode

So, to start off, lets get some results in here:

In this video, you can see what I dubbed the "easy mode" climate.
This climate doesn't favor any of the species in particular but rather focuses on letting every plant grow and giving competition the lead in keeping certain species alive.
That being said, almost immediately, the summer tree disappears from the simulation and the oak tree takes the lead.
This happens due to the summer tree being mostly "optimized" for really warm climates.

But, it's hard to tell what happens here when there's no reference, so let's get some more simulations!


The second climate we'll be going over is the maritime climate.

There were two reasons for adding this climate in there, the first one was that I live in it (technically it's a cold maritime climate but oh well).
The second reason is derived from this, because I am more familiar with the climate, I am able to better judge how well the simulation performs.

What do I mean with this? Well, in one of the earlier versions of this system, the summer tree would consistently win, even though the temperature should be too cold for it to flourish. During other occasions I noticed the strong decline of the oak trees, which would be weird as they usually do completely fine in this environment.

Using this climate as a benchmark I was able to effectively bug-fix and tweak the system.
To make this even easier I made a system that could create plants as a spreadsheet format.
Not only, did this allow me to quickly add new plants, but it also gave me the option to leave some out if I want to.
This is the interface I used for this process:




For the third climate I decided on finding something more warm and went with the desert climate.
Just like the maritime climate this was a test to see if the system properly worked. And yes, it did its work proper!

Main thing to note here is how nearly every tree dies out, except for the summer tree! (and the bush).
This again proved that the system behaves as intended, really destroying any "weak" plants as time progresses.


With only one tree type left, the pine tree, I went with a cold climate for the final test. As the title suggests: taiga.

Again, I was amazed by how the system does its work, only keeping the plants fit for the environment.
Besides this, I don't have much to say about it. Only that it performs just as I had hoped!

What I learned

I think the main lesson I took away from this whole experience is that you always need an anchor point in reality.
In earlier versions I was never able to properly asses whether the system worked properly.
When I started using a relatable climate though, everything became more readable and the whole tweaking/fixing loop became much easier.

This is definitely something I want to use in my future projects.

Ideas for the future

During the process of rendering and tweaking the variables I got a lot of new ideas that I want to add when I have time.
Some of these ideas are:

  • Evolution
    As of now, the system uses just the input-values to simulate the plants.
    What if, during offspring, these (at the moment) static values can be changed.
    This will mimic evolution by giving random variations that over multiple cycles turn into a different species by survival of the fittest.
    To make this happen though, I would also need various systems to procedurally show these changes in the geometry.
  • Automatic plant generation
    Currently I add all plants by hand, using real life data to recreate them in the system.
    Making a system that does this automatically, I would be able to have a larger variety in the amount of species.
    This could work together with the evolution part, making the system into a true ecosystem simulation!
  • Faster system
    Where the current version is a lot faster than previous ones,
    I would still like to have a faster system that can handle more generations in shorter time.
    Open Cl could be the answer here, but it would need a lot of adjustments to the code to work
  • More terrain variables
    With the current system I only care about the soil fertility when spawning/weakening plants.
    For future iterations it could be interesting to bring in more variables like slope, gained sunlight in a certain spot.
    With this also comes more interaction between the plants: Occluding sunlight, stealing fertile soil, etc..
  • Animals
    At the moment the system does a pretty good job in using environmental factors and a bit of competition.
    But, what if I added animals into the mix?
    It could be really cool to use animals for controlling certain plants, in turn changing the ecosystem.
    This would probably need another system for managing these animals though, relations between predators and their prey.
    Oh well, so much to do!


So, in the end I definitely learned a lot whilst developing this system and I am very much looking forward to working on it more when I have time.
For now though, I will conclude this system as done.

Thank you for reading!