Video summary

Procedural Grass in 'Ghost of Tsushima'

Main summary

Key takeaways

Technology

Summary

Graphics programmer Eric Wohllaib explains how Sucker Punch built a procedural grass system for Ghost of Tsushima. The system was designed to showcase the island’s natural beauty while supporting the game’s painterly art direction. Rather than mixing many plant types throughout every field, artists could create broad, visually coherent swaths of grass or flowers.

The system supports dense foliage and strong wind animation while avoiding the overdraw and animation limitations the team encountered with traditional grass cards. In a representative scene, it considers just over 1 million blades and renders about 83,000 individually animated blades in roughly 2.5 milliseconds. Artists can configure it for different vegetation, including pampas grass, flowers, and burnt fields. Grass also reacts to wind, players, and enemies, helping communicate wind direction for the game’s guiding-wind mechanic.

Rendering and Animation Pipeline

  • Tiled terrain data: The world is divided into tiles with textures describing terrain height, surface material, grass type, and grass height. Compute shaders generate grass for smaller render tiles.
  • GPU culling and placement: Each compute-shader lane starts from a grid position, adds a random offset, and applies distance, frustum, and occlusion culling. Texture data determines grass type and height; invalid or zero-height locations are discarded.
  • Artist-controlled grass types: Grass types are stored as 8-bit indices into parameter data. Since interpolating between indices is meaningless, the system gathers nearby values and randomly selects among them using position-based weighting. This creates smoother, dithered transitions than point sampling.
  • Per-blade data and clumping: The compute stage writes compact instance data for each blade, including position, facing, wind strength, a variation hash, and shape parameters. A procedural Voronoi scheme groups blades into clumps. Shared clump data lets artists vary height, orientation, and spacing in coherent patches, making fields look less uniformly random.
  • Indirect drawing and memory management: A second compute shader writes blade counts into indirect-draw arguments. The GPU processes tiles in batches, using a double-buffer strategy so compute work for upcoming tiles can overlap with rendering while keeping memory use bounded.
  • Procedural blade geometry: Instanced indexed draws generate blade vertices directly from vertex and instance IDs, without vertex streams. High- and low-detail versions use 15 and 7 vertices per blade, respectively. The high-detail version blends toward the low-detail form before transitions. Shorter grass can reuse vertices to form two blades and increase coverage.
  • Bezier shape and wind motion: Each blade follows a cubic Bezier curve, which provides a controllable shape and straightforward position and normal calculations. Wind comes from a shared, lightweight 2D Perlin-noise system. Blade facing is influenced during compute, with additional hash-offset sine-wave bobbing in the vertex shader.
  • Visual quality and shading: The team tilts blade normals outward and subtly widens blades in view space to make fields look fuller without adding many blades. To reduce distant, shimmering specular highlights, normals are blended toward a shared clump normal and gloss is reduced with distance. Diffuse textures control vein detail and color along each blade, while clump identity adds subtle color variation. Translucency and ambient-occlusion values vary along the blade length.

The grass does not write to the velocity buffer. Although generating previous-frame positions was possible, it would require additional stored wind and displacement data, which was not practical within performance and memory constraints. The team also found that continuously moving, overlapping blades make temporally accumulated ambient occlusion prone to noisy, glittering results, so it instead outputs simple per-blade AO values.

Supporting Systems and Trade-offs

  • Procedural field assets: Artist-authored plants and flowers are placed through GPU-instanced data streams rather than full game objects. Placement is generated similarly to grass, and nearby tiles are kept in memory while distant assets are discarded.
  • Very distant views: Rendering individual blades across the island was impractical, so the team uses artist-authored terrain textures for far views. This is inexpensive and preserves features such as red flower fields that would be lost if represented only as green grass.
  • Gameplay visibility: Grass-height data is copied into CPU-friendly textures and used to generate meshes for visibility raycasts. Grass types are designated as either stealth or decorative; stealth types return a consistent gameplay height rather than relying on variable blade height.
  • Shadows: Fully rendering grass for shadow-casting lights was too expensive in most cases. Instead, a terrain-based impostor raises terrain vertices to grass height and uses dithered depth offsets, with screen-space shadows adding nearby detail. This gives acceptable results at lower cost, though proxy-mesh edges can be difficult to hide.

Potential Improvements

Wohllaib identifies several areas for further work:

  • Allowing grass to grow on artist-authored geometry as well as terrain.
  • Extending the procedural approach to other foliage or small objects.
  • Separating level-of-detail blade removal from tile size to make grass draw distance easier to control.

Talks and Resources Mentioned

  • “Procedural Grass Rendering” — An Altera blog post that inspired aspects of the system, including splitting short grass blades to increase density.
  • “Blowing from the West” — A talk by colleague Bill Rockenbeck about the game’s wind system.
  • “Samurai Landscapes: Building and Rendering Tsushima Island on PS4” — A talk by colleague Matt Pullman about the growth systems and island rendering.

Main Speaker and Sources

  • Main speaker: Eric Wohllaib, graphics programmer at Sucker Punch Productions.
  • Referenced sources and contributors: The Altera blog post and talks by Bill Rockenbeck and Matt Pullman. Wohllaib also credits the Sucker Punch artists and engineers who helped develop the grass, terrain, and shadow systems.

Rate this summary

Your feedback will help improve summaries.

Improve this summary

Reprocess with a stronger model when the summary feels incomplete or inaccurate.

Pro

Translate summary in another language

Pro

Ask questions to this video

Chat for follow-up questions, clarifications, and source-backed answers.

Coming soon

Share this summary

Original video