Second Chance GazetteDevlogToken Use

A hexagonal window built in Blender leaves a gap of open wall down each side

blenderunreal-enginestatic-meshmetahumangroomgeometrysilent-failuremonte-carlo

Sunday, and fourteen men in black cars

There is an invented secret society in Second Chance. The Order of the Unsleeping Eye, Oakhaven Chapter No. 357, founded 1923, motto OCULUS NON DORMIT – the eye does not sleep. They occupy a corner plot that had been a grey placeholder box for months, and they are now in an Egyptian Revival temple with a chequerboard floor and a frieze of eyes running round the walls.

Fourteen men belong to it. On the night they meet, they drive in off the access road in black saloons, park themselves in their own bay, get out, and walk up the steps into the Temple. Nothing triggers it but the player being nearby. There is no mission, no cut scene and nobody telling you that you are not allowed in yet. You can follow them through the doors and stand at the back, and that is the whole of the mechanism. GTA 6 will not do that, because in GTA 6 the building is set dressing until the story says otherwise.

The inside of a tall temple hall with a black and white chequerboard floor, seen over the shoulder of the last man in. Fourteen men in black waistcoats and white shirts stand in loose rows facing a raised dais with a throne on it. A large hexagonal window with spoked bars fills the wall to the left, and wall lanterns burn down both side walls.
Fourteen men assembled in the Temple, checked in PIE. The scalability settings are down low here, so the stone reads flat.

James had been out for a 10k round the local parks first, in one go, on a sunny morning with half the town out doing the same. Sunday is the day something gets finished that will not fit in a weekday evening, and what got finished was mostly stone.

The arrival had already been proved end to end – fourteen cars, fourteen bays, 0.0 cm from where each of them was meant to stop. The last check on it was the fussy one and it was worth doing: the agent – Claude Code Opus 5, which does most of the driving here – confirmed not that fourteen bodies had spawned, but that each body was the right man, by asking the live actor what class it was. Testing for a body would have come back green with the old stand-ins still in.

The instrument that flagged everything

Then James looked at them properly and said two of those are the same bloke.

They were not the same bloke. They were a 62-year-old solicitor and a man in his forties with a brush cut, and on screen they were near enough identical. The reason was hair.

A MetaHuman's hair is a groom – tens of thousands of individual strands. On this machine the assembler guts them by default, down to about one curve each, and throws the eyelashes away outright. What renders after that is the scalp baked into the face texture and a set of card LODs, so a moustache goes, a beard goes, and the thing that made two men look like two men goes with it. All fourteen had been built without the repair pass ever being run.

The agent found the number straight away: one curve, on every groom it measured. Then it did the responsible thing, and that is where the afternoon went. It picked a control – a character James had already looked at and called fine – measured that one too, and got one curve again. A metric reading 1 for every single character, including the known-good one, is a broken instrument. So it stopped trusting it and switched to counting guides instead, which came back healthy: 1,978 on the Master's hair, before and after anything was done to it.

Guides survive the gutting. Curves are what render. The control was gutted as well, which is exactly why it read the same as the rest, and the whole population really was broken. The repair took Harold's hair from 1 curve to 53,096 and the two brush cuts from 1 to 101,619, and the men stopped being interchangeable.

A head and shoulders render of a middle-aged man against a plain black background. He has brown hair, a short stubble beard and a dark grey waistcoat over a white shirt with the sleeves rolled, and a dark red tie. A second man stands out of frame to the left.
A member on a plain black background, after the repair. The stubble and the hairline are strands again rather than a painted-on scalp.

A metric that flags everything is not automatically wrong. Check whether the population is genuinely all broken before you throw the instrument away – and verify on the spawned actor, because the same question asked of the Blueprint's defaults returns no groom components at all and prints a confident pass.

Thirteen chairs where fourteen would fit

Upstairs in the Temple there had been two long tiered benches down the side walls. James sent a screenshot out of Blender with both runs outlined on it: take these out, put loose chairs in, and keep whatever the benches are currently sticking through.

Measured, the benches were 1.24 m deep – two tiers of 0.62 – and had swallowed five floor-standing things whole: two ashlar plinths and all three tracing-board easels. Every one of them survived; only the benches went. The room mesh came down from 101,958 triangles to 100,662, which is nowt in the scheme of things but it is the right direction.

Seven chairs a side was the plan. Seven fits the south wall. It does not fit the north one, because the three easels stand 0.90 m off that wall, which puts one of them 0.275 m in front of a chair that lines up correctly on the floor tiles.

They do not intersect. Nothing overlaps. No assertion anywhere in the build would ever have fired, because it is not a collision – it is a clearance failure, and what it costs is a seated man's knees. Put to James with three ways out, he took the plain one: fewer chairs on the north wall. Six north, seven south, the break in each row landing at the same x so the room reads as one rhythm rather than two. Thirteen seats for the ten men who actually need one, the Master and both Wardens having thrones and the Chaplain standing at the altar.

His parents were in Rotterdam for three weeks, so the video call went on a while – his brother, and a new baby who is doing most of the talking. Roast chicken after, and carrot cake, and back to it in the evening with a film on that he was not really watching.

The evening they finally watched it

The behaviour that runs inside the Temple had been built, rebuilt and re-planned across several sessions, and every one of those changes had gone in without anybody seeing it run. Eight had stacked up. Late on, with the other sessions off the machine, James took the controls and they watched it.

It works. The men group up, walk to marks measured on the floor, shake hands, talk with the roles swapping over, break off and re-form. The first round put seven pairs on the stagger – three chatting, two mid-handshake, one walking in, one still forming – and five of the seven arrived at 0 cm off their marks.

The same twenty minutes then turned up three faults that no readback had. The seating fires correctly, routes correctly, puts nine men on their marks with zero yaw error, and stands every one of them on top of his chair rather than on it. The clothes freeze at the exact moment a man walks. And the escort, which is meant to shepherd the player back out of the Temple, forms a wall and traps him in it.

And then there was Cyril's waistcoat, which had been the one open clothing fault for days.

He was the only man in fourteen whose shirt and waistcoat floated clear of his shoulders – James found it by putting the camera inside him and looking out through his own chest. It sat open for a while because the garment was not broken. It measured a top of 171.68 cm in every single build: as found, after a full re-dress, and after minting a fresh wardrobe entry from scratch. Not drifting. Constant.

171.68 is where that garment sits on a body 193.37 cm tall, and 193.37 is the native height of the ready-made preset Cyril had been built from. His body was obeying its own 183 cm constraint perfectly well. The clothes had been cut once for the preset and never re-fitted to the man, and the 10.23 cm sitting above his shoulders matched the gap between the preset's height and the height asked for – 10.37 cm – to within 1.4 mm.

So he was recast: off the preset, onto a blend of three faces at 188 cm, re-rigged, and dressed after the rig rather than before it. The waistcoat fits.

A hexagon in a square hole

The great Eye window is the strongest thing in the building: a hexagonal frame 2.20 m to its points, set five metres above the Temple floor in the portal wall, glazed in rose glass, with a granite iris and seven rays radiating out of it.

The wall is pierced for it by cutting a square. That is how every opening in this kit is made – you take the profile and you push it through the wall.

A pointy-top hexagon 2.20 m to its points is only 2.20 × √3 wide. That is 3.81 m, in a hole 4.40 m across. Which leaves 0.295 m of open wall down each flank of the Eye, and four missing corners with it, and if you stood on the portico in daylight you could see the inside of the Temple through the gaps.

The good bit is that a comment in the neighbouring module had been saying for about a month that the surround was filled. It was not filled. Nothing had ever built it. This is the second time in three days that a comment asserting something was handled has turned out to be the only evidence that it was handled, and it is a cheap fault to catch and an expensive one to miss.

A large hexagonal window high in the wall of a dim temple interior at dusk. Seven spokes radiate from a dark red disc at its centre. The upper panes glow rose-red against the sky; through the lower panes a row of red brick terraced houses and chimney stacks is visible. Wall lanterns and a carved frieze of eyes and stars run along the wall below it.
The Eye glazed and the flanks filled, seen from inside the Temple at dusk.

The fill is six convex pieces – a strip down each flank and four corners. It gets built at the wall's own thickness rather than matched to the frame ring, which stands 3 cm proud on both faces. Built to the ring, the surround's front face would have ended up in exactly the same plane as the ring's, facing exactly the same way, over about 0.14 m² – which is the precise pair the project's z-fight analyser exists to find. Built at the wall's depth, the join is buried inside the ring and both faces of the wall stay flush with their own masonry.

Six hundred thousand darts

The corner pieces are quadrilaterals. They look like they ought to be triangles, and that is the bug.

What is being filled is the square minus a hexagon, and the hexagon used for the fill is 12 mm smaller than the frame, so that the seam bites into the ring instead of sharing a plane with it. But once the hexagon is 12 mm smaller, its top point no longer reaches the top of the square. A triangle drawn to that point therefore stops 12 mm short, all the way along the head of the window and again along the sill. Twelve millimetres by 3.8 metres. About 0.0435 m² of daylight, five metres up, in a rose-lit wall.

Nobody was ever going to see that by looking, and the exact arithmetic had already been wrong twice. So it was settled by throwing darts at it: 600,000 random points scattered across the square opening, each one asked three questions. Are you inside the window? Are you inside one of the six fill pieces? Are you inside neither? Every point that lands in neither is a hole, and the proportion of them is the area of the hole.

It is slow, it is approximate, and it was right when the algebra was not. The same check also asserts that no fill piece spills across the glass, and reports the deliberate 12 mm bite into the ring rather than flagging it – so it can fail in two directions instead of only being able to say yes. A test that can only pass is not a test.

Rockstar have somebody whose entire job is stone. He had a Sunday afternoon and a hexagon.

The fault

A hexagonal window built in Blender leaves a gap of open wall down each flank

The opening is cut as a square at the window's outer radius, but a pointy-top hexagon of circumradius r is only r·√3 wide. At r = 2.20 m the hexagon is 3.81 m across in a 4.40 m hole, so 0.295 m of wall is missing down each side, plus the four corners. From outside, the Temple interior is visible through the gap in broad daylight.

A comment in the module that registers the opening had stated for a month that the surround was already built. Nothing built it. The two functions are paired by nothing but that comment.

The fix

Fill the square with six convex pieces, at the wall's depth, and prove it by sampling

Two flank strips and four corner pieces, extruded through the wall's own thickness – not matched to the frame ring, which stands 3 cm proud of the wall on both faces. Matched to the ring, the surround's face and the ring's face end up coplanar and co-facing over about 0.14 m², which is the z-fighting case the geometry analyser exists to catch.

The corners must be quadrilaterals, not triangles. The fill hexagon is 12 mm inside the frame so the seam bites into the ring; because of that its apex no longer touches the top of the square, and a triangle leaves a 12 mm × 3.8 m sliver open along the head and the sill – 0.0435 m² of hole.

The guard: a Monte Carlo check over the opening. 600,000 random points in the square, each classified as inside the window, inside a fill piece, or inside neither. Neither is a hole. The same pass asserts zero spill onto the glass and reports the intended 12 mm overlap, so it fails in both directions rather than only being able to agree with you.

The fault

Two MetaHumans with different faces render as the same man

The assembler guts grooms to about one curve each by default on this machine, and drops eyelashes outright. What is left rendering is the scalp baked into the face texture plus card LODs, so beards and moustaches disappear and a cast reads as look-alikes. All fourteen members were built without the repair ever being run.

The diagnostic trap: num_curves read 1 on every character measured, including the known-good control, so the metric looked broken and was swapped for num_guides, which reads 1,978 before and after the fault. Guides survive gutting. Curves are what render.

The fix

Run the groom repair after every assemble, and verify on the spawned actor

Treat the repair as a required pipeline step rather than an occasional fix – it is not a VRAM accident, it happens every time. After the pass, the Master's hair went from 1 curve to 53,096 and the two brush cuts from 1 to 101,619.

The guard: measure on the spawned actor in the level, never on the Blueprint's defaults, which return zero groom components and print a confident pass. And when a metric flags every member of a population, establish that the population is genuinely healthy before discarding the metric.

The fault

Seven chairs a side leaves no room for a seated man's knees

Three tracing-board easels stand 0.90 m off the north wall of the Temple, which puts one of them 0.275 m in front of a chair placed correctly against that wall. The chair and the easel do not intersect, so no overlap assertion in the build could ever fire. It is a clearance failure, not a collision.

The fix

Fewer chairs on the blocked wall, and derive the row from the floor, not the wall

Six chairs north, seven south, with the break in each row landing at the same position so the two walls read as one rhythm. Thirteen seats for the ten men who need one.

The guard: the chair position is now an output of the chequerboard floor plate rather than of the gap left against the wall – against the wall they left a 0.34 m ribbon of bare slab and read as pushed-back furniture. If the easels ever move, the north wall goes back to seven.

The fault

One character's shirt and waistcoat float clear of his shoulders

The outfit measured a constant top of 171.68 cm through every rebuild – as found, after a full re-dress, and after minting a fresh wardrobe entry. A number that does not move under a rebuild is not a fitting failure.

171.68 cm is where that garment sits on a 193.37 cm body, which is the native height of the ready-made preset the character was built from. The body was correctly obeying its own 183 cm constraint; the garment had been cut for the preset and never re-fitted. The 10.23 cm measured error matches the preset-vs-requested height gap of 10.37 cm to within 1.4 mm.

The fix

Recast off the preset onto a blend, and dress after the rig rather than before it

The character was rebuilt off a blend of three faces at 188 cm instead of the preset, re-rigged, and dressed after rigging. That removes the preset and the mis-fit with it. Re-running the dress pass does not help and is a dead end – the garment is never fitted to him at all.

The guard: measure the outfit as well as the body, and treat a measurement that is identical across three rebuilds as a signature rather than a coincidence. Work out whose body that number does describe.

The kit

ToolWhy this one
Blenderevery piece of the Temple is generated by script from one module – no hand-modelled source file to go stale
Unreal Engine 5.8where it is assembled, lit and walked through
A Monte Carlo checksettled in one run a fill that exact arithmetic had got subtly wrong twice
PIEthe only place that proves fourteen men can actually drive in and park

Plain English

TermWhat it means
Monte Carlo checkTesting a shape by firing a great many random points at it and counting where they land, instead of trying to work the geometry out on paper. To prove that six pieces of stonework really did fill a square hole around a hexagonal window, 600,000 random points were thrown at the opening and each one asked whether it was inside the window, inside one of the fill pieces, or inside nothing at all. Points that land in nothing are holes, and the proportion of them gives the area of the gap — here 12 mm by 3.8 m of daylight that nobody would have found by looking at it. It is slow, it is approximate, and it answers a question exact maths keeps getting wrong.
groomHair built as individual strands rather than as a textured surface. Looks far better, costs far more to render.
MetaHumanEpic's system for realistic human characters — face, body, hair and clothing, ready to animate. Every named person in the game is one.
LODSimpler versions of a model, swapped in as it gets further away. The trick that lets a street hold hundreds of objects.
static meshA 3D model that does not bend — a wall, a bin, a bottle. It can be moved as a whole, but its shape is fixed.
actorAnything placed in the game world — a lamp post, a person, a trigger volume, a camera. If it sits in the level, it is an actor.
BlueprintUnreal's visual scripting. Logic built by wiring boxes together with lines instead of typing code. This whole game is built in it.
CDOThe template a Blueprint stamps out copies from. Editing the template does not always reach the copies already placed in the level, which is a classic silent failure.
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.
tri countHow many triangles a model is made of. The basic measure of how expensive it is to draw.
z-fightingWhat happens when two surfaces sit in exactly the same place, both facing the same way: the renderer has no way to decide which is in front, so it picks differently from frame to frame and the wall flickers. On this project it is a photosensitivity requirement rather than a polish one, so the geometry is measured for it rather than eyeballed.
scalability settingsThe engine's quality dials — shadows, textures, effects, anti-aliasing — each of which can be set independently. Turning one up can cost far more than turning the rest up together.

Things we still need to fix tomorrow:

  • The seating routes correctly and then stands every man on top of his chair, one seat-height

above where he should be.

  • The clothes freeze the moment a man walks. The outfits are leader-posed to the body and

running their own animation player, which are two mechanisms driving one mesh, and four of the graphs move a man without telling his clothes. Dropping the second mechanism deletes the whole class of it. Not done yet.

  • The escort forms a wall across the way out instead of steering the player through it.
  • The night shot of the car park – fourteen black saloons under the lamps – has not been

taken at proper quality yet.

  • The whole arrival has been finished for days and there is still no video of it.

← 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