Procedural Grass Tool
A production-ready solution for simulating large fields of grass
Render using procedural grass tool
Simulated grass blades
Procedurally animated grass blades
Project Breakdown
As an FX technical director on Brigham Young University's 2026 animated short film, I was tasked with filling a large garden and forest with art-directable grass that had keep-alive, as well as the capability to interact with animation. I started by using the Houdini grooming workflow and filling the entire garden and forest with grass, but when trying to add keep-alive and simulation, I realized that it was going to be way too heavy of a workflow to be used in our pipeline.My first fix was to use frustum culling, importing the shot camera from its USD layer and creating a frustum from it, accounting for camera movement, keeping only the grass that's within the field of view. In certain shots, however, there still was too much grass to simulate efficiently. The next fix was to separate the grass based on whether it was close to the character or not. Blades close to the character would be draw more attention, so I wanted to make them more detailed. Grass farther away would be less noticeable, so it didn't need to be simulated or have as detailed geometry. Essentially, I wanted to create an LOD system for the grass.I created a bounding box based off of the character animation USD layer and used that to determine which grass blades needed to be simulated to interact with characte animation and which could be procedurally animated with keep-alive. After adding this functionality, I changed my approach to creating the grass itself. Instead of creating the grass using the Houdini grooming workflow, I started by scattering points that represent the "root" of each grass blade, distributed based off of density attributes painted on the ground plane. After frustum culling and separating the points based off of animation, I copied lines representing grass blades to the points that needed to be simulated. Using more ground plane attributes, I groomed the lines to create more realistic looking grass blades. Then, using the imported USD character animation as a collider, I simulated the lines. The final step to create the simulated blades was to use the simulated lines to point deform geometric grass blades.To create the procedurally animated grass, I took the leftover points gave them a randomized point velocity based on time, then copied it to the point normal. Like the simulated grass, I copied lines representing the "backbone" of the grass blade to these points and groomed them using ground plane attributes. Finally, I swept a line across the procedurally animated "backbone" to create the a realistically shaped grass blade that would accurately reflect in the light.Combining the the simulated and procedurally animated grass, I was able to create a huge grass field that was art-directable through painted attributes, efficient through using an LOD system, and interactive with character animation. I packaged the tool as a Houdini Digital Asset (HDA) with an intuitive UI that allowed for easy use by all FX artists in our pipeline.
- Tool (HDA) built in Houdini using VEX and Houdini Vellum workflows
- Tool is fully compatible with a USD production pipeline