Clearing dead assets out of a project

Projects collect content nobody uses. Packs get bought and half-used, a landmark gets rebuilt and the old version stays, a material gets replaced and its textures linger. None of it is doing harm until you ship, and by then it’s in your package size and your build times.

This is the workflow for finding it and getting rid of it safely.

1. Point it at one folder, not everything

Open a throwaway level. Right-click in the viewport with nothing selected, and pick Mosaic - Asset Audit ▸ Orphan Zoo.

In Root folders, put one folder — a pack, a district, one supplier’s delivery. Auditing /Game in one go works, but you get a wall of results with no obvious first move, and the editor will be busy for a while.

Leave Unused means on Unreferenced for your first run. That answers the simplest question: what is nothing pointing at at all.

Press Generate.

2. Read the picture

Every folder becomes a coloured square, and the assets inside it sit on top. The banner on each square tells you how much you would get back by deleting it.

Start with the biggest squares. A folder that is entirely unused stands out immediately, and it’s usually a pack somebody trialled and abandoned.

3. Check before you delete

Mosaic never deletes anything. It also can’t see everything — an asset referenced only from C++, or from a path assembled while the game runs, leaves no trace in the asset registry.

So spot-check before a big batch. Select a few assets in the picture, right-click, and pick Browse to Referencers. You should get nothing back, or only things that are also in the picture.

Then delete through the Content Browser’s normal Delete dialog. It re-checks references itself and refuses anything still in use. If it refuses something, that’s the safety net doing its job, not a bug — Mosaic will agree with it once you re-run.

4. Re-run, and keep going

Deleting a dead mesh frees the materials only that mesh used, and deleting those frees their textures. So run it again after each batch. Each pass peels off the next layer, and you’ll usually get two or three passes out of a neglected project.

If you’d rather see the whole dead cluster at once, switch Unused means to Unreachable and run it again. That follows the chain all the way up to a level, so an unplaced mesh and everything hanging off it appear together. It’s the same end result, just fewer passes.

Before you start

Save every level in the project first. An unsaved level holds no references yet, so anything only that level uses will look unused.