The median could not see the tail
Every prop in the game needs collision geometry: the invisible shape that stops you walking through it. The question is where that shape comes from, and the answer had three tiers: a hand-built proxy from the artist, a convex hull from Unity, or, failing both, the prop's own render mesh.
The render-mesh fallback was justified on the median. Twenty-eight triangles per prop is nothing. The decision looked safe.
The median could not see the tail.
median 28 p90 292 p99 1,288 max 6,737
77 props (5.8%) held 74,001 of 163,705 triangles - 45%
On the warehouse map, with 2,371 placements packed into a 57.5 × 42.7m yard at about 67 triangles per square metre, a single line-of-sight ray cost 20 to 40 microseconds. The game needs roughly 720 of them per tick. That is most of a 16.6ms budget spent on the question "can this player see that one?"
The broadphase was not at fault. At that density, a 20m ray genuinely does cross a third of the map. There was simply too much geometry.
Three changes
All three are confined to the render-mesh fallback. A hand-built proxy or a Unity hull represents a decision an artist or Unity already made, and neither is second-guessed.
Scenery gets no collider at all. Grass, ferns, bushes, clouds: 29 props. Their triangle counts were unremarkable; they are excluded because collision on them is wrong. One bush was a 7.34 × 3.66 × 7.70m box of leaves blocking sight lines through it.
Anything over 400 triangles that is actually solid becomes a box. The word "solid" is doing real work there. A shipping container should be a box. A tent should not, because you can walk into a tent.
Solidity is measured by voxel-sampling the interior: 12³ points, each tested by counting ray crossings to see whether it is inside the mesh. Three cheaper tests were tried first and all three fail. Triangle count cannot distinguish a solid building from a stack of crates. Surface area calls a smooth cylinder hollow. Vertex spread cannot detect a shell at all.
The results are legible, which is how you know the metric is measuring the right thing: container 100% solid, crate stack 74%, barrel 57%, all boxed. Tent 1%, barbed wire 1%, destroyed house 17%, door 31%, all kept as meshes.
The biggest win was a filename
Neither rule produced the largest saving. A car was colliding as 5,670 triangles when a 28-triangle convex hull for it had been sitting on disk the entire time.
The lookup missed it because Synty's per-pack prefix appears in the model's filename but not in the hull's. An exact-stem match found nothing and silently fell through to the render mesh. No error, no warning, just a car with two hundred times more collision geometry than it needed.
The whole tail was audited for the same failure. Exactly one other prop has an unused hull, and it must not use it: a convex hull of a building is a sealed building with no way in.
One exemption, named and explained
One crate preset stays at 6,737 triangles. It reads as 52% solid because it is four separate crates arranged in a cube-shaped footprint, so boxing it as one shape would fill the gaps between them and let players stand on air.
The correct fix is one box per crate, which needs a convex decomposer that currently emits 1.6 million triangles and is therefore not usable. The prop has three placements in one map. It is exempted by name, with the reason written down.
Asserting a maximum, not a mean
The new test asserts a maximum per prop, not an average. An average is exactly what hid this problem for as long as it was hidden: 77 bad props disappear into 1,337 good ones.
It also carries a total budget meant to be ratcheted downward over time, and a check that any exemption whose prop has since been fixed gets removed rather than left to rot in the list. An exemption list nobody prunes stops being a record of known problems and becomes a place where problems go to be forgotten.
Final count: 164k triangles down to 141k, and a bound so the tail cannot quietly grow back.