Tiny Online Tools logoTiny Online ToolssearchSearch tools…grid_viewAll Tools
Homechevron_right3D Toolschevron_right3D Texture Optimizer3D Texture Optimizer

3D Texture Optimizer

Resize, convert and compress the textures embedded in GLB, GLTF, FBX and USDZ models, free and entirely in your browser.

upload_file

Click to browse or drag & drop files here

Select a textured model — GLB, GLTF, FBX, DAE, OBJ or USDZ

Accepted: .glb,.gltf,.obj,.fbx,.dae,.usdz

Companion files (optional)upload_file

Click to browse or drag & drop files here

Add .bin buffers and texture images for external GLTF models

Base colour & emissivePerceptual maps. Lossy compression is safe here — this is where most of your savings come from.Normal mapsEach pixel encodes a direction, not a colour. Lossy compression flattens surface detail — lossless WebP keeps them intact while staying far smaller than PNG.Metallic, roughness & occlusionSlowly-varying single-channel data. These downsize very well, often to half the colour map's resolution.Round to power-of-two dimensionsRequired by some older engines and mipmapping paths. Modern WebGL2 and WebGPU do not need it.

Similar Tools

3D Web Optimizer

3D Web Optimizer

Optimize a 3D model for the web against a real performance budget, free and entirely in your browser.

3D Model Compressor

3D Model Compressor

Compress GLB and GLTF files online for free and cut 3D model size by up to 95%.

3D Model Optimizer

3D Model Optimizer

Optimize GLB and GLTF models for real-time rendering directly in your browser.

3D Asset Extractor

3D Asset Extractor

Extract every texture, mesh, material and animation from a GLB or GLTF file as a ZIP.

JSON Lines Converter

JSON Lines Converter

Convert JSON arrays or objects into JSONL format.

Convert PNG to WebP

Convert PNG to WebP

Convert PNG images into optimized WebP format.

Color Replace Tool

Color Replace Tool

Replace one color in an image with another. Adjustable tolerance for color distance. Fully private, runs in your browser.

apps

More Tools

Browse our full collection of free online tools.

Textures are the file

Open a 40 MB GLB and look at what is actually in it. Almost always, the geometry is 1–3 MB and the rest is textures. One 4096×4096 PNG normal map is around 20 MB on its own; a full PBR set at 4K is easily 60 MB before you have drawn a single triangle.

This free online 3D texture optimizer works only on that part of the file — and gives you the per-slot control that generic compressors do not.

Why per-slot settings matter

Treating every texture the same is the mistake that makes optimised models look wrong.

Base colour and emissive maps are perceptual. Your eye is forgiving of small colour errors, so lossy WebP at quality 80 typically removes 90% of the bytes with no visible difference.

Normal maps are not images. Each pixel encodes a direction vector in its RGB channels. JPEG-style chroma subsampling averages colour channels across neighbouring pixels — which, on a normal map, means averaging surface directions. The result is muddy, flattened lighting that people describe as "the model lost its detail" without knowing why. Keep normal maps lossless and downsize them less aggressively than colour.

Metallic-roughness and occlusion maps pack single-channel data into RGB. Roughness varies slowly across a surface, so these downsize extremely well — often to half the resolution of the colour map with no perceptible change.

The defaults here already reflect this: lossy WebP for colour, lossless WebP for normals, and smaller WebP for ORM maps.

Formats

  • WebP — supported everywhere that matters, dramatic savings, the sensible default.
  • AVIF — smaller again, and encoded here by a bundled libavif build rather than by the browser, so it works the same everywhere. Slower to encode than WebP, and worth it on large colour maps.
  • JPEG — no alpha channel; avoid for anything with transparency.
  • PNG — lossless, but far larger than lossless WebP. Use it only when a pipeline demands PNG specifically.

KTX2 / Basis Universal is deliberately not offered. It is the best format for GPU memory, but encoding it needs the Basis encoder, which is a large separate toolchain — this tool would have to lie about what it produces.

If a re-encode would come out larger than the original — which happens when you push an already-lossy JPEG into a lossless format — the tool keeps the original and says so.

Check your work in the grid

After processing, every texture appears in a grid with its slot, its final dimensions and its before/after size. If a normal map looks washed out in the thumbnail, it will look washed out on the model. Change that slot's settings and run it again.

Power-of-two dimensions

Some older engines and mipmapping paths require textures whose dimensions are powers of two. The toggle rounds every texture to the nearest one. Leave it off for modern WebGL2 and WebGPU targets, which do not care.

Privacy

Decoding and re-encoding both happen through your browser's own canvas APIs. No texture is ever uploaded.