Wind Shader
Water Shader
WebGPU
July 23, 2026 · By Unreal Twin

Gaussian Splats are exceptionally good at capturing the appearance of real places. They are also honest about the moment they captured. Water freezes. Trees stop moving. Flags remain fixed. The more photoreal the environment looks, the more noticeable that stillness becomes.
One response is dynamic or 4D Gaussian reconstruction: capture motion across time and build a representation that contains it. That is important research, but it solves a different production problem. UnrealTwin’s Amsterdam milestone began with a standard static scene and asked a simpler question: how much motion is required before the place feels alive?
The answer was implemented directly in the shader. Custom GPU code manipulates splats at runtime, introducing procedural movement without requiring a temporal dataset or changing the capture pipeline. Vegetation can respond to a synthetic wind field. Water can receive wave-like displacement. Boats can move with buoyancy-inspired rhythm. Flags can flutter rather than remaining suspended.
None of these systems attempts to simulate every physical force. That restraint is the optimization. The eye is highly responsive to the right cues, and a few coherent motions can do more for presence than a much heavier simulation no one can afford to run on a phone.
“
Sometimes the smartest simulation is not calculating more. It is knowing exactly which motion the viewer expects to see.
”
Because the movement happens in WebGPU shaders, the work remains on the hardware designed for parallel transformation. The underlying 3DGS asset stays static and streamable. Motion is introduced at render time, which keeps the content pipeline familiar and avoids turning every animated environment into a new capture category.
This approach gives artists a practical middle ground. They do not have to accept a frozen world, and they do not have to produce a complete dynamic reconstruction. Motion can be art-directed by region and by material behavior. A river can move differently from a tree canopy. A hanging banner can use a separate rhythm from a boat. The goal is not scientific uniformity; it is visual credibility.
There are limits. Shader animation works best where deformation can be described procedurally and where the original splat layout supports the motion. It is not a replacement for skeletal animation, complex object interaction, or captured human performance. It is a powerful way to recover environmental life at minimal runtime cost.
UnrealTwin is not changing how every environment is captured. It is changing what a static capture can become when it is rendered.
The Amsterdam scene is a useful proof because its identity depends on small continuous motions: water, boats, flags, and vegetation. Once those elements begin to respond, the scene stops reading as a perfect photograph and starts reading as a place.
That is the broader opportunity for animated Gaussian Splats. The source can remain static. The experience does not have to.