一个格式,两个容器
混淆始于名字。glTF------"GL传输格式"------是由Khronos集团制定的规范,该联盟是OpenGL和Vulkan背后的同一联盟。它在2010年代设计,旨在为3D做JPEG对图像所做的事:一种紧凑、通用的格式,任何东西都能显示,无需导入步骤,无需插件,无需询问对方拥有的软件。人们真心称它为"3D界的JPEG",这次营销说法确实准确。
该规范可以通过两种方式写入磁盘,这就是GLB与GLT的全部争论:
-
.gltf 是宽松版本:一个人类可读的 JSON 文件描述场景,旁边是一个包含几何体的 .bin 文件,旁边是纹理图像。三个或更多文件必须一起运输。
-
.glb 是打包版本:完全相同的数据,字节逐字节,功能相同,压缩成一个二进制文件。
所以问题从来不是"哪种格式更好"------其实是同一种格式。问题是,哪种容器适合你面前的工作。如果你读过我们对STL和OBJ的比较,会觉得很熟悉:这也是单文件和文件集的权衡,只不过这次两种方式都保留了材质和纹理。
GLB与GLT并排对比
|------------|-------------------------|--------|
| 值得知道 | .gltf | .glb |
| 文件数量 | 2--3+(JSON + .bin + 纹理) | 永远只有一个 |
| 可在文本编辑器中阅读 | 是的(JSON) | 否(二进制) |
| 可手动编辑 | 是的 | 实际上不行 |
| 材质与纹理 | 是的 | 是的 |
| 动画 | 是的 | 是的 |
| 丢失棋子的风险 | 真实的(类似 OBJ + .mtl ) | 没有 |
| 网页浏览器与增强现实 | 著作 | 作品,优先 |
| 邮件/聊天附件 | 尴尬 | 完美 |
| 典型尺寸(同型号) | 稍微大一点 | 略小一些 |
注意表格中没有的是什么:模型能包含内容的任何差异。几何体、PBR材质、贴图、动画、场景层级------这两者都承担了所有这些。权衡纯粹是包装问题。
当松散的.gltf赢得了它的地位
基于文本的文件有一个超能力:你可以打开它们。.gltf 是纯 JSON,这意味着开发者可以在任何代码编辑器中更改材质颜色、重命名节点或修复纹理路径,而无需打开 3D 程序。构建类似的管道也是出于同样的原因------资源可以在版本控制中进行差异化,贴图可以通过替换文件来交换,且无需重新导出。
如果那段内容不能描述你的作品,你就不需要宽松版本。在工程实践中,.gltf 是构建 3D 网页体验者的格式------而不是那些只需把模型交给别人的人。
当GLB是显而易见的选择时(剧透:通常如此)
对其他人来说,GLB凭借一个词获胜:依附。一个包含所有内容的文件------几何体、材质、纹理------可立即在浏览器查看器中打开,插入PowerPoint,在Windows资源管理器预览,并直接传输到Android的AR场景查看器。没人回信问纹理去哪儿了,老读者会认出这就是永恒的OBJ和它的.mtl问题------GLB根本不能让它存在。