# Texture settings

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

Texture Exporter docs · https://tools.ashthornton.dev/blender-texture-exporter/docs/texture-settings/

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.

> **Note**
>
> AVIF needs Chrome 85+, Firefox 93+ or Safari 16+ (macOS 13 / iOS 16). There's no fallback image: a browser that can't decode it shows the material without that texture.

## 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.](https://tools.ashthornton.dev/_astro/setting-scale.DIlSAkGe.png)

Scaling down is usually the biggest saving of all, for download size and GPU memory alike. [Preview on Models](https://tools.ashthornton.dev/blender-texture-exporter/docs/preview.md) 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.](https://tools.ashthornton.dev/_astro/setting-size.DNpM0Z4p.png)
