Engine export
The atlas is small, and small textures are exactly where engines' default settings work against you. Three things decide whether your colors survive.
1. Export all UV channels
Export FBX or glTF with all UV channels included — this is off or partial in some export presets.
The report shown after Generate Swatch Texture tells you which channel SwatchUV landed on. Wire your base-color sampler to that channel:
- UE5 — a
Texture Coordinatenode with Coordinate Index set to that channel, feeding theTexture Sample's UVs input. - Unity — sample the matching
TEXCOORDin your shader or Shader Graph.
If you skip this, the material samples channel 0 and every face reads whatever color happens to sit at its original UV position.
2. Use 16px or 32px cells
Set Swatch Size to Fixed 16×16 px (the default) or Fixed 32×32 px. The panel warns below 8px, and the warning is worth heeding: by mip level 2 a single texel already averages a whole 4px cell, so neighboring swatches bleed into each other no matter how tight the UV inset is.
Larger cells cost almost nothing here — even 32px cells give you 64 colors in a 256px texture.
3. Fix the texture settings
| Setting | Value | Why |
|---|---|---|
| Filtering | Nearest / Point | Bilinear filtering blends across cell edges |
| Mipmaps | Off, if props are always seen close up | Mips are what make small cells bleed in the first place |
| Compression | None or lossless | Block compression smears flat color boundaries — the artefact is very visible on a swatch grid |
| sRGB | On for the color atlas, off for ORM | ORM is data, not color |
Where those live:
- UE5 — Filter, Mip Gen Settings, Compression Settings, and sRGB on the texture asset.
- Unity — Filter Mode, Generate Mip Maps, Compression, and sRGB (Color Texture) in the import settings.
- Godot — Filter, Mipmaps, and Compress ▸ Mode on the imported texture.
Before you ship
Everything above, as a list to work down:
The ORM atlas
With ORM Atlas enabled you get a companion texture packed R=ambient occlusion, G=roughness, B=metallic — UE5's convention, and directly usable in Unity's HDRP/URP mask maps with channel remapping.
Turn sRGB off on it. It carries data, not color, and leaving sRGB on will shift every roughness value.
Vertex colors instead
If the texture pipeline is more trouble than it is worth — mobile work, stylized work, or anything where you just need color to arrive — use the Vertex Colors output mode instead.
The ProtoColor attribute is a byte-color attribute on the corner domain, which is exactly what UE5, Unity, and glTF COLOR_0 expect:
- UE5 — read it with a
Vertex Colornode. - Unity — read
COLORin the shader. - Godot — enable Vertex Color ▸ Use As Albedo on a
StandardMaterial3D.
No texture to import, no channel to wire, no filtering to fix.