什么是 GLTF 和 GLB

GLTF(GL Transmission Format)由 Khronos Group 于 2015 年发布,定位是"做 3D 图形领域的 JPEG"——就像 JPEG 是照片的标准格式、MP4 是视频的标准格式,GLTF 要做 3D 内容的通用交换格式。

它有两个文件形式:

// .gltf — JSON 文本 + 独立的 .bin 几何数据 + 贴图文件
scene.gltf         ← JSON 文本(场景结构、材质、动画信息)
scene.bin           ← 二进制几何数据(顶点、法线、索引)
texture_diffuse.png ← 贴图文件(独立存储)

// .glb — 把上面所有文件打包成一个二进制文件
scene.glb  ← 单文件包含所有几何+贴图+场景信息

GLTF 的核心优势:① GPU 友好的数据结构(几何数据可直接上传到显存,无需解析转换);② 完整支持 PBR(基于物理的渲染)材质——金属度、粗糙度、法线贴图等;③ 支持骨骼动画和变形目标(Blend Shapes);④ 开放标准、免版税、生态繁荣。

在线查看 GLTF/GLB 的步骤

  1. 打开 3D 模型查看器
  2. 将 .gltf 或 .glb 文件拖入页面。如果是 .gltf,确保同目录下有配套的 .bin 文件和贴图文件夹。
  3. 模型加载后,PBR 材质自动渲染——金属的反射、粗糙度、法线凹凸都能正确显示。
  4. 如果模型含动画,点击播放按钮观看骨骼动画或变形目标(morph targets)效果。

核心功能一览

PBR 材质完整渲染

金属度、粗糙度、法线、AO、发光贴图全支持,接近游戏引擎画质。

动画播放

支持骨骼蒙皮动画和变形目标(Morph Targets),可切换播放不同动画剪辑。

GLTF + GLB 双模式

JSON 文本 .gltf 和二进制 .glb 都能打开,自动检测格式。

环境光照预览

使用基于图像的光照(IBL)环境贴图,模型在真实光照环境中预览。

GLTF vs OBJ vs FBX:谁是未来

维度GLTF/GLBOBJFBX
标准性质开放标准(Khronos)开放但无官方维护Autodesk 私有
PBR 材质原生完整支持仅 Blinn-Phong(MTL)支持但规范复杂
骨骼动画原生支持不支持完整支持
GPU 友好是(二进制可直接上传显存)否(需文本解析)部分
Web / 移动端最佳选择勉强可用不推荐

常见应用场景

  • 电商 3D 商品展示:Shopify、Amazon 等平台的 3D 商品预览均使用 GLB 格式。将产品模型转为 GLB 后嵌入商品详情页,用户可在浏览器中旋转缩放查看。
  • AR 试穿/试戴:眼镜、鞋子、手表等 AR 试戴功能基于 GLTF 的 PBR 材质实现逼真渲染。
  • 网页 3D 交互:Three.js、Babylon.js 等 WebGL 框架首选 GLTF 格式,加载速度快、渲染效果好。
  • 元宇宙/虚拟空间:VRChat、Decentraland 等平台的角色和场景多采用 GLTF/GLB。
  • 游戏资源预览:Unity 和 Unreal Engine 均支持 GLTF 导入导出,下载的 3D 素材先在线预览再导入项目。

常见问题 FAQ

GLTF 和 GLB 有什么区别?该用哪个?

.gltf 是 JSON 文本文件,贴图和几何数据通过独立链接引用,适合开发调试(可直接查看和编辑 JSON 场景结构)。.glb 是把所有数据打包成一个二进制文件,体积更小、只需一次 HTTP 请求就能加载完毕,适合生产部署和分发。建议:开发阶段用 .gltf 方便调试,上线时转为 .glb。

GLTF 比 OBJ/FBX 好在哪里?

GLTF 专为 Web 和实时渲染设计:原生 PBR 材质(金属度、粗糙度等物理属性)、GPU 可直接消费的二进制几何数据(无需文本解析)、内置骨骼动画和 Blend Shapes。OBJ 只能用简单的 MTL 材质且不支持动画,FBX 虽然是全功能格式但属于 Autodesk 私有格式、Web 端解析复杂。如果目标平台是 Web/移动端/AR,GLTF 是目前最优选。

怎么把其他格式(OBJ/FBX/STL)转成 GLTF/GLB?

使用 速工具 的 3D 模型格式转换器,选择源格式文件 → 目标格式选择 GLTF 或 GLB → 点击转换 → 下载转换结果。转换在浏览器本地完成,文件不会被上传。如果源模型的贴图是简单的漫反射贴图,转换器会自动生成基础的 PBR 材质映射。

GLB 文件可以直接放到网页里展示吗?

可以,这正是 GLB 的核心设计目标之一。使用 Three.js 的 GLTFLoader:new GLTFLoader().load('model.glb', gltf => scene.add(gltf.scene)),几行代码就能在网页中展示可交互的 3D 模型。无需任何插件,浏览器原生支持 WebGL 渲染。