Blossom - Nature Simulator

CUSTOM-ENGINE

 

GRAPHICS

 

OPENGL

 

SCHOOL

 

TEAM

 

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!

Procedural grass

Grass plays a crucial role in enhancing both our engine’s immersiveness and the visual appeal of our scenes. By integrating simulated geometry, we breathe life into our environments, creating a more immersive natural experience. Our objectives included rendering vast quantities of grass, enabling player interaction, simulating ambient wind, and seamlessly integrating with the environment. Leveraging our noise workflow, we achieve precise control over grass density across landscapes, while also refining the generation of our wind effects.

Blending with the environment

One of the core principles of Blossom is to be able to create procedural landscapes within the engine. To facilitate this, we made use of the FastNoise2 editor graph to visually design and author noise maps to be used in the engine.

We wanted to keep this entire process in the engine. So you can create a noise map in the integrated editor and export this to a png file. This file can then be referenced in the engine to be used in various ways. You can use it as a height map for the terrain, a mask for the grass or as a density map for the props you can place on the terrain.

Wind

Each grass blade possesses two degrees of freedom in its movement, allowing it to sway forwards, backwards, and sideways. These movement controls play a crucial role in simulating wind effects across the landscape. Our approach involves utilizing a Perlin noise texture to generate ambient wind, which we dynamically scroll over time. Furthermore, we offer global controls for adjusting the wind's direction and speed. Collectively, these variables come together to dictate the direction and intensity of movement for each grass blade.

Player displacement

In our pursuit of enhancing world interactivity, we aimed to enable player influence on the grass as they traverse through the environment. To achieve this, we implemented a displacement map mechanism. As the player moves, their speed and distance from the terrain dynamically alter this map. The resultant push data is encoded into the texture, ready for interpretation by the grass. Subsequently, the grass utilizes this information to determine both the direction and magnitude of the applied force.