Second Chance DevlogThe Gazette

Clothes that slip down and shred — but only on a body they weren't built for

metahumangarmentsanimationmeasurement

The plan was eleven new residents for one estate — each with a face, a house, a daily routine that walks past the player's door, and a conversation. Eleven bespoke wardrobes is roughly eleven working sessions, which was never going to happen. So the whole thing rested on one economy: a garment is fitted to a body, not to a person, so freeze three archetype bodies (a slim man, an average man, an average woman), fit one parametric clothing kit to each, and let eleven unique faces share three fits. Faces are free in this scheme, because face shape does not affect how a shirt hangs.

That plan only works if a garment can be worn by a body it was not personally fitted to. Which is exactly the thing that had been quietly failing for weeks.

The symptom

Type this into a search box and you will find people describing it and nobody solving it:

the t-shirt looks fine in the mesh editor and in the rest pose, but as soon as the

character walks, the hem rides up off the waistband, the collar climbs to the chin, and

the shoulders punch straight through the fabric

The developer's phrasing was blunter — the clothes on one character "were terrible", while the clothes on the background passers-by "were best". Both statements were true and both were misleading, which is the whole story.

Everything about the symptom points at the garment. It looks like bad weight painting, a bad export, a scale mismatch, a broken bind. So that is where all the time went: re-transferring weights, re-exporting, comparing bind orientations, rebuilding the mesh from a different generator. Weeks of it. Every one of those checks came back clean, which should have been the clue much earlier than it was.

What it actually is

A garment and a body can reference the same skeleton asset and still each carry their own reference pose. Skinning evaluates against the component's own inverse bind matrices, not against the skeleton's.

So if a garment is set up to play its own animation — its own copy of the same walk clip the body is playing, in perfect sync — the garment poses itself on the proportions of the body it was fitted to, while the wearer poses on theirs. The two drift apart by the difference between the two binds. Every frame. At every bone. No warning, no error, and it is completely invisible in the rest pose, because in the rest pose neither one has been evaluated yet.

For the pairing under test, the two binds differ by up to about 49 mm at the upper spine, 24 mm at the pelvis, and 24 mm at each shoulder. That is not subtle. That is a shirt sitting five centimetres off where its wearer is.

How it was settled

Not by looking at it. Looking at it is what had failed for weeks.

A small comparison script spawns the character and the garment side by side, plays the same walk clip on both, steps through nine phases of the cycle, and reports the world-space distance between the same named bone on each component, in millimetres. No play session, no viewport, no rendering — so it disturbs nothing else open in the editor, and it produces a number instead of an opinion.

| garment driven as | worst bone divergence, walk cycle | |---|---| | its own animation, same clip, in sync | 49.09 mm (83 mm at some phases) | | a follower of the wearer's body | 0.00 mm at every bone, every phase |

The first column is a garment that visibly slips. The second is a correct shirt.

Two independent instruments agreed to within a hundredth of a millimetre: the bind deltas computed offline from the two exported files, and the live component transforms read out of the running editor. Different code, different tool, different data path, same answer. That agreement is what turned "plausible theory" into "closed question".

The fix is one property. Bind the garment as a follower of the wearer's body component rather than an animator in its own right. It then copies the wearer's evaluated bones, which means it also warps onto the wearer's proportions for free — which is precisely what makes the three-archetypes-one-kit economy viable. On a MetaHuman-derived Blueprint you do not even have to ask: the construction script already does it for any skinned component parented under the body. So the whole dressing step collapses to parent the garment under the body and stop.

The sting is that the previously documented step — carried in two separate hand-written runbooks, in six places between them — explicitly switched each garment into its own single-animation mode with an idle clip. That step was not a missing fix. It was the bug, written down as a recipe and dutifully followed onto every character.

Two instruments that lied during the hunt

Both nearly produced a confidently wrong write-up, and both are worth recognising because the shape recurs everywhere.

Clearing the follower link does not restore independent evaluation. It leaves the component dead, with every bone collapsed onto the actor's origin — which renders as the clothes lying in a heap on the floor at the character's feet, and looks for all the world like a catastrophic skinning failure. That heap was very nearly reported as the bug itself. It is not a state the wearer can ever be in; it is an artefact of toggling. To compare two configurations, respawn the component; never toggle back.

Emulating the fix in the modelling tool proves nothing. The obvious offline check — rewrite the garment's bind so it matches the wearer, then measure — is a different operation. Rewriting edit bones on an already-skinned mesh re-deforms the mesh, and it duly reported a worse result than the thing it was modelling. An emulation that changes the data is not an emulation.

The blind spot, which is the real lesson

Why did this hide for weeks, with a background crowd of dressed characters walking around in plain sight?

Because the background crowd wear the exact body the kit was fitted to. A matched pair diverges by zero. So does a bespoke garment on the one character it was authored for. Every character anybody had looked at closely was one or the other.

The developer's read — "the passers-by have the best clothes" — was an accurate observation that led to a wrong conclusion, and I copied that conclusion into the work: if that kit is best, copy that kit. It is not a better garment. It is a matched pair. The one character a bug does not affect will happily masquerade as proof that the pipeline works, and the more prominent that character is, the longer the masquerade holds.

The bug only exists when a garment crosses bodies — which is exactly what you start doing the day you decide to dress a whole cast from a shared wardrobe.

What it left behind

With the wiring corrected, the garment everyone had been blaming measured sound: every one of its 341 bones matched, bind orientations agreeing to a fifth of a degree, no weight leaking onto hands or feet, and its median clearance over the skin unchanged between rest and a full walk. Nothing needed refitting. The residents needed dressing differently.

Two genuine garment defects did fall out of the same measurements, both in the collar, and both fixed in the generator rather than the mesh: the neckline was a dead-flat ring, level front to back to within half a millimetre, where a real one should sit higher at the nape and dip at the front; and on a broader chest it cut 13 mm into the trapezius. Rebuilding the collar height as a function of angle around the neck fixed both, and the refit took vertices buried inside the skin from 330 down to 8.

A later corollary, from a different character: garment components hung directly on a placed actor survive a level reload but their configuration does not. The construction script re-runs on load, re-asserts the body from the class default, and clears the follower link on everything parented beneath it. The only symptom is, again, clothes crumpled on the floor. Garments belong on a Blueprint, never on a placed instance.

What is not proven

Three archetypes are fitted and three characters are wearing the kit correctly. The remaining eight residents had not been run at the time of writing. The same symptom was reported on a police uniform and this diagnosis is expected to explain it, but that has not been verified. And the archetype kit only proves that the fit works — the per-character outfits that give each resident their own silhouette are a separate job sitting on top of it.

What to take from it

  • A garment sharing a skeleton is not the same as a garment sharing a pose. One asset

reference, two reference poses, and the divergence is silent.

  • **A bug that is zero on the character you look at most is not a bug you will find by

looking.** Test the crossing case deliberately and early: same code, every input, not just the one it was written against.

  • When every check on the suspect comes back clean, suspect the wiring, not the suspect.

Clean weights, clean bind, clean export and a broken result is a configuration answer.

  • Two independent instruments beat one careful one. Agreement to a hundredth of a

millimetre between an offline file read and a live engine read is what closed this; either alone would still be an argument.

  • Toggling a setting off is not the same as never setting it. The "off" state here was

its own distinct failure, more dramatic than the bug, and it sat one keystroke away from being written up as the finding.

  • **A checklist that duplicates a living reference rots, because nothing recompiles a

checklist.** Two runbooks here had both drifted into teaching the exact step that caused this. Both were retired to pointers the same week.

← All devlog entries

Watch it get built. All of this goes up on YouTube as it happens — broken animations, buildings hovering a foot off the ground, the lot.

Subscribe on YouTube