Best Open Source Tools for glTF Texture Atlasing

This article provides an overview of open-source utilities that automate texture atlasing for complex glTF models. Texture atlasing consolidates multiple distinct textures and materials into a single image sheet, dramatically reducing draw calls and optimizing performance for real-time 3D applications. Below, you will find direct assessments of the top open-source tools, scripting environments, and libraries available to implement automated atlasing pipelines for glTF assets.


The Challenge of Atlasing in glTF

A complex glTF asset often contains multiple meshes and materials, each referencing independent Base Color, Normal, Metallic-Roughness, and Emissive maps. In real-time rendering engines (such as Three.js, Babylon.js, or Godot), each unique material incurs a separate draw call.

Automating texture atlasing for glTF requires a tool that can:

  1. Repack non-overlapping UV coordinates for all input meshes.
  2. Bake multiple distinct textures into a unified image map.
  3. Update mesh primitive UV attributes (TEXCOORD_0) to point to the new atlas regions.
  4. Export a valid, streamlined glTF/GLB file.

1. Blender Headless (Python API)

Blender is the most comprehensive open-source solution for end-to-end texture atlasing. While known as a desktop 3D suite, Blender runs headlessly via the command line (blender -b -P script.py), making it suitable for automated CI/CD asset pipelines.

  • How it works: Using Blender’s native bpy API, you can programmatically import a glTF, join meshes or group materials, run automated UV packing (bpy.ops.uv.pack_islands), and use Cycles to bake multiple materials into a single set of PBR textures (Albedo, Roughness, Metallic, Normal).
  • Strengths: Handles full PBR baking natively, supports complex geometry, and features complete glTF 2.0 import/export support.
  • Limitations: Higher resource footprint than dedicated C++ or Node.js micro-tools.

2. xatlas

xatlas is an open-source, lightweight C++ library (with active Python bindings) designed specifically for mesh parameterization and automated UV atlas generation.

  • How it works: xatlas takes existing 3D geometries and automatically segments, flattens, and packs charts into clean, non-overlapping UV layouts. In a pipeline, developers use xatlas to generate the new UV space, sample the original glTF texture coordinates, and rasterize them into the new atlas image.
  • Strengths: Extremely fast, generates high-efficiency packing layouts, and integrates easily into custom C++ or Python automated toolchains.
  • Limitations: Does not handle file I/O or texture sampling directly; it generates UV coordinates and island mappings, requiring a companion script to read glTF files and bake image pixels.

3. glTF-Transform

glTF-Transform is a modular TypeScript/Node.js toolkit for inspecting, editing, and optimizing glTF 2.0 models. While it does not feature an arbitrary pixel-baking engine, it provides core utilities for automating texture consolidation and batch optimization.

  • How it works: It allows developers to script material restructuring, partition meshes, deduplicate accessors, and merge compatible draw calls. It natively pairs with tools like sharp for image manipulation and can combine metallic and roughness maps into the required glTF layout automatically.
  • Best used for: Serving as the orchestrator in a web-based pipeline. It imports the glTF, prepares the data for an atlasing service (like xatlas), and restructures the final output into a compact GLB.

4. Microsoft UVAtlas

Maintained as open source by Microsoft, UVAtlas is an ISO-chart-based UV-mapping library designed to automate the generation of non-overlapping texture coordinates.

  • How it works: It partitions 3D surface meshes into charts, minimizes geometric stretch, and packs them into a single texture space suitable for baking.
  • Strengths: Excellent handling of high-poly surface parameterization and stretch minimization.
  • Limitations: Primarily targeted at DirectX and Windows environments (C++), requiring an intermediate loader (such as tinygltf) to parse glTF meshes into UVAtlas buffers.

Designing an Automated Atlasing Pipeline

Because no single standalone CLI command currently bakes and repackages arbitrary glTF PBR materials without trade-offs, standard production architectures generally adopt one of two approaches:

  1. The Scripted Blender Pipeline: Run a Python script inside headless Blender. It imports the .gltf/.glb, merges materials, calls internal packing and baking operators, and re-exports an optimized .glb. This is the easiest to implement with full PBR accuracy.
  2. The Microservice Pipeline: Combine tinygltf (for parsing), xatlas (for generating unified UV coordinates), a software rasterizer or GPU compute shader (for mapping pixels to the new UVs), and glTF-Transform (for final cleanup, Draco compression, and KTX2 texture encoding). This path offers the highest execution speed and lowest memory overhead.