The day every animal came out white: a palette computed, uploaded, and thrown away
The report arrived in five words: yes, all the animals are white. A day earlier every creature in The Long Watch had traded its placeholder box for a real voxel body. Now forty species walked the world as blank white shapes, wearing fur colours that had been computed correctly and thrown away somewhere between the model and the screen.

Colour is a product
Earlier the same morning, on the parallel arc giving the world’s plants the same treatment, we had stopped to measure something nobody yet needed. A voxel model carries two colours: the palette baked into its surface, and a per-instance tint applied when it is drawn. How do those combine? The engine’s documentation was silent, so we opened a window on a real graphics card, ran the cases, and wrote the answer down: they multiply, component by component, before the shader ever runs.
That note cost an hour and had no customer. By the afternoon it was the reason the next few hours were a fix rather than a hunt.
The material that was never there
The symptom was confirmed by eye first, then measured properly: three cases compared side by side on identical geometry, changing one thing at a time. The cause turned out to be embarrassingly slight. When a baked mesh ships with no material attached at all, the engine hands it an implicit default, and that default is colour-blind. It behaves as though it had been told to ignore the colours painted into the surface entirely, and it discards the per-creature tint along with them.
The authored palette was computed, uploaded, and then discarded by the shader.
Which explained the one thing that had never gone wrong. For months the animals had been drawn as coloured boxes over a simulation that never felt them, and those boxes had always shown their colours faithfully, because the fallback box was the only shape in the creature code carrying a material of its own. The moment we replaced it with something better, the colour went. On the plant branch the same defect had already been worked around without anyone naming its cause; a comment there recorded, flatly, that the model renders default white.
White, and it has to stay white
The fix is a guarded block attached to the mesh at the point it is baked: give it a material, and tell that material to read the baked palette as its surface colour. Then leave the material’s own colour at pure white, and leave it there permanently.
That last instruction earned a comment far longer than the code it guards, because it reads as an oversight and is the opposite. The combination is a product, and white is the identity of a multiply. Any tint on the material could only filter what lies beneath it; a green surface colour would mud every palette in the game. A future reader, finding a species colour already configured a few lines away, would otherwise helpfully plug it in and break the whole world again in one keystroke.
The oak that arrived as mint
Curing the white uncovered the bug standing behind it. With the shader finally reading the palette, the colours came through pale and chalky. The palettes are authored in sRGB and were being read as though they were already linear, then display-encoded a second time on the way out. A deep forest green, written for oak foliage, rendered as pale mint.

We wrote the second reference note before the second fix, the same way as the first: a windowed probe, four cases, each checked against an exact predicted value. Then one flag at each of the three places the plants set up their materials, and a follow-up that carried it across to the path where creature bodies are baked.
The conversion applies to the already-multiplied product, which is why the fur design came through the whole episode untouched. A creature’s individual tint was always meant to be a near-white multiplier, a faint overlay of individuality on top of the species palette rather than a recolour of it, and white barely moves a product at all. The final render was designed as three factors in agreement: the material’s white, the baked palette, the individual’s near-white tint. Only the first was missing.
Why nothing caught either one
The creature checks were in good health throughout. They counted the animals. They watched what happens to a body when it dies. They measured the frame rate. They even confirmed that two variants of the same species had genuinely different colours baked into them, and that one passed, because they did.
Every one of those assertions read mesh data. Not one of them had ever sampled a rendered pixel.
Both fixes shipped with new witnesses that close exactly that gap: bake a real rabbit through the real baking path, render it against black, and fail unless the pixels come out chromatic. Each was proved to bite before it was trusted, by reverting the fix and watching the right test go red with a message naming the symptom in words. The plant-side fix was cross-checked the same way.
Two branches, one wound
The creature arc and the plant arc were in flight at the same time on separate lines of work, and the defect belonged to both. Rather than leave the two fixes to collide later, each was merged across deliberately. One of those merges hit a real conflict: one branch had renamed the routine that builds the mesh while the other had inserted the material block on the very same lines. The resolution kept both.
By the close of that day both render paths decoded the authored palette exactly once. Worth saying plainly: the washout was the more dangerous of the two. Blank white animals are impossible to miss, but a palette arriving washed out reads as lighter fur, or a softer art direction, and slips past an eyeball forever. The look here is load-bearing — the world is meant to read painted, not photographed. Cozy-survival means a soft palette and gentle shadows that never tip into kitsch, and a world washed of its colour would have looked like a decision.



