Work VFX

Dismemberment FX

Real soft-body tearing from Houdini, played back in Unreal Engine 4 on the GPU.

Project
Dismemberment FX
Studio
FutureGames (personal R&D)
Years
2020
Engine
Houdini, Unreal Engine 4
Role
Technical art and VFX
Team
Solo
Status
Study
00:00:00:00

The real-time test in Unreal Engine 4. The tear is a Vellum simulation, played back from textures. · Step a frame with ← → · 30 fps

Problem

A limb tearing off is a soft-body problem, and no game can run a soft-body solver every time an enemy loses an arm. I wanted the real thing anyway: flesh that stretches and tears in a Vellum simulation, playing back in Unreal Engine 4 at game cost.

Constraints

  • The simulation is solved once, offline, in Houdini. The engine only plays it back.
  • Playback must not need a solver, bones or CPU skinning at runtime.
  • Two candidates for getting it into the engine: an Alembic geometry cache, and vertex animation textures.

What I built

The tear is a Vellum simulation in Houdini, where the flesh stretches, gives way and separates.

I tested both routes into Unreal Engine 4, and vertex animation textures (VAT) won. The whole simulation becomes one static mesh plus textures that store every vertex's position and normal for every frame. A material reads them in the vertex shader, and the GPU moves the mesh into the shape of the current frame.

That changes what the engine has to do. There is no geometry streaming from disk, no skeleton and no solver: to Unreal it is a static mesh with a material, so it can play as often as the game needs. The Houdini flipbook and the real-time result below are the same simulation.

Result

Real-time gore from a real simulation, for little more than the cost of a static mesh. Six years later the same idea became an EQLabs product: see Vertex Animation Textures.