My Contribution
Among Ripples: Shallow Waters is a nature sim management game where the player is tasked with restoring polluted environments and building a stable ecosystem. As a programmer I was tasked with multiple complex problems spanning all types of game programming from memory management to ui interaction. The game is built in the Unity engine, using a custom Entity Component System to run the simulation. The environment in the game is dynamic and every organism and plant reacts to changes in their environment, such as the spread of toxins or movement of oxygen in the water. Though we all had a hand in every part of the game, these are the areas in which I specialised, briefly summarised:
-
Dynamic terrain mesh generation.
-
Custom level editor and debug tools using the Dear ImGui library.
-
Organism “animal zone” behaviour and territory management.
-
Player tools for digging and painting “animal zones”.
-
Node based behaviour tree editor for organisms using Unity’s node graph system.
Terrain Generation
When designing the mesh generation method, I needed to strike a balance between adhering to the grid of the underlying simulation and player interaction, while also letting the terrain look natural. To do this, I devised a three step process that is executed for each submesh that is generated.
-
First the height data is collected and vertices are placed by interpolating bilinearly between the centerpoints of each grid tile, this produces a very rigid mesh.
-
Using the interpolation values from the previous step, the vertex is moved up or down according to a predetermined smoothing curve, which is editable in the unity inspector. Usually, this was a smoothstep Hermite curve.
-
Once the vertices are placed, a Gaussian blur is applied to the height data to ‘bleed’ height data between separate tiles and smooth gentle transitions to avoid the terrain looking too ‘steppy’.