My primary contributions to the project included grass rendering research, shader development, grass rendering optimizations, the implementation of the grass cutting mechanic, and user interface design and implementation.
Gameplay Clip
My Work
Grass Rendering
At the start of the project, I conducted extensive research on different grass rendering techniques, specifically geometry shaders and instanced rendering. After many performance tests, I arrived at the surprising conclusion that geometry shaders have significantly better performance for our use-case. I documented these findings and shared the code on GitHub.
As the first step to continue the project after the MediaNight, I implemented another prototype for rendering huge grass fields using a chunk-based LOD system. The source code can be found here. The video below shows the transition between the different LODs based on camera distance.
Grass Cutting
Building on the rendering groundwork, I designed and implemented the grass cutting mechanic. This system is driven by a data texture that tracks the cut height of each potential grass blade on a pixel-by-pixel basis, which can be seen in the image below.
Whenever the player's blade (for example, of a sickle or scythe) intersects with a portion of grass, the data texture is updated in real time to reflect the new cut state. To accomplish accurate cutting and avoid "tunneling" even with fast blade movements, a collision mesh that represents the path of the blade is created every update (see image below).