Realistic depictions of scenes including grass or fur often require high levels of detail. However, artistic interpretations of these often require only a few strokes in order for the viewer to interpret the underlying detail. In this project, I show a non-photorealistic rendering system that uses strokes to render fur and grass in a stylized manner that suggests the complexity of an object without showing it explicitly. I propose an algorithm to procedurally add geometry to a polyhedral model, which when rendered in a non-photorealistic style such as toon shading, can produce effects like grass, fur, or foliage.

The fur is rendered using GLSL vertex, geometry, and fragment shaders. The program determines where to place geometry strokes based on a density constant and a random number. It passes each stroke as a vertex into a vertex buffer object. This vertex buffer object represents the location of each tuft on the mesh. In the video above, the bunny has ten thousand tufts.

The geometry shader is run once for each vertex. The role of the geometry shader here is to take one input vertex and produce a triangle strip. Most of the calculations for the fur are done in the geometry shader. The geometry shader is what enables this demo to have such good performance. Above, 10,000 tufts of fur are being rendered at a time. Each tuft has 9 triangles.

You can read more details about my algorithm in my paper!