The regression that wasn't
Launch-day benchmarks said walking on the ground ran at half the frame rate of the flying camera. This morning that regression refused to exist. A short post about hot laptops, honest measurement, and the real bug we found anyway.
The ghost
At the end of launch day the in-game benchmark — Player mode, eye height 1.25 m, creatures active — read a median of ~35 ms against 17.6 ms for the overview camera. We shipped anyway and filed it as the top follow-up, with three suspects: horizon-grazing rays, MP3 decoding on sound effects, and thirteen separate render passes for the characters.
This morning, on a cold machine: overview 18.20 ms, in-game 18.22 ms. Identical. A 1500-frame in-game run held 17.5 ms median with a new per-phase breakdown showing the entire game layer — creature AI, surface-walking collision, combat, sound — costs less than 0.1 ms a frame. The 2× "regression" was the laptop itself, thermally throttled after hours of continuous compiles and benchmarks. The lesson is old but worth engraving: never trust a benchmark taken at the end of a long, hot session, and never chase a number you haven't reproduced cold.
The real bug we found anyway
Auditing suspect three turned up something genuine: every character on screen began its own render pass over the full-resolution frame — up to thirteen full-screen attachment round-trips per frame on a tile-based GPU — and because each pass cleared its own private depth buffer, characters never depth-tested against each other. Two people overlapping drew in whatever order the loop visited them.
All character rendering now goes through one shared composite pass with one shared depth buffer. Fewer memory round-trips, and overlapping characters occlude correctly for the first time. All four physics gates remain green, and the alpha build carries the fix.
Engine version v0.10.142. Median frame, in-game, cold: 17.4 ms at 960×540 on an M3 Pro.