Mind the Gaps
Curved meshes could develop see-through patches that wandered when the camera moved. The cluster culling maths was wrong in three separate ways, and hidden-surface skipping turned out to be off entirely. All four are fixed, and the chair is whole again.


If you rendered the lounge chair from The Weave Comes Into Focus and noticed you could see the wall through the seat cushion, that was not a bold upholstery choice. The renderer was deleting pieces of the chair. Move the camera and different pieces vanished, which is the sort of behaviour that makes an artist question the scene, then the export, then themselves. It was none of those. It was us.

Three bugs in a trench coat
Lux slices every mesh into clusters of at most 124 triangles and, each frame, skips the clusters that face away from the camera. Back-face culling at wholesale prices. The test for “faces away” is textbook maths, and the textbook was followed almost exactly.
Almost, three times over. First, the builder stored the cosine of each cluster’s normal spread where the GPU test needed the sine. On flat clusters that error is harmless, they simply never get skipped, which is why the wooden legs never blinked. On tightly curved clusters, tufted velvet say, it skips things you are looking at directly.
Second, the shader reconstructed the camera position from a matrix slot that held a different matrix entirely. The reconstruction produced a phantom viewpoint hovering inside the chair, and every facing decision was made from there. From inside the cushion, quite a lot of the cushion legitimately faces away.
Third, and found only because fixing the first two made the culling actually work: the cluster bounds were tested in the mesh’s own local space, ignoring the object’s transform. Rotate the chair 180 degrees and the culling maths still reasoned about the unrotated one. The result speaks for itself:

That one never shipped, it appeared and died on the operating table the same afternoon. Rotated, scaled, and instanced objects now all cull correctly, and cases where the maths cannot be sound (non-uniform scale, mirrored transforms, skinned meshes mid-animation) simply skip the optimisation rather than guess.
The optimisation that wasn’t running
The same mislabelled matrix slot had a second casualty: occlusion culling, the pass that skips objects hidden behind other objects, had been reading a matrix of zeroes since the day it landed and politely declining to cull anything. It fails safe, so nobody noticed, which is precisely the problem with optimisations that fail safe. It is now fed the real matrix and is skipping hidden geometry for the first time. Frames you were owed all along.
Trust, but verify with a readback
A correct cull changes no pixels, so you cannot screenshot your way to confidence here. The gates that now stand guard: a CPU twin of the GPU cull that checks every skipped cluster against the actual triangles, a GPU readback test that rotates a synthetic draw and verifies exactly which half of its clusters survive, and a tripwire that renders the chair’s fabric and counts background pixels showing through the upholstery. On the way through we also found the old helmet reference image had these very holes baked into its silhouette, so it has been re-shot against a cull-free render.
The chair renders whole from every angle we can throw at it. As it happens, so does everything else.