精選文章

SmallBurger Asset Home

  SmallBurger

2025年5月12日 星期一

A Tribute to Ghost of Tsushima: Creating a High-Quality, Mobile-Friendly GPU Grass System

GPUGrassBladePainter

The vegetation system in Ghost of Tsushima left a lasting impression on me. Its rice-plant-like grass blade design avoids the common unnatural look of billboards and eliminates the visual flaws of cross-plane meshes when viewed from above. This became the starting point for developing GPUGrassBladePainter—my goal was to create a grass system capable of delivering similar visual quality on mobile platforms.

A Framework Tailored for Mobile Platforms

Since the target platform is mobile devices, the first challenge to tackle was the bottleneck of memory usage and loading performance. Traditional approaches often rely on pre-storing large amounts of Transform data, which not only consumes memory but also slows down loading times. To address this, I adopted a fully procedural method for randomly distributing grass positions—saving resources while improving efficiency.

Another common issue is the use of SSBOs (Shader Storage Buffer Objects), which either perform poorly or are completely unsupported on many mobile devices. To ensure both compatibility and runtime performance, I chose to store grass culling results using RenderTextures instead.

Storing culling results in a RenderTexture

Creating Rice-Plant-Like Grass Blades

Capturing the look and feel of rice plants was the most important goal of the entire system. I used randomly generated curve parameters to give each grass blade a naturally curved shape. This procedural approach produces non-repetitive, non-linear blade forms, recreating the layered and swaying beauty of rice fields as they move with the wind.

To prevent the grass from looking too chaotic, I integrated a Voronoi Clamp algorithm, which automatically clusters the blades into visually coherent patches—achieving a natural “growing in clumps” effect.

A case of being extremely close to the clamp center point

Pre-generated Voronoi Clamp texture

Dynamic Simulation of Natural Wind

The swaying of the grass isn’t just a simple animation—it simulates the global behavior of a natural wind field. By integrating wind parameters with the dynamic curves of each grass blade, I achieved a natural effect where wind intensity changes over time and space, resulting in varied swaying patterns across different areas. This brings the scene to life with a more dynamic and organic feel.

Demonstration of Randomized Wind Integrated with Curve Parameters

Performance-Oriented GPU Culling Techniques

In scenes with a large number of grass blades, performance management is crucial. I implemented GPU-based frustum culling and mask filter techniques to ensure that only visible areas are rendered. This significantly reduces rendering costs and improves frame rate performance.

Only display grass within the view frustum and areas with MaskFilterMap values.

Mask Filter map

Brush Tools Designed for Artists

GPUGrassBladePainter is a brush-based toolset that allows artists to intuitively paint grass masks—wherever you paint, grass grows. Beyond that, it supports automatic alignment to surface height, even on non-Terrain objects, allowing grass to naturally conform to the ground without manual adjustments.

To further enhance the editing workflow, GPU-based brush functionality is integrated, enabling real-time visual feedback. This "what you see is what you get" approach greatly improves editing efficiency and fluidity.

Using GPU-based brushes to improve grass painting smoothness.

Character Interaction and Grass Response

To bring more life to the scene, I added character interaction functionality. When a character walks through the grass, the blades dynamically bend and react in real time. This deformation is fully handled on the GPU, ensuring that it doesn't impact the performance of the main thread.

Character Push Interaction Demonstration

Conclusion: Bringing Console-Quality Grass to Mobile

The core goal of this system is to enable developers to achieve near-console-quality grass rendering on mobile platforms. Whether you're building a stylized meadow, an open-world environment, or looking to deliver smooth and responsive grass interactions, GPUGrassBladePainter offers a powerful balance of performance and flexibility.

This project is both a tribute to Ghost of Tsushima and a challenge taken on from the perspective of a mobile developer. I hope it inspires you to craft your own immersive natural landscapes.

Demo Video:


The Asset link:
GPUGrassBladePainter

沒有留言:

張貼留言