What problem was I trying to solve?
I wanted to add thick, stylized moss to rocks, trees, and other environment assets without modeling thousands of individual blades. The effect needed to be lightweight, reusable, and capable of naturally climbing surfaces.
How did I solve it?
I built a shell texturing system using GPU instancing and a custom URP shader. Multiple mesh layers are rendered on top of one another while the shader offsets each shell, applies procedural masking, and animates the moss with wind. Growth is controlled by surface height, allowing moss to naturally spread across objects while remaining fully adjustable in the Unity Inspector.
What makes this solution interesting?
- Uses shell texturing to create the appearance of thick moss without modeling individual geometry.
- Renders multiple moss layers using GPU instancing, allowing the entire effect to be drawn efficiently.
- Applies procedural masking and height-based growth so moss naturally climbs surfaces instead of covering the entire mesh.
- Includes animated wind movement to give the moss subtle motion and bring static environment assets to life.
- Exposes artist-friendly controls for shell count, growth height, density, wind, and color directly in the Unity Inspector.
- Reused the same shader on multiple assets, including trees, demonstrating a flexible material that adapts to different environment meshes.