This directional VAT system bridges the gap between fully baked animations and expensive real-time destruction. By pre-simulating four directional variants and selecting based on projectile heading, it delivers directionally-responsive destruction at a fraction of Chaos's performance cost.
Link to the 80 Level article
Realtime redirection of a rigid body simulation in Unreal
4-way simulations chosen by a projectile's impact direction
Stress test with 117 actors - 34 million simulated polygons total.
Captured at ~30 FPS on a laptop with 3070ti
Houdini Setup:
Rigid body and sprite simulations in Houdini
TOPS setup
Houdini TOPs Setup: Batch-processes all four directional rigid body simulations and their corresponding dust sprites (generated from impact points) in a single automated pass. Designed to scale across multiple destructible assets without manual per-direction setup.
Blueprint Breakdown:
The VAT Destruction Blueprint works in 4 steps:
1. Projectile triggers Break event, providing Impact Location and Direction. Game time is recorded as Break Time.
2. Calculate material variant index (0-3) and Rotation Angle from projectile heading.
3. Async-load the selected material instances for statue geometry and dust sprite.
4. Set material parameters: Break Time, Impact Location, and Rotation Angle.
Main logic and variable initialization
2. Choose a material index based on which of the four general directions the projectile hit
3. Async load the chosen mesh/sprite VAT material instance.
4. Finally, set material parameters once the material instances are loaded.
VAT Material Breakdown:
Modified Houdini VAT function using impact data to control Break Time (when destruction starts) and angle (simulation direction).
Frame time = game time - break time.
Frame time = game time - break time.
Rotating the outputs of a modified Houdini VAT material function
Optimizations and Design Considerations:
Reducing texture samples with bi-linear filtering (2 fetches + lerp → 1 fetch)
Default VAT function: Two texture samples + manual lerp to interpolate between frames.
My optimization: Single texture sample with bilinear filtering enabled, letting GPU hardware handle interpolation. Reduces texture fetches by 50% and eliminates manual lerp instruction.
set filtering mode to bi-linear
Modifying the UV handling inside the VAT material function
Async-load and soft references:
Instead of loading all four material variants upfront, instances load on-demand based on impact direction. The engine can unload unused variants when memory pressure requires it.