Second Chance GazetteDevlogToken Use

Somebody Has to Back Up

unreal-enginemetahumanmetahuman-creatorhijabblendergarmentsmaterialsuvinverse-kinematicstrafficnavmeshchildrengroomeditor-crashmushroomsclaude-codegta-vi

A Thursday

It was a Thursday, so James was at work, and most of what follows happened on the end of his phone.

By then the game was being built by several sessions of the agent at once, Claude Code Opus 5.5, with a coordinator session handing out the one editor like the keys to a shared van. One thread dressed residents. One wrote traffic code offline. One built children. Another did nothing but drive the editor with the mouse when the others asked it to. James answered questions between whatever he was paid to do.

Thursday's slot was supposed to be Rawhead, the next monster for Halloween. It went to Friday. Children took the editor until twenty to one in the morning, and the traffic in the town turned out to need a rule that every British driver learns on a terraced street and nobody writes down.

Five scarves

On Wednesday Sana had been given a hijab, built in Blender and fitted to her own head. James had said that if it looked good, the other Muslim women in the town should have one too, in different colours. By three minutes past one on Thursday all five of them did.

Rubina's is ruby. Nusrat's is black, as James had asked. Ghazala's is navy, Nadia's charcoal and Hodan's plum, all built in one headless Blender run and fitted in the editor. The colours had to be typed two to four times darker than looked right, because the garment material reads lighter and dustier under that blue sky than in any colour picker.

Then James looked at the front shots and asked a question. Three of the women had been dressed earlier in the week, before anyone knew about the hijabs, in a strapless ruffled top. With a hijab over it, they had bare shoulders either side of the scarf, and the dark bottoms underneath were showing through the top at the waist.

Three head-and-shoulders panels against a blue sky. Left: a woman in a ruby hijab over a strapless dark grey top, bare shoulders either side of the scarf and dark patches showing through the top. Middle: the same woman and hijab over a cream long-sleeved lace blouse. Right: a different woman in a hijab with a pink and cream floral pattern over a navy jumper.
Left, Rubina as she was: a hijab over a strapless top, bare shoulders, the bottoms coming through at the waist. Middle, Rubina after James asked for sleeves. Right, Parisa in the floral print.

Sleeved tops for hijab wearers? At twenty-five past one he made it an instruction: sleeved tops for all of them. Only those three needed it. The other four were already in jumpers, a lace top and a shirt. Rubina got a cream blouse and black jeans, Nusrat a cream jumper, Ghazala a grey blouse. Nadia's shirt hem had jeans showing under it, so the shirt was tucked in. All re-dressed by 13:42, hijabs re-added, every one checked.

Parisa's had been the awkward one all week, because she was meant to have a floral one. The agent found a free floral jacquard pattern, levelled it into a mask, and put it on her hijab. It came out as flat blobs. Not a pattern drawn badly. No pattern at all, just patches of colour.

Wednesday's entry had blamed the material for the same blocks. The cause was underneath. The hijab is built as one surface of columns fired at the scalp, and nobody had ever unwrapped it properly. Its UVs, the map that tells a texture where on the surface each pixel goes, added up to almost zero area. Every pixel of the pattern was being asked for from about the same spot.

The fix skipped the UVs entirely. A new garment print material takes the pattern from the hijab's own position in space before the body bends it, and blends it from the side and the front, so it sticks to the cloth as she walks. That position only exists in the first half of the material, so it has to be passed through to the second half by hand, or the material will not compile. Parisa's pattern tiles every 30 cm, rose on cream.

Twenty-five seconds

The coordinator gave the go for a build at 16:44. Two of them, in fact: one with fixes for the phone, the police and the boy racers, and one with the magic mushrooms. Both compiled green. The test ran from 17:47 to 18:19, and it came back the way most of them do, part pass and part not.

The job centre passed. Residents going in at the back had been snagging on a lip in the paving 56 to 59 cm high and standing there. The navmesh, the invisible floor plan the residents walk on, got three strips marked as no-go, and two residents went round to the front door in about 18 seconds. Jordan, the roadman in the cream hoodie, went round the south side without catching on anything.

A man in a cream hoodie standing by the windows of an office with desks behind him, holding a phone flat against his mouth and chin rather than his ear.
Jordan at the job centre, mid-call. The phone was meant to be at his ear. It sat at his mouth for the whole test, whatever values went in.

The phone did not pass. Residents who take a call are meant to hold the phone to the ear. A setting had been wired into the animation that moves the hand to the ear, and two sets of numbers had been tried for it. With either set the phone sat at the mouth. The grip on the phone changed when it was told to. The ear offset did nothing anyone could see. The agent's verdict was that this is not a numbers problem: whatever the ear values do, the hand moves less than the natural wobble of the talking animation. A fourth set of numbers is not the fix.

The racers half passed. On Wednesday the drivers had a habit of standing up through the roofs of their own cars after a minute or two. Thursday's build stored the seated pose so it could not be lost, and a driver sat in his car for five and a half minutes. Then Connor, at the very start, stood up through his roof for about 25 seconds while his car crawled away from the kerb.

A black sports car at a junction of red-brick terraces under a blue sky. The bald driver is standing up through the closed roof of his own car, his head and shoulders above it.
Connor at a junction, standing up through the roof of his own car.

The agent read it as a different bug wearing the same clothes. Steering is done by scrubbing an animation of the wheel turning, from one end for full left lock to the other for full right. At full right lock the position landed exactly on the length of the clip, which is one frame past its last key. The fix is to stop one frame short. It is written and waiting for the next build. The roof will say whether the agent was right.

Somebody has to back up

The police test never happened, for a reason that turned out more useful than the test.

The patrol car got as far as a terraced street with cars parked down one side and met a taxi coming the other way. Behind the taxi came the route 4 bus. Nobody moved. The taxi could not get past the bus, the police car could not get past the taxi, and the bus had nowhere to go. They stayed like that until the test ended.

Dusk on a narrow terraced street with wheelie bins out. A grey taxi and a police car in yellow and blue livery sit nose to nose with a purple route 4 bus coming the other way, parked cars along the kerb behind them, nobody able to move.
A taxi and a police car nose to nose with the route 4 bus on a terraced street at dusk. They stayed like that for the rest of the test.

GTA VI is set in a version of Florida. In a Midlands town, working out who reverses forty yards down a terrace so a bus can get by happens on every other street, every day, and everybody knows the rule without being told: the one with the parked cars on their side waits, or backs up, and gets a flash of the headlights for it.

So that afternoon one of the agent's threads wrote the rule down. The plan is that when two vehicles meet on a road too narrow to pass, the town will decide who gives way. The one with the obstruction on its side waits. If it has already committed past the parked cars it will reverse about 20 m to a gap, or tuck in and mount the kerb if there is room, and anything queued behind it will back up with it. The other one comes through, and they carry on. A guard stops a car reversing into whatever is behind it, and a bus that will not squeeze past a tucked-in car gives up after 20 seconds so the two can try again.

It was written against an offline copy of the decision code first, eight test meetings, eight passes, and it is staged for the next build. The first proper test is that same street, that same taxi and the same bus.

Rockstar have a traffic team. This one came out of a police test that did not happen.

Out of season

The mushroom build was the other half of the evening. Liberty caps grow in a handful of the old pastures by the railway, and the plan is for the player to find them, pick them with E, and either eat them or sell them. The code was in the build and the logic passed in the test. The caps were nowhere. The game said the season was zero.

It took the agent a while to say why, and the answer was a calendar. The mushroom code had asked the town's event scheduler what the date was. The scheduler has a start date, and the start date defaults to the first of June. Nothing in the game uses months, so nothing had ever moved it. As far as the mushrooms knew it was early summer, and liberty caps do not come up in June.

James settled it at 18:35. The month is not used in the game, so the mushrooms do not need one. They are in season always now, in bigger patches, up to six metres across with 20 to 60 caps at a time, so they can be found. He decided a minute later that they might as well have the red ones too.

Three toadstools on a white background, left to right: a small round white egg flecked with red, a red cap with white spots on a pale stem, and a wide flattened orange cap with faded spots on a taller stem.
The fly agaric at three ages, from the offline build: the egg, the prime red cap, and the old one gone flat and orange.

By five to seven the fly agarics existed offline: three ages of mesh and texture, 268 birches and pines in the park, the station, the golf course and by the railway marked as places they grow, a heartbeat and a whoosh for the sound, and a very different high written for the screen. Importing it all is next, then picking one for real with E.

The goatee

The longest thread of the day started at one minute past five, when James looked at the stills of the town's teenagers and asked for all eight to look younger. He was right; on a grown-up face base, even a slim build reads older than it is. They were reshaped, rebuilt and dressed by quarter to eight. He accepted them at nine minutes past eight, and a minute later said one of the girls still looked the oldest. Her face was blended again from younger faces and her jaw narrowed.

Then the under-13s, twenty of them, who until Thursday had names, families and routines and no bodies. Their bodies are made in Blender at exact heights, from 96 cm to 152, and then fitted to a MetaHuman by MetaHuman Creator's conform, which there is no script for. That part is graft, done by the mouse, one child at a time.

On the first test child the agent found a dark goatee under the chin. It checked the hair, the skin, the roughness, the body, the level of detail and the ambient occlusion before it said what the goatee was: a shadow. The fitted jaw sat almost flat underneath, and the light from above laid the chin's shadow straight across it. The fix went back to Blender. Each child got a slightly more defined chin before the fitting, checked by numbers, not by eye: the angle under the chin roughly halved on all five. The heights stayed exact.

The same child had a blond band across its dark hair. The agent turned the child round and the band stayed put on the screen, which a fault in the hair would not do. It was a rim light left in the test level, shining through the thin top strands.

Two rows of fully clothed figures on a blue background, front view above and side view below: five young children in hoodies with tracksuit bottoms or leggings and trainers, in lilac, red, pale blue, bright blue and pink, and a taller teenage girl in a grey hoodie and black joggers at the end.
Batch one in their own clothes, front and side, with one of the teenagers at the end for scale.

Between 21:11 and 21:37 the mouse session fitted all five of the first batch, every one within a centimetre. At 21:43 the first save of the next step crashed the editor. The script had opened the child's MetaHuman for editing and saved it while it was still open, and the save tried to draw a thumbnail of the open editing preview. The fix is one line: close it first, then save. The script that was about to do the same thing to five children at once was patched before its first run.

The clothed stills went to James at two minutes to eleven. By twenty-five to one, ten of the twenty had bodies, hair, clothes and a week of routines written down. Homes in the town are the last step, all at once, when the rest are done.

At twenty to one the editor went to Rawhead.

The fault

Floral texture on a Blender-built garment renders as flat blobs in Unreal Engine 5.8

  • A floral mask on a hijab built in Blender drew as flat patches of colour, not a pattern. A bought hoodie material had shown the same black blocks the day before, and that material got the blame.
  • Cause: the garment's UVs were degenerate. Built procedurally and never unwrapped, its summed UV area was about zero, so every texture lookup hit nearly the same point.

The fix

Project the print from the pre-skinned position instead of the UVs

  • New master material M_GarmentPrint: base colour, pattern colour, pattern map and tile size, projected from PreSkinnedPosition and PreSkinnedNormal with a box blend (x|z against y|z), so the print sticks to the cloth through the skinning.
  • PreSkinned* are vertex-shader only: pass them through a VertexInterpolator or the material will not compile.
  • Guard: any garment you built yourself, check the UV area before texturing it.

The fault

Two Bone IK effector offset has no visible effect: the NPC holds the phone at the mouth, not the ear

  • An ear offset parameter wired to TwoBoneIK_0.EffectorLocation in a post-process animation blueprint. Two value sets tried; with both, the hand stays at the mouth and chin. The grip parameter in the same graph works.
  • Wrong guess: the values. They move the hand less than the noise in the talking animation.
  • Not fixed yet. Suspects: the IK target's space, its alpha, or the talk layer evaluated after the IK.

The fault

NPC driver stands up through the car roof seconds after spawning

  • After the seated-pose fix, a driver sat for 5.5 minutes. Another stood through the roof for about 25 seconds at spawn while his car crawled.
  • Cause found, fix staged, not built: the steering scrub was set to a position equal to the clip's PlayLength at full right lock, one frame past the last key. The scrub's contract is length minus one frame.

The fault

Taxi, police car and bus deadlocked on a narrow street with parked cars

  • AI traffic met head on beside parked cars and stopped for good. Nothing in the traffic code decided who gives way.
  • Staged, not built: a give-way pass. The vehicle with the obstruction on its side gives way; if already committed it reverses about 20 m or mounts the kerb; followers reverse with it; a trace guard stops it backing into anything; a refused pass gives up after 20 s. An offline mirror of the decision passes 8 of 8 cases.

The fault

Child MetaHuman shows a dark goatee under the chin, and a blond band across the hair in editor stills

  • Hair, albedo, roughness, body, LOD and ambient occlusion all ruled out first.
  • Causes: the goatee was the jaw's cast shadow on an under-chin left almost flat by the conform. The band was the test level's rim light transmitting through the sparse top strands; it stayed fixed on screen as the child turned.

The fix

Shape the chin before the conform, and hide the rim light

  • In MPFB, before the conform: chin-prominent +0.3, chin-bones +0.2. Under-chin drop angle on five children went from 6.2/4.2/6.8/2.0/9.7 degrees to 3.1/1.7/3.7/0.5/6.1. Heights unchanged.
  • Hide the rim light while shooting. A groom shot taken straight after rotating the actor can also draw bald patches: take a warm-up shot first.

The fault

Editor crash in save_asset: ShaderParameterStruct.cpp:643 null resource when saving a MetaHuman Character

  • Python saved a MetaHuman Character asset while it was still open for editing. The save rendered a thumbnail of the editing preview and crashed.

The fix

Release the MetaHuman before saving it

  • Call the subsystem's remove_object_to_edit on the character before save_asset. Batch scripts open one at a time and release round every save. Nothing was lost; every later save went through.

Plain English

TermWhat it means
MetaHumanEpic's system for realistic human characters - face, body, hair and clothing, ready to animate. Every named person in the game is one.
conformFitting a MetaHuman's standard face and body to a mesh made somewhere else, so a character built at an exact size in another tool can use the MetaHuman rig, hair and clothing.
UVThe flat pattern that says which part of a 2D image lands on which part of a 3D model. Wrong UVs mean the texture arrives stretched or in the wrong place.
master materialThe one material a family of surfaces is built on; every instance of it inherits its logic and only changes the settings.
pre-skinned positionWhere a point on a character's mesh sits before the skeleton bends it. A material that reads it can lay a pattern on clothing that stays stuck to the cloth as the character moves.
inverse kinematicsWorking an arm or a leg backwards from where the hand or foot has to end up, instead of playing whatever the animation happened to record. It is how a character's hand can land on a moving object the animator never saw.
animation blueprintThe logic deciding which animation a character plays and how one blends into the next.
navmeshAn invisible map of walkable ground that characters use to work out routes. No navmesh, no walking.
groomHair built as individual strands rather than as a textured surface. Looks far better, costs far more to render.
rim lightA light placed behind or beside a subject to pick out its edge. Left in a test scene, it can shine through thin hair and look like a fault in the hair itself.
LODSimpler versions of a model, swapped in as it gets further away. The trick that lets a street hold hundreds of objects.
offline modelA small program run outside the game that copies the game's own sums line for line, so thousands of test cases take seconds instead of an evening of playing. It is only worth anything once it reproduces what the game already did.
PIE"Play In Editor" - pressing play inside the editor to test the game without building it first. Fast, and it behaves subtly differently from the real build.

Things we still need to fix tomorrow:

  • Find why the ear offset does nothing, then the phone goes to the ear.
  • Build the steering fix and watch Connor's roof.
  • Build the give-way pass and send the taxi down that street again to meet the bus.
  • Run the police test again on a clear road with the shift switched on.
  • See liberty caps in a field and pick one with E. Import the fly agarics.
  • Ten more under-13s, then homes in the town for all twenty.
  • Rawhead on Friday.

← 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