Real-time Layers of Grime: The Technical System of PowerWash Simulator

Published on May 26, 2026 | Translated from Spanish

PowerWash Simulator, developed in Unity, presents a unique technical challenge: convincingly simulating surface cleaning. Far from a simple color change, the game employs a system of dynamic dirt layers that are progressively removed through real-time texture masks, relying on a PBR (Physically Based Rendering) workflow to maintain visual realism.

PowerWash Simulator real-time dynamic dirt cleaning with Unity and Substance Painter

Asset Pipeline: From Maya to Unity with Substance Painter ๐ŸŽจ

The process begins in Autodesk Maya, where vehicles and buildings are modeled with clean, real-time optimized geometry. Each asset is exported to Substance Painter, where base PBR textures (albedo, normal, roughness, metallic) are created. The technical key lies in generating additional mask channels. In Substance Painter, layers of grime and rust are painted as independent textures or in alpha channels of existing maps. When integrated into Unity, the custom shader reads these masks and, through an erosion algorithm controlled by player interaction (the water jet), gradually fades the dirt's opacity. This progressively reveals the clean underlying PBR texture, creating the illusion of physical cleaning without needing to modify the geometry.

The Illusion of Cleaning as a Game Mechanic ๐Ÿงผ

This approach demonstrates how an intelligent texturing solution can define an entire gameplay mechanic. Instead of complex particle simulations, PowerWash Simulator leverages the power of Unity's shaders and Substance Painter's multi-layer texturing to deliver a satisfying and visually coherent experience. It's a brilliant example of how understanding the capabilities of the PBR pipeline allows developers to create novel interactions without sacrificing performance.

As a Unity developer, what layer system and shaders did you use to manage the procedural accumulation and removal of grime in real-time without compromising performance?

(PS: shaders are like mayonnaise: if they break, you have to start all over again)