Blossom - Nature Simulator

Blossom, is a nature simulation engine that makes use of procedural tools to create natural landscapes. My main responsibility was to work on the graphics for the PC and incorporated the grass simulation I developed a prototype for a couple of months ago. However, in this engine it got the attention and place it really deserved to shine!

The engine is created as a part of our year 2 block project. We worked on the project with a team of 5 people for the duration of 8 weeks. During this time we implemented several features to develop a game engine, that we created a game with when designers joined our team.

For this engine we made use of OpenGL as a graphics back-end. While not the most performant, this was chosen due to our inexperience with graphics, and would serve as a good learning experience, and also would help with iteration times.

Notable contributions

Procedural grass

The grass in the engine is the main selling point of the engine and helps sell the nature environment. I designed, implemented and optimized the solution, to be able to render large amounts of dynamic, procedurally generated grass.

  • Large amounts of grass blades that are procedurally placed and integrate with the terrain generation
  • Parameterization of grass blade visuals (e.g. gradient color, custom ambient, normal bending, etc.)
  • Culling of chunks outside of the camera frustum
  • Randomized initial placement of position, rotation, and bending
  • Wind forces that affect and move the grass blades

Player displacement

To further improve on immersion we wanted to environment to react to the player. I implemented a solution that applies forces the player produces to the grass, together with other forces (i.e. wind).

  • A texture based system, centered around the player, that renders forces produced by the player
  • This texture is read by the grass shader and the sample is transformed into world space
  • The result is a force that the grass blade should be pushed by
  • This produces an effect where the player can move through the grass and the grass responds to it
  • This is integrated in our ECS, and can be used through components that affect what the center is, and what things can produce force against the grass

Model LOD system

To be able to use high fidelity assets we needed an LOD system in our engine. I helped design and implement this system with our existing model loader, and format (glTF).

  • Through collaboration with artists, we decided to package LODs together in the same glTF file
  • During the model parsing process we identify and extract the LOD levels
  • When processing the draws for a frame, we determine distance from the camera and submit the relevant mesh for rendering