Monday, 03 August 2026devblog

I never store a face

Every player is procedurally generated from their unique ID. Skin complexion first: nine regional profiles, continuous ranges, no two players alike, and nothing saved.

NEVER STOREA FACE

Every player in my game is procedurally generated. Started with skin complexion tonight.

  • Nothing is stored in the save. A player's whole appearance is derived from their unique ID, so the same footballer looks identical on every machine, every session, forever.
  • Nine regional profiles weighted to a rough global-football distribution, and each is a continuous range, not a fixed set of swatches. No two players share a complexion.
  • MetaHuman skin has the colour baked into the texture, so there is no tint slider. I drive the material's post-bake adjustment stage instead, across the body and all four face levels of detail. Miss one and a player changes colour as the camera pulls back.
  • The same system already generates hair colour, eye colour, hair style, facial hair, height and build. Skin was just the first one wired to the mesh. Face morphs are next: 24 blend shapes for cheekbones, jaw, nose and brow.

Each trait draws from its own random stream. Sounds fussy, but with one shared stream, adding a single new morph target would shift every player's complexion and hair overnight. The whole squad would look like strangers and it would not even look like a bug.

Deterministic generation means I never store a face. Just the ID it came from. A save that would need forty thousand faces in it now needs none, and regenerating is free and survives version changes.

Shipped: deterministic appearance from player ID · complexion across body + all face LODs