Skip to content

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 Coordinate node with Coordinate Index set to that channel, feeding the Texture Sample's UVs input.
  • Unity — sample the matching TEXCOORD in 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

SettingValueWhy
FilteringNearest / PointBilinear filtering blends across cell edges
MipmapsOff, if props are always seen close upMips are what make small cells bleed in the first place
CompressionNone or losslessBlock compression smears flat color boundaries — the artefact is very visible on a swatch grid
sRGBOn for the color atlas, off for ORMORM is data, not color

Where those live:

  • UE5Filter, Mip Gen Settings, Compression Settings, and sRGB on the texture asset.
  • UnityFilter Mode, Generate Mip Maps, Compression, and sRGB (Color Texture) in the import settings.
  • GodotFilter, 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 Color node.
  • Unity — read COLOR in the shader.
  • Godot — enable Vertex Color ▸ Use As Albedo on a StandardMaterial3D.

No texture to import, no channel to wire, no filtering to fix.