Skip to content

What a resource really costs a player

A 40 MB resource can cost a player more memory than a 300 MB one. Disk size is compressed; the card holds the expanded form. Here is the number that actually matters, where it goes wrong, and what an optimiser can safely change.

The number that matters is not the file size

A .ytd is compressed on disk. What a player's graphics card holds is the expanded texture, and that number depends on three things: the dimensions, the format, and whether it carries mips.

An uncompressed texture costs about eight times what the same pixels cost as BC1. That single fact is the biggest win in most uploads, and it changes nothing about how the texture looks on screen. Mips add roughly a third on top, and they are worth every byte — a texture without them is sampled at full resolution from across the map.

This is why the scan reports memory, not megabytes. Two resources of the same download size can differ several times over in what they cost a player.

What it changes, and in what order

Every texture in the upload is read from the file itself and put through the same four questions. The order is deliberate.

The floor comes first. Anything at or below 256 pixels on its long side is left alone whatever its format — recompressing a small texture damages it visibly and saves almost nothing. Then compression: an uncompressed texture is moved to BC1, or BC3 if it actually uses alpha. Then the cap: anything above the ceiling you set is scaled down to it, rounded to a power of two. Then nothing else — if a texture is already inside budget it is reported and left.

1Floorsmall? leave it alone2Formatuncompressed? compress3Capover the ceiling? scale4Reportbefore and after, per file
Ceilings offered: 4096, 2048, 1024, 512, 256. Floors: 512, 256, 128, off.

Unused and duplicate textures

The scan reads every model in the package and collects the textures its shaders name — all of them, not just the diffuse. A texture used only as a normal or specular map is in use, and dropping it would flatten the model in game.

Anything no shader names is reported as unused, and you can have it dropped. That check only runs when the package actually ships a model: if you uploaded loose .ytd files, nothing can be called unused, because the shader that samples it may live in a file you were never given. Identical textures stored under different names are reported separately — duplicates are common in packs assembled from several sources.

The one change that is off by default

A texture whose sides are not powers of two cannot carry a full mip chain. The game samples the top level at every distance: it shimmers at range and costs full memory the whole time. Squaring it off fixes both.

It is still off by default, because fixing it means resizing a texture you did not ask to shrink — the exact way an optimiser ruins a decal. It is reported on every scan and applied only when you tick it.

Same reason models are never touched. The optimiser rewrites textures; generating the detail levels a model shipped without is a separate, opt-in step that goes on the job queue because it takes minutes on a car.

Try it free

Create a free account, join the Discord for your credits, and build your first asset in minutes.