GLB vs glTF:到底有什么区别?
GLB vs glTF 的差别在打包,不在数据:.gltf 是可读的 JSON 加独立文件,.glb 则把所有内容装进一个文件。发布用 GLB,编辑用 glTF,互转无损。
- Khronos glTF 2.0 规范
- 实测文件大小
- 无损转换
GLB vs glTF:一句话答案
glTF 是 Khronos Group 制定的开放格式,用来把 3D 场景交付到应用和网页;GLB 并不是另一种格式,而是它的二进制容器。规范同时定义了这两者:.gltf 文件是 JSON(媒体类型 model/gltf+json),.glb 文件(model/gltf-binary)则把同一份 JSON 加上一段二进制缓冲区封装进单个文件。
所以 GLB vs glTF 讨论的是打包方式,跟质量无关。网格、PBR 材质、贴图、动画、蒙皮和形变目标在两者中完全一致。变化的是你要处理多少个文件、能否用文本编辑器打开场景描述,以及把二进制塞进 JSON 时要多付多少体积。
对绝大多数人来说,答案都是 GLB:一个文件,上传、发邮件或拖进 three.js、Babylon.js、<model-viewer>、Blender、Unity、Unreal 都行。需要调试、手动改材质参数,或者在 CDN 上让多个模型共用贴图时,再选分离文件的 glTF。
GLB vs glTF 对比表
两者都是 glTF 2.0,所以大部分行完全一样。真正决定你项目该选 GLB 还是 glTF 的,是那些不一样的几行。
| GLB(.glb) | glTF(.gltf) | |
|---|---|---|
| 几何类型 | 三角网格(也支持点和线)、节点层级、蒙皮、形变目标 | 相同 |
| 颜色 / 贴图 | PNG 或 JPEG 贴图存放在二进制块中;顶点色 | 贴图作为独立图片文件,或在 JSON 里用 base64 data URI 内嵌 |
| 单位 | 米,右手坐标系,+Y 向上,依据规范 | 相同 |
| 材质 | 内置 PBR 金属度-粗糙度;更多能力通过 KHR 扩展 | 相同 |
| 文件大小 | 最小的单文件形式:12 字节文件头加一个 JSON 块和一个 BIN 块 | 与分离文件的总字节数相同;若二进制以 base64 内嵌则大约大 33% |
| 可编辑性 | 二进制;需要工具才能查看 | JSON 可读,能在文本编辑器里做 diff |
| 软件支持 | three.js、Babylon.js、model-viewer、Blender、Unity、Unreal、Godot、Windows 3D 查看器 | 同一批加载器;外部文件必须留在正确的相对目录下 |
| 打印用途 | 不是打印格式;UltiMaker Cura 能打开,大多数切片软件不行 | 相同;打印需转成 STL 或 3MF |
| 文件数量 | 1 | 1 到多个(.gltf、.bin、图片) |
来源:Khronos glTF 2.0 规范中关于文件扩展名、坐标系与单位,以及 GLB 文件格式的章节。
GLB 文件是如何由 glTF 构成的
GLB 以一个 12 字节的文件头开头:魔数 glTF、版本号(2)和总长度。之后是数据块。第一块是 JSON 块,就是 .gltf 里那份一模一样的场景描述。第二块是 BIN 块,存放顶点位置、法线、UV、索引、动画关键帧,通常还有贴图图像本身。
.gltf 把这份 JSON 存成独立文件,并用两种方式之一引用二进制数据:指向旁边的 .bin 和图片文件的相对路径,或者把字节 base64 编码后直接写进 JSON 的 data URI。规范本身也指出,base64 会让数据长度增加 33%,解码还要额外消耗处理性能。这正是 GLB 存在的主要原因。
- GLB:文件头 + JSON 块 + BIN 块,一个文件
- glTF:JSON 加上并排放置的 .bin 和图片
- 内嵌式 glTF:也是一个文件,但 base64 让它胖了三分之一
GLB vs glTF 文件大小:同一个模型三种打包实测
我们从作品库里取了一个带贴图的 AI 生成模型——一位 500,000 三角面、287,963 个顶点、带三张 2048 x 2048 PNG 贴图的蒸汽朋克机器人骑士,逐一测量了每种打包方式的体积。
| 打包方式 | 文件数 | 大小 |
|---|---|---|
| GLB | 1 | 26.9 MB |
| glTF + .bin + PNG 贴图 | 5(.gltf、.bin、3 张 PNG) | 总计约 26.9 MB;单是 .gltf JSON 约 2 KB |
| 内嵌 base64 数据的 glTF | 1 | 约 35.9 MB |
| 这些字节都花在哪 | 几何 15.2 MB,贴图 11.7 MB |
打包本身不会缩小任何东西。想让模型更小,就压缩几何(Draco 或 meshopt)、缩小或重新编码贴图,或者减少三角面数。我们的 GLB 压缩器和网格简化工具在浏览器里就能完成这些。
网页、AR 和 Blender 里的 glTF vs GLB
在网页上,GLB 是实际上的默认选择:一次请求、一条缓存记录,主流加载器都认。但在大量模型共用同一批贴图的站点上,分离式 glTF 反而更划算,因为浏览器只需下载一次公共图片;规范自带的实现说明里也讲过这个取舍。
做 AR 时,Android 的 Scene Viewer 支持 glTF 和 GLB,而 iPhone 上的 Apple Quick Look 需要 USDZ,所以两种都发一份,再把 GLB 转成 USDZ 给 Apple 设备用。在 Blender 里,文件 > 导入 > glTF 2.0 两种都能读,导出器的格式菜单提供 glTF 二进制(.glb)和 glTF 分离(.gltf + .bin + 贴图)。除非有特别理由,选二进制就对了。
要做 3D 打印,两者都不是合适的交付格式。把 GLB 转成 STL 或 3MF;贴图打不出来,但形状没问题。
- 网页与分享:GLB
- 多模型共用贴图:分离式 glTF
- iPhone AR:转成 USDZ
- 打印:转成 STL 或 3MF
GLB vs glTF:该用哪个
两者都是合规的 glTF 2.0,按工作流来选。
把模型发给别人
嵌入网站
调试出问题的材质
baseColorFactor、metallicFactor 或贴图索引,改完重新加载。贴图共享的产品目录
版本管理
避免:内嵌式 glTF
转换 glTF 和 GLB 而不弄坏任何东西
只要引用的文件都在,双向转换都是无损的。
- 把 .gltf、.bin 和贴图图片保持在导出时的相对目录结构中
- 在查看器里打开转换结果,确认贴图正常显示后再分享
- 记住 glTF 的单位是米:30 毫米的手办是 0.03 个单位,在某些工具里看起来小得离谱
- 面向网页时压缩几何和贴图;单纯重新打包省不下任何体积
- 只发 .gltf 文件;没有 .bin 和图片,模型会加载成空白或灰模
- 把 .gltf 改名成 .glb;二进制文件头必须由转换器写入
- 对大模型用内嵌 base64 的 glTF;它会给二进制数据额外增加约 33%
- 指望切片软件打印出 GLB 里的贴图;多色打印请转 3MF
免费的 GLB 和 glTF 查看器与转换器
GLB vs glTF 两边都照顾到了。全部在浏览器里运行,无需登录,文件始终留在你的设备上。
常见问题
常见问题
GLB vs glTF:哪个更好?
用一句话说清 GLB 和 glTF 的区别?
glTF 转 GLB 会掉质量吗?
我的 GLB 为什么这么大?
GLB 或 glTF 文件能 3D 打印吗?
glTF 用的是什么单位?
SupaVoxel 会提供哪种格式?
iPhone 能打开 GLB 文件吗?
相关工具与指南
继续探索
免费开始
GLB 和 glTF 分清了?生成模型
把照片变成 3D 模型,通常不到一分钟。使用前 3 个免费积分即可免费下载 GLB,无需信用卡;带纹理模型需付费方案。
无需信用卡 · 赠送 3 个免费积分