Realism in off-road simulation games depends almost entirely on how the engine interprets the physical interaction between the vehicle and the ground. SnowRunner, developed on the Swarm Engine, takes this premise to the extreme with a volumetric terrain deformation system that responds in real time. Unlike generic engines that apply static textures, Swarm calculates vertex displacement and fluid particles to simulate mud, snow, and water in a way consistent with vehicle physics.
Volumetric deformation and real-time fluids 🚜
The key to the system lies in the use of dynamic height maps combined with a particle physics solver. Each truck tire applies pressure on a high-resolution terrain mesh, generating ruts that remain persistent until the engine recalculates them due to erosion or additional weight. Water and mud are modeled as non-Newtonian viscous fluids: mud behaves like a solid until the wheel torque liquefies it, while compacted snow changes its density and friction coefficient based on the simulated temperature. This process requires constantly updating the terrain geometry, which Swarm Engine optimizes through a Level of Detail (LOD) system that prioritizes areas near the player and reduces computation in distant areas without sacrificing the sense of immersion.
The workflow between 3ds Max and ZBrush 🎨
To create the assets that interact with this dynamic terrain, the team uses 3ds Max for the base modeling of vehicles and structures, ensuring clean and optimized topology for the engine. ZBrush comes into play for sculpting high-frequency details, such as adhered mud, dents, or wear textures that are later baked into normal and displacement maps. This combination allows the Swarm Engine to process precise collisions between the sculpted geometry and the deformable terrain, achieving organic mud accumulation on tires and chassis, raising the standard of realism in off-road simulation.
How Swarm Engine manages terrain deformation in real time without compromising performance or the accuracy of physical behavior in SnowRunner
(PS: shaders are like mayonnaise: if they break, you start all over again) 🛞