glTF 1.0 vs glTF 2.0 Pipeline Changes
The transition from glTF 1.0 to glTF 2.0 marked a fundamental evolution in 3D asset delivery, shifting the format from a WebGL-dependent representation into a universally compatible, runtime-ready standard. This article breaks down the major rendering and data pipeline changes between the two versions, specifically focusing on the elimination of custom GLSL shaders, the adoption of physically based rendering (PBR), enhanced animation workflows, and standardized binary packing.
1. Shift from Custom Shaders to Standardized PBR
In glTF 1.0, materials were defined using WebGL-specific concepts
like techniques, programs, and embedded or
referenced GLSL shader source code. The default lighting model relied on
traditional, unstandardized Blinn-Phong shading. This design created
severe bottlenecks for rendering pipelines:
- Assets were tightly coupled to WebGL and OpenGL ES, requiring engines using DirectX, Metal, or Vulkan to translate or rewrite the incoming GLSL shaders.
- Visual output varied drastically across different runtimes because lighting equations and material implementations were left to the discretion of arbitrary shader code.
glTF 2.0 removed raw GLSL shaders and runtime-specific techniques from the core specification entirely. Instead, it introduced a standardized Metallic-Roughness Physically Based Rendering (PBR) model. By defining clear material parameters (such as base color, metallic factor, roughness factor, and occlusion) rather than execution logic, glTF 2.0 allows target rendering engines to compile their own optimal native shaders while ensuring consistent, portable visual results across all modern graphics APIs.
2. Elimination of WebGL-Centric Runtime Dependencies
Because glTF 1.0 stored explicit WebGL state states (such as blend modes, depth testing parameters, and uniform bindings), importing an asset required reproducing that exact WebGL pipeline state.
glTF 2.0 stripped away low-level graphics API state management. The runtime pipeline is no longer dictated by the asset; instead, the asset specifies raw scene data, geometry, and uniform material values, leaving resource allocation, pipeline state management, and command buffer generation to the host engine.
3. Native Support for Morph Targets and Blend Shapes
glTF 1.0 supported skeletal animation (skinning) and node transform hierarchies, but it lacked a native solution for blend shapes. Developers needing facial animation or fine organic deformations had to rely on non-standard vendor extensions.
glTF 2.0 integrated morph targets directly into the core specification:
- Sparse Accessors: Introduced to store only the vertex displacements that deviate from the base mesh, drastically reducing file size and bandwidth requirements.
- Weights Animation: Morph target weights can be directly targeted and sampled by animation channels alongside translation, rotation, and scale channels.
4. Animation Interpolation Improvements
Animation pipelines in glTF 1.0 supported linear and step
interpolation. glTF 2.0 introduced cubic spline interpolation
(CUBICSPLINE), allowing exporters to serialize tangent data
directly alongside keyframe values. This enabled smooth, complex curves
with significantly fewer keyframes, reducing CPU evaluation overhead and
payload size.
5. Official Core Standardization of Binary glTF (.glb)
In glTF 1.0, the binary container format (.glb) was an
experimental extension (KHR_binary_glTF). Assets typically
required multiple files: a .gltf JSON manifest, an external
.bin buffer, and separate texture files.
glTF 2.0 made the .glb format an official part of the
core specification. It standardized a chunk-based binary container
(structured into JSON and BIN chunks) that packs the scene graph,
buffers, and image assets into a single streamable file, simplifying
asset ingestion and content delivery networks.
6. Consistent Normal Mapping and Tangent Spaces
glTF 1.0 lacked strict guidelines for tangent space calculations, leading to common normal-mapping artifacts across different engines. glTF 2.0 established clear mathematical rules for normal mapping, explicitly adopting the MikkTSpace standard for calculating tangents when explicit vertex tangents are omitted from the geometry buffers.