Folliage Generator

I built a procedural foliage generation system in Houdini that creates optimized vegetation meshes, bakes them to cards, and brings them into Unreal Engine for real-time rendering. This tool bridges the gap between high-quality artistic foliage and performance-friendly game assets — all while staying fully procedural and customizable.


Houdini System Overview — Vertex Color Baking for Wind

Vertex color visualization showing sway intensity (stored in vertex colors) and direction data baked per-blade for realistic wind animation.


Houdini parameter interface showing Width, ClusterAmount, MaxBlades, Spread, Growth, Bend, and Subdivide controls

Vertex Color Baking for Wind Animation
One of the most important parts of this system is the vertex color baking for controlling wind behavior. Instead of uniform wind across all grass, I bake sway intensity and direction directly into the vertex colors of each blade during generation.

In the VEX code, each vertex gets:
Red/Green channels (U/V) — Encodes position along the blade (0 = root, 1 = tip)
Blue channel (phase) — Randomized per-blade to offset wind timing
Amplitude attribute — Controls individual blade sway strength

This data is then read by the Unreal shader, allowing each blade to respond to wind forces with unique timing, intensity, and directionality. The result is organic, non-uniform motion that sells the illusion of natural wind flow — no two blades move identically.


Foliage Mesh Generation in Houdini

Procedural generation of detailed foliage meshes with controllable density, shape, and variation.


Parameter-Driven Generation with TOPs
The entire system is driven by a set of exposed parameters that control every aspect of the foliage generation. Using Houdini TOPs (Task Operators), I can generate clusters and individual leaves in parallel, with each leaf randomized based on the tool’s parameters.

The key parameters include:
Width — Controls blade width
ClusterAmount — Number of grass clusters (30 in this setup)
MaxBlades — Maximum blades per cluster (3)
Spread — How far blades spread from center (1.434)
Growth — Height variation (0.5)
Bend — Natural blade curvature
Subdivide — Mesh resolution control

By using TOPs, the system can generate hundreds of unique variations in parallel, dramatically speeding up iteration times. Each cluster and leaf inherits randomized values within the parameter ranges, ensuring natural variation without manual tweaking.

Houdini parameter interface

Thick Grass Generation System

Dense grass clusters generated procedurally with natural variation and clumping behavior.


Tall Grass in Unreal Engine
The generated foliage brought into Unreal Engine with real-time lighting and wind simulation. The system generates billboards and cards optimized for performance while maintaining visual quality. Each grass blade is procedurally varied to avoid repetition, and the entire setup is fully data-driven — meaning I can tweak parameters in Houdini and regenerate entire biomes on demand.

Getting the materials to feel natural was a big part of this. I used gradient-based color variation tied to world position and height, so grass transitions naturally from root to tip. Combined with subsurface scattering and translucency, the grass reacts beautifully to directional light. The vertex color data drives the wind shader, reading the baked phase and amplitude to create convincing motion.


Foliage Card Baking & Optimization
The real challenge wasn’t just generating the foliage — it was making it performant. High-poly grass looks great in isolation, but scatter thousands of instances across a landscape and your framerate tanks. That’s where foliage cards come in.

I built a baking pipeline in Houdini that takes the high-detail mesh and flattens it into optimized billboard cards. These cards capture the silhouette and lighting information of the original mesh but render at a fraction of the cost. The system automatically generates UVs, bakes normal maps, and outputs alpha-masked textures ready for engine import.

The trick was balancing visual fidelity with triangle count. Too few faces and the grass looks flat and fake. Too many and you lose the performance benefit. I landed on a sweet spot using crossed quads with carefully authored normals to sell the volume from multiple angles. The vertex colors are preserved through the baking process, ensuring wind animation works identically on cards as it does on full geometry.


Technical Breakdown

Houdini Generation

  • Parameter-driven procedural system
  • TOPs for parallel cluster generation
  • Per-leaf randomization from parameters
  • Vertex color baking for sway data
  • Phase and amplitude per-blade
  • Curve-based blade geometry with bending
  • Clumping and natural variation
  • Automatic LOD generation
  • UV layout and atlas packing

Unreal Integration

  • Vertex color-driven wind shader
  • Per-blade phase and amplitude control
  • Subsurface scattering for translucency
  • Gradient-based color variation
  • Instance-based rendering for performance
  • Distance-based LOD transitions
  • Collision-responsive grass (player interaction)

This system is fully modular and reusable — I can generate forests, meadows, or alien vegetation by tweaking parameters and swapping textures. The vertex color baking technique allows for incredibly nuanced wind behavior without expensive per-blade calculations in the shader. The TOPs-based approach means I can batch-generate thousands of variations for massive open worlds. It’s become a core part of my environment toolkit.

Logo