The 3D Handbook
Key term

Wind and world position offset

Animating foliage, cloth and props by moving vertices in the material (World Position Offset, or vertex animation), driven by masks, pivots and a wind signal; cheap per object but with costs for shadows, culling and GI.

foliageshadersenvironment-artunrealoptimisation

World Position Offset (WPO) is a material input that moves a mesh's vertices on the GPU every frame. Epic's definition: it "allows a Material to manipulate the vertices of a mesh in world space" and "is often used for subtle, ambient animation" (Unreal Engine Documentation: Material Inputs). Its most common job in environment art is wind: grass bending, branches swaying and leaves fluttering, without skeletons or simulation on the CPU.

For the bigger picture of foliage cost, see foliage and vegetation.

#How a wind shader is built

A wind material combines three things:

  1. A wind signal. A direction plus a strength that varies over time and space. Ghost of Tsushima's main wind kept a constant direction and varied its strength with time-varying Perlin noise (Game Developer: Using vorticles to simulate wind in Ghost of…).
  2. A mask. How much each vertex may move: zero at the roots, more towards the tips. It often comes from vertex colours, UV position or height above the pivot.
  3. A hierarchy. Trunk, branches and leaves move at different speeds around their own pivots.
A simple tree with a trunk, three branches and leaves. A dashed orange outline shows the trunk bent to one side from a root pivot. Orange dots mark branch pivots. A greyscale bar on the left goes from 0 at the bottom to 1 at the top, labelled height or vertex-colour mask.
Layered wind. The trunk bends from the root, branches swing around their own pivots, leaves flutter; a mask keeps the base planted. Illustrative.Diagram by the handbook author

Unreal's Pivot Painter 2.0 stores the data this needs in textures: each element's pivot location, basis vectors, "Number of Steps From Root", parent index and bounds (Unreal Engine Documentation: Pivot Painter Tool 2.0). Its sample foliage function supports "hierarchies up to 4 levels deep and 30,000 model elements"; in a tree, the first wind setting drives the trunk, the next the branches, and so on (Unreal Engine Documentation: Pivot Painter Tool 2.0). The tool is a 3ds Max script, tested with 3ds Max 2015 and 2016 (Unreal Engine Documentation: Pivot Painter Tool 2.0).

#Costs of vertex animation

Moving vertices in the shader affects every system that assumed they were still.

#Common mistakes

Related: shaders for artists, instancing, vertex painting and blending, the technical artist.

#Further reading and watching

Eric Wohllaib on generating, rendering and animating fields of individual grass blades on the GPU for Sucker Punch's open world. Watch on YouTube

References

  1. Epic Games · Material Inputs · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  2. Game Developer staff (reporting Bill Rockenbeck's GDC 2021 talk) · Using vorticles to simulate wind in Ghost of Tsushima · Game Developer, 2021 · article · accessed 2026-10-21
  3. Epic Games · Pivot Painter Tool 2.0 · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  4. Bill Rockenbeck (Sucker Punch Productions) · Blowing from the West: Simulating Wind in 'Ghost of Tsushima' · GDC 2021 (GDC Vault), 2021 · talk · accessed 2026-10-21
  5. Eric Wohllaib (Sucker Punch Productions) · Advanced Graphics Summit: Procedural Grass in 'Ghost of Tsushima' · GDC 2021 (GDC Vault), 2021 · talk · accessed 2026-10-21
  6. Epic Games · Virtual Shadow Maps · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  7. Epic Games · Mesh Distance Fields · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  8. Epic Games · Lumen Technical Details · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  9. Epic Games · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine Tech Blog, 2023 · article · accessed 2026-10-21

Also consulted

Last updated 2026-10-22