PERF.MSH002
Mesh Compression is off, which is the default and not always the right one
Mesh Compression in the model importer quantizes positions, normals, tangents and UVs to fewer bits. It shrinks the mesh data in the shipped build. It is lossy, which is why Unity ships it Off — and why leaving it off across an entire project of background props is usually leaving bytes on the table.
What the scan looks at
Model importers with meshCompression set to Off. Advisory only, at Info severity, because unlike an unused Read/Write flag there is a real quality decision here.
Why it costs you (and what the trade is)
Compression is applied per mesh, quantizing within that mesh’s own bounds. Two consequences follow from that, and they’re the whole decision:
- Large models lose the most precision, because the same number of bits spans a bigger volume. A terrain chunk or a whole building suffers where a crate doesn’t.
- Small props are essentially free to compress. At Low, the error is typically well under what any player could see.
In one controlled test on a 239-model project, moving every model from Off to Low cut mesh bytes in the build by roughly 30% (single measurement, one project — treat it as an order of magnitude, not a promise).
How to fix it by hand
- Select a batch of props — not the whole project — and set Mesh Compression to Low in the importer.
- Reimport and look at them in the scene. The artifacts to look for are seams pulling apart, UV shimmer on tiled surfaces, and lighting breaking up on smooth curves.
- Escalate to Medium/High only where you’ve checked the result. Past Low, each step buys noticeably fewer bytes for the precision you give up.
- Leave large-scale geometry (terrain meshes, whole-building models) for last, or out.
What PerfLint does about it
Pro can set Mesh Compression to Low from the finding row, for one model or a group. The scan deliberately withholds the one-click fix on lightmapped models: baked lighting is stored against the mesh’s UV2, and quantizing a lightmapped mesh can show up as lighting seams. Those findings tell you to set it by hand and inspect the result, rather than handing you a button that quietly risks your bake.
When to ignore it
Anything read back on the CPU, used for precise collision, or authored to exact real-world dimensions should stay uncompressed. So should hero assets the camera lives on. The rest of your prop library is where this rule pays.
Check your own project. The scan is free, runs entirely on your machine, and reports this rule with the exact assets that trip it — nothing is uploaded.
Last reviewed · All rules