Texture Exporter docsTexture settings

Texture Exporter/Use it

Texture settings

Formats, scale, mipmaps, usage, codecs and quality, with what each one is for.

Every texture has its own settings. You change them in the Scene panel’s Details, or in the glTF export window’s sidebar; both edit the same settings. Apply to Selected (or Apply to… in the export window) copies them to other textures.

Format

Format glTF extension Good for
KTX2 (default) KHR_texture_basisu GPU-compressed with Basis Universal: textures stay compressed in GPU memory too, so you can use more of them. Transcoded in the browser to whatever the GPU supports.
WebP EXT_texture_webp Small downloads that every current browser decodes. Lossy with a quality setting, or lossless. Decoded to full size in GPU memory.
AVIF EXT_texture_avif Usually smaller than WebP at the same quality, but slower to decode. Always lossy. Writing it needs Blender 5.2.
PNG glTF core Lossless, for textures that need every pixel. Also the fallback if another format fails to encode.

One scene can mix all four. Each texture is written as its own file next to the glTF, referenced by a relative URI.

Scale

1x, .5x, .25x, .125x or .0625x of the source size. KTX2 sizes are rounded to a multiple of 4, because Basis Universal works in 4×4 blocks.

Texture list rows at 1x, .5x and .25x, with three textures just changed and marked to export again.

Scaling down is usually the biggest saving of all, for download size and GPU memory alike. Preview on Models shows what you lose.

Mipmaps

On by default. For KTX2, mipmaps are generated and stored in the file. For WebP, AVIF and PNG the browser generates them, and the setting only changes the glTF sampler.

Turn them off for textures that are always seen at full size (UI, sprites, a texture on a plane facing the camera). The add-on then writes a minFilter of LINEAR to the glTF, so three.js never tries to sample mipmaps that aren’t there (which renders KTX2 textures black).

Usage

What the texture holds. Auto detects it from the shader input it’s connected to, and is right almost every time.

Usage Meaning
Colour sRGB colour: base colour, emission
Data Linear non-colour data: roughness, metallic, occlusion, masks
Normal A linear normal map

Usage decides the colour space the file is written in, and which KTX2 codec Auto picks.

KTX2 settings

Codec

Codec Use for
Auto (default) ETC1S for colour, UASTC for normal and data maps
ETC1S Small files, lower quality. Good for most colour textures.
UASTC High quality, larger files. Use for normal maps (ETC1S makes their shading blocky) and detailed data maps.

ETC1S

Setting Default What it does
Quality 128 1–255. Higher is better quality and a larger file.
Effort 1 0–6. Higher compresses better but encodes more slowly. The file size barely changes.

UASTC

Setting Default What it does
Quality 2 0–4. Quality versus encoding speed.
RDO On Rate-distortion optimisation: much smaller files after Zstd, with a slight quality loss.
RDO Lambda 1.0 Lower is higher quality. Try 0.25 to 0.75 for normal maps.
Zstd 18 Zstandard supercompression level, 0–22. 0 turns it off.

WebP and AVIF settings

Setting Default What it does
WebP Quality 85 1–99. Ignored with Lossless.
WebP Lossless Off Exact pixels, larger files.
AVIF Quality 65 1–100. Always lossy (4:2:0): 100 is the highest quality, not lossless. About 70 matches WebP 85.

Export

Untick Export on a texture to leave it out completely. It isn’t written, and the glTF leaves it out of its materials: there’s no fallback to the original image. Use it for textures you’ll load another way, or that three.js doesn’t need.

Checking the cost

Details shows the estimated file size and GPU memory as you change settings, and the real size once the texture is exported. Estimates come from a model fitted on real textures; smooth gradients come out much smaller and photos somewhat larger.

Details after a scale change: estimated size 126.5 KB, GPU 341.3 KB, glTF update needed, last export 568.0 KB.