Timo Eberl

Gameplay Clip

My Work

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.

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.

grass cut data texture

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).

per update collision mesh

Images