Second Chance GazetteDevlogToken Use

Everyone in a Balaclava

unreal-enginemetahumantexturesoodlerdoderived-data-cachepackaginghijabblendergarmentsniagararainspriteedge-monstershalloweenworld-partitionpielip-syncnightclubroadmenclaude-codegta-vi

A Wednesday

It was a Wednesday, so James was at work. The game got built in the gaps either side of it, and from his phone.

The day before had ended at half nine when the tokens ran out. With nothing left to drive the agent, James had played the game himself for twenty minutes, and the first thing he said on Wednesday morning, to the agent, Claude Code Opus 5.5, was that everybody in the town was wearing a ski mask.

It was not a ski mask. It took until a quarter past nine to prove what it was, and the cause was a change he had said yes to the day before.

Everyone in a balaclava

The town has eight roadmen. After eleven at night they put on black tracksuits, gloves and balaclavas and go out. The kit had gone onto all eight on Tuesday, and here was the developer reporting that everyone else was in one too.

A woman with short blonde hair in a pink jumper and black trousers standing on dark wet grass at dusk, her whole face solid black apart from two pale glints where the eyes are.
From James's own play test on Tuesday night: a resident on the green at dusk with her whole face gone black. It reads as a balaclava from six feet away.

The agent did the obvious thing first, and did it proper. It searched every character asset in the project, byte by byte, for the balaclava mesh. Eight Blueprints referenced it, the eight lads. Of the 79 residents' data files, only those eight pointed at them. The part of the town that switches the kit on after dark matches by class and by tag. And the play test had run before eleven, so the log showed no switch at all.

So the kit could not be on anybody else. The agent said so, and said what it thought instead: these were not masks, they were faces with no texture on them yet. The log of that play test showed the game building 4,503 textures while it ran, 1,471 of them from MetaHuman face folders. Almost every face in the town had been rebuilt in front of him, and until a face is built it draws black.

The reason was the packaging work. On Tuesday James had said yes to a short list of fixes to the shipping settings. One was a line in the engine settings that switches on Oodle's rate-distortion optimisation, which makes textures smaller on disk at the cost of a slower encode. It was meant for the packaged game.

But the game he plays is not packaged. The play batch file runs the project with the -game switch, straight from the editor's files, and in that mode the engine reads the same encode setting the cooker does. Change it and every compressed texture gets a new key in the derived data cache. The cache had nothing under the new keys, so the engine rebuilt them all, live, while he walked about.

The line came out that morning. Compression of that kind now goes to the test cook alone, on its command line, where a play test cannot see it. By lunchtime James had agreed three more size changes, capping the largest clothing and plant textures. Those are written and wait for an editor slot, and the next play test will show whether any face goes dark.

Rockstar have a build team. He had a Wednesday at work and a phone.

Jordan

While it had the roadmen open, the agent found that one of them did not match. Jordan had been built a week earlier as an ordinary resident, before the gang existed, and was given a white hoodie. The other seven got black. In Tuesday's stills he crosses the green in a cream hoodie and a balaclava, like a man on his way to a fancy dress party.

A lad in a cream hoodie, black trousers, black gloves and a black balaclava walking along a path across a green towards a row of red-brick terraces in bright sun.
Jordan in Tuesday's stills, kit forced on in daylight: balaclava and gloves, and a cream hoodie nobody else in the gang wears.

James said, at one minute to twelve, that Jordan should match. It is a recolour, not a rebuild, so his gang kit survives it. It is staged for the next three-minute slot.

Sana

GTA VI is set in a version of Florida. A town in the Midlands at ten in the morning has women in headscarves walking to the job centre, and a game that wants a British player to believe in it has to have them too.

Sana is one of the new residents, and on Tuesday evening James asked for her hijab to be built in Blender, as realistically as possible. He had said in the middle of October to skip it. He changed his mind, and his words that evening were that if it looked good, the other Muslim women in the town should have one too, in different colours.

The agent tried a cloth simulation first, because fabric draped over a head is the textbook case for one. Blender's cloth scrunched the whole drape up onto her neck and pulled it to one side. The simulation was switched off and it never went back on.

What replaced it was geometry. The agent built the hijab as one surface, made of columns running round her head at fixed angles. For each column it fired rays inward at the scalp and kept the outer hull of what they hit, so the cloth sits over the hair without following every curl. Rays from outside would have landed on the eyes and teeth that sit inside a MetaHuman's face mesh. Below the jaw a second hull ran down to the top of her blouse, bridging the neck. The folds are fixed rather than random, so every build comes out the same.

It is tied only to the bones of her head, neck, upper spine and collarbones, 16 of the skeleton's 341, so her arms move freely underneath. It came out at 22,900 vertices.

Two Blender traps cost most of an hour. Importing her face file first gave its armature the name the body's armature needed, and the script had to rename it back. And the hijab exported a hundredth of its size until it was put into the body's own centimetre space before parenting.

James looked at the Blender previews at 10:36 and said it looked good. It went into the editor four minutes later.

A woman standing in an A-pose against a plain blue backdrop, wearing a black hijab that covers her hair, neck and shoulders and frames her face, a patterned long-sleeved top and dark jeans.
Sana in the editor, arms out in the standard pose, wearing one of the colours tried on Wednesday morning.

The first material looked wrong. It came from a bought hoodie, the same one the gang's gloves use, and on this hijab's unwrapped surface it drew black blocks and ignored any colour it was given. A plain garment material fixed it, though it reads about twice as light as the number typed into it, so the dark colour had to be typed darker still. Sana's ended up a dark navy. Played walking at 35 per cent speed, the hijab followed her and nothing tore.

A woman in a dark navy hijab and patterned long-sleeved top walking across stone paving towards the camera at dusk, red-brick houses and young trees behind her.
Sana in the town, in the dark navy she kept.

Two more are built in Blender: Rokeya's in burgundy, and Parisa's, which is meant to be floral and is plain until a printed version is made. Nusrat's will be black, James said, at 10:37.

The Seven

Past the edge of the town there is English folklore, one monster a day until Halloween. Wednesday was the Seven.

They start as whistling overhead, out of a dark sky. Three notes at first, then more, up to seven, and the caption counts them. Stay out on the moor and a ring of red eyes comes up out of the grass, eight pairs, 20 to 30 m away, low to the ground, drifting. Look straight at a pair and it blinks out and comes back somewhere else on the ring. Later in the night the chittering stops. A second later something comes from behind at 6.5 m a second, and you wake up in hospital.

The rats are the town's ordinary rat model at five times the size, 1.86 m from nose to tail. The whistles were made in code, a hollow note around 2 kHz. The chittering and squeals came from free recordings.

A dark grassy field at night in rain, the white streaks of falling drops across the frame, and two small pairs of red-orange eyes glowing low over the grass in the middle distance.
The Seven in the test: two pairs of eyes low over a wet field at night, the white streaks in the air being rain.

It was built, placed and played in one slot. The first test sent the player to the furthest site, right out at the map's edge, and he fell straight through the ground. Nothing was wrong with the ground. For its first 30 minutes the test mode only loads about a third of the usual distance around the player, so the hill had not arrived yet when he did. The next test went to a nearer field. Runs of three and four whistles, eight pairs of eyes, then the hush, rats from 26.7 m behind, contact 3.9 seconds later, hospital.

The rats close up, the blink and the loudness are next. Thursday is Rawhead.

The squares in the rain

The rain had been drawing black, magenta and green squares in the air, and Tuesday's entry said why: one part of the rain effect drew with the engine's default sprite material, a flat test square. The plan was to switch that part off.

On Wednesday's slot the agent opened the rain to switch it off and found it was already off. The squares were coming from two other parts, the splash crown and the splash ring, which had no material at all. A sprite with no material draws the default one. The default is a square.

So the crown and ring got their own materials back. The effect compiled with no errors, and only that one asset was saved. Seeing it in heavy rain at eye height is next.

The same slot built the C++ for phone calls, the job centre and the gym's machines, green on the first go.

Clement on the sofa

The local radio station, Oakhaven FM, is getting a video for X, with real lip sync on everyone in it. Clement is a caller on his sofa.

There was no clip of a man sitting down on the phone. So the agent took a stock clip of somebody seated and talking, and a stock clip of somebody standing on the phone, and grafted the second one's upper body, from the bottom of the spine upwards, onto the first one's legs. The phone grip was worked out from where his face skeleton puts his ear. Five pilot renders, then 569 frames.

Close on an older man with a white moustache and white eyebrows sitting on a dark sofa in a pale shirt, holding a mobile phone to his ear, mid-word.
Clement on the phone to the station, from the finished render.

James said it was a better hand and phone position. The open question is whether Clement's short haircut shows in the render. The moustache does.

The bin crew were next, and James stopped them at 19:31. The straps of their hi-vis vests vanished into their T-shirts at the shoulder. The vest had been cut from the old shirt the men used to wear. Since the middle of October they have worn a different one, and the vest was never refitted to it. And in the frames already rendered, one of them stood slightly sunk into the road, because the road falls away towards the lorry and nobody had measured the spot he stood on. The refit is under way, and every foot gets measured before the bin crew render again.

Five past seven

James went into the Sweatbox, the town's nightclub, at five past seven in game time. It opens at seven. Christie was dancing. There was nobody else, not even behind the bar.

The agent read through the town's files and found five separate reasons, any one of which would have emptied it. The 42 club regulars had never been given homes in the town, so none of them existed. The residents' evenings come from a weekly plan that only puts anyone in a club from half ten. The code that sends people clubbing only does it on Fridays and Saturdays, from quarter to eleven. The barmaid's shift starts at half seven, give or take half an hour. Christie was there because her own Blueprint runs from seven until four.

The design has a queue outside from half six and the place filling by eight. What he found was peak. Every one of the five is now written down. Nothing has been changed yet.

Overnight

Every remaining resident is getting a body. Between 20:52 and 22:42 a loop that drives the editor with the mouse built 68 of them. At 22:47 James said to skip the plain test stills and go straight to dressing, and the coordinator gave the bodies thread the editor for the night. Eight were dressed by 23:25.

At 22:01 he asked for one more thing. Shirley, the neighbour at number 4 Radworth Road, keeps hens. The plan is for the player to open her back gate with U and let them out, or catch them by sneaking up behind while they peck, and carry them back. If she sees them loose she rounds them up. If she sees the player holding one, she calls the police. The scripts are written; running them in the editor is next.

Then the dressing carried on without him.

The fault

MetaHuman faces render solid black in a -game run after a texture setting change in Unreal Engine 5.8

  • Every MetaHuman face in the town drew black, so residents looked like they wore balaclavas. Uncooked standalone run (-game), not PIE.
  • The log showed 4,503 textures built at runtime, 1,471 of them MetaHuman face textures.
  • Wrong guess: the night-gang balaclava applied to everyone. A byte search proved only the eight gang Blueprints reference the mesh.
  • Cause: bFinalUsesRDO=True added to DefaultEngine.ini for the packaged build. An uncooked -game run resolves its encode speed to Final, the same as the cook, so every Oodle-compressed texture got a new derived data cache key and was rebuilt live.

The fix

Keep cook-only texture settings off the play test

  • Removed the line from DefaultEngine.ini (backed up first). Oodle RDO is now passed to the test cook only, on its command line.
  • Guard: any texture encode setting (Final encode, LOD groups, compression) re-keys the cache for -game runs too. Warm the cache before the next play test, or expect thousands of live rebuilds.

The fault

Blender cloth simulation scrunches a hijab onto the neck; garment material draws black blocks

  • Blender cloth on a head drape pulled the fabric up onto the neck and to one side.
  • In Unreal, a material built for bought hoodies drew black blocky patches on the hijab's automatic UVs and ignored its colour parameter.
  • Blender import traps: the face FBX imported first took the body armature's name (root); the mesh exported at 1/100 scale unless moved into the armature's centimetre space before parenting.

The fix

Build the drape as geometry and use a plain garment material

  • Cloth simulation off. One parametric surface: columns by angle, rays cast inward to the scalp, convex hull per column, a jaw anchor and a second hull down to the top garment.
  • Weighted to 16 head, neck, spine and clavicle bones of 341; 0 unweighted vertices.
  • Plain garment material in Unreal; it reads about twice as light as the value set, so set colours darker.

The fault

Niagara rain still draws coloured squares after its suspect renderer was disabled

  • The renderer blamed on Tuesday was already disabled.
  • Cause: the splash crown and splash ring sprite renderers had no material assigned, so both drew DefaultSpriteMaterial, a flat square.

The fix

Give every sprite renderer its material back

  • Restored the ring and crown materials (both set for use with Niagara sprites, translucent). Compiled with 0 errors, saved that one system.
  • Guard: check every renderer in an emitter for an empty material slot before disabling anything. Not yet seen in heavy rain at eye height.

The fault

PIE pawn falls through the landscape at a far map-edge site in Unreal Engine 5.8

  • Teleported to a test site at the far edge of the map, the player fell straight through the ground.
  • Cause: this map's World Partition dynamic loading range scaling holds PIE to 35 per cent of the loading range for its first 30 minutes. The landscape there was not streamed in yet.

The fix

Test near, or turn the scaling off for yourself

  • Run the test at a nearer site, or tick the editor preference that disables dynamic loading range scaling for your own PIE. It changes nothing in the level.

The fault

Nightclub empty at opening time: only one NPC inside at 19:05

  • Doors open at 19:00. One dancer, no bar staff, no customers.
  • Five independent causes: 42 regulars never baked into the town; residents' evening blocks start at 22:30; the clubbing code runs Fridays and Saturdays from 22:45 only; the barmaid's shift starts 19:30 plus or minus 36 minutes; the dancer runs on her own Blueprint clock.
  • Diagnosed. Nothing changed yet.

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.
textureAn image wrapped onto a surface to give it colour and detail.
RDOA texture compression option that makes files smaller on disk by accepting a tiny loss of detail. It is slower to encode, so it is meant for the packaged game, not for every play test.
derived data cacheThe engine's store of already-processed versions of assets, such as compressed textures, so it does not redo the work every time. Change a setting that feeds the processing and everything gets redone.
cookThe step that turns the editor's working files into the compact, platform-ready files a player downloads. Anything the cooker is not told to leave out ends up in the package.
cloth simulationWorking out how fabric falls and folds by calculating it, rather than modelling the folds by hand. Expensive, and usually baked down to a fixed shape before it reaches a game.
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.
FBXThe interchange file format used to move models and animation between Blender and Unreal.
NiagaraUnreal's particle system - rain, smoke, sparks, dust, fizz on a pint.
spriteA flat picture, such as a puff of smoke, drawn by a particle system - usually turned to face the camera so it never looks flat.
World PartitionUnreal's system for very large maps. It chops the world into a grid and only loads the squares near the player.
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:

  • Play test again and watch for any face that goes dark.
  • Run the texture caps James agreed, in an editor slot.
  • Jordan's hoodie to black.
  • Rokeya's and Parisa's hijabs into the editor, a floral print for Parisa, and Nusrat's in black.
  • The Seven's rats up close, the blink and the loudness. Rawhead on Thursday.
  • See the rain in a downpour at eye height.
  • Refit the bin crew's vests, measure the road under every foot, then render the bin crew.
  • Give the 42 club regulars homes, and open the Sweatbox at seven with people in it.
  • Dress the rest of the 71 residents.
  • The hens.

← 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