Preview3D
获取

什么是 .gltf 和 .glb 文件?两者的区别,以及如何在 Mac 上打开它们

glTF 是 Khronos Group 推出的开放格式,用于网页、游戏和 AR 中的 3D 模型,包含材质、纹理、对象层级、相机和动画。.gltf 文件是指向其他文件的 JSON;.glb 则是把同样的数据打包成一个二进制文件。自 2022 年起,glTF 成为 ISO/IEC 12113 标准,在 macOS 27 上连预览都能打开它。

概览

扩展名
.gltf, .glb
类型
3D 场景
创建者
Khronos Group
始于
2015
标准
ISO/IEC 12113:2022
macOS 自身(不装应用)
部分支持——见下文

信息核对于 2026年11月4日

两种包装,相同的数据

.gltf 文件是 JSON 格式的可读文本。它描述场景和几何(二进制数据,即“buffer”),并从单独的文件中获取纹理——或者把纹理作为一长串 base64 字符串放在 JSON 里。下面是从 Onshape 导出的一个文件中选取的几个部分:

{
  "asset": {
    "generator": "ONSHAPE BY PTC INC, 1.217",
    "version": "2.0"
  },
  "extensionsUsed": [
    "PTC_onshape_metadata"
  ],
  "buffers": [
    {
      "byteLength": 1044168,
      "uri": "data:application/octet-stream;base64,oWaSPRhJBT6qFIE6bDaSPTJ…"
    }
  ]
}

这里整整一兆字节的几何以文本形式放在 JSON 中,所以文件有 2.65 MB。

.glb 把同样的内容装进一个二进制包。它以一个 12 字节的文件头开头:字母 glTF、版本号 2 和文件总长度。接着是 JSON,然后是二进制数据。一个从 Onshape 导出的齿轮的前 28 个字节:

00000000: 676c 5446 0200 0000 1c65 0b00 5064 0200  glTF.....e..Pd..
00000010: 4a53 4f4e 7b22 6163 6365 7373            JSON{"access

长度 1c65 0b00 是 746,780 字节——正好等于文件的大小。

为什么 .gltf 打开后没有纹理

当 .gltf 指向附带文件(包含几何的 .bin、包含纹理的图片)时,这些文件必须跟它一起传。只发送 .gltf,对方看到的就是没有纹理的模型,或者什么都看不到。Apple 的预览指南也对此提出了警告。请发送整个文件夹——或者更好的办法是发送 GLB,所有东西都在一个文件里。

glTF 包含什么

  • 网格,由三角形组成。没有精确的 CAD 曲面或公差——那是 STEP 的领域。
  • PBR 材质(metallic-roughness,金属度-粗糙度),带 PNG 和 JPEG 纹理,以及顶点颜色。
  • 对象层级,带名称,一个文件中可以有多个对象和场景。
  • 相机和动画,包括骨骼和变形目标(morph target)。
  • 元数据:哪个程序生成了文件、版权。

在核心之上还有各种扩展:Draco 和 meshopt 几何压缩、KTX2 和 WebP 纹理、额外的材质属性。正是它们导致一个程序能打开某个文件,而另一个程序打不开。

扩展:为什么某些地方打不开 GLB

文件会列出它使用的扩展(extensionsUsed),以及缺了就无法读取的扩展(extensionsRequired)。上面那个 Onshape 齿轮使用了 Onshape 自己的 PTC_onshape_metadata,但只列为“使用”,所以不认识它的程序可以跳过它。

压缩则不同。用 Draco 或 meshopt 压缩的模型,或者带 KTX2 纹理的模型,通常会把这些扩展列在 extensionsRequired 中,不支持它们的程序就打不开。根据 Apple Developer Forums 上的帖子,Apple 的 Reality Converter 也是如此。如果一个 GLB 在别处能打开,在你这里却打不开,请在它的 JSON 中查找 extensionsRequired。

单位是米,不是毫米

glTF 规范规定所有距离都以米为单位,Y 轴朝上。同一个从 Onshape 导出的圆柱,在 STL 中写作 54 × 54 × 25,在 glTF 中写作 0.054 × 0.054 × 0.025。

这对打印来说是个陷阱。STL 没有单位,切片软件把它当作毫米读取,所以一个未经缩放就转换成 STL 的 glTF 会小一千倍。Preview3D 转换时不会改动数字:把 glTF 转成 STL 后,请在切片软件中把它放大到 100,000%,或者在来源程序中以毫米导出。

glTF 从何而来

glTF 诞生于 COLLADA 工作组。Khronos 于 2013 年 3 月宣布了它,1.0 版于 2015 年 10 月发布。2017 年 6 月发布的 glTF 2.0 用 PBR 材质取代了着色器,并把 GLB 纳入核心规范;1.0 的文件与它不兼容。2022 年 7 月,glTF 2.0 作为国际标准 ISO/IEC 12113 发布。Khronos 称它为“3D 界的 JPEG”。

如何在 Mac、iPad 和 iPhone 上打开 glTF 和 GLB

根据 Apple 的指南,在 macOS 27 上,预览可以打开 .gltf 和 .glb。不过它只能把编辑过的模型存储为 USD 或 USDZ。快速查看在不装其他应用的情况下能否显示它们,我还没有核实。在较旧的 macOS 版本上情况不一:有些人的预览能打开 GLB,另一些人的预览则从“打开方式”中消失了。

其他选择:

  • Blender 能导入和导出 glTF,但它是一个完整的 3D 软件。
  • 网页查看器,例如 Khronos glTF Sample Viewer 或 PlayCanvas 查看器,可以在浏览器中显示模型。
  • Preview3D,我的应用,可以在窗口中和快速查看里打开 glTF 和 GLB,带颜色和材质,支持 Mac、iPad、iPhone 和 Apple Vision Pro。

Preview3D 也能读取从附带文件中获取几何和纹理的 .gltf,在快速查看中也一样。模型信息以文件本身的单位显示尺寸——对 glTF 来说是米——以及三角形数量,并提供网格检查。在 iPad 和 iPhone 上,它会在 AR 中以真实大小立起模型,因为 glTF 的单位由规范规定。

Preview3D 中一个 GLB 格式的彩色企鹅模型
Preview3D 中一个 GLB 格式的彩色企鹅模型

不上传,把 GLB 转换为 STL

在 Mac 上,Preview3D 通过 文件 → 导出模型为…(⌥⌘E)转换为 STL、OBJ 或 PLY,无需联网。搜索“glb to stl”,你得到的大多是在线转换器,它们会把你的文件上传到别人的服务器——对于客户的模型或 AI 生成的模型,这一点值得想一想。转换之后,请像上面说的那样注意单位是米。

常见问题

.gltf 和 .glb 有什么区别?

同样的数据,不同的包装。.gltf 是文本(JSON),常常把几何和纹理放在附带文件中。.glb 则把一切放在一个二进制文件里。

我应该发送哪一种?

GLB。它是一个文件,途中不会丢东西。

为什么我的 .gltf 打开后没有纹理?

它的附带文件(.bin 和图片)丢了。请发送整个文件夹,或者把模型另存为 GLB。

为什么我的模型转换成 STL 后变得很小?

glTF 以米为单位,而切片软件把 STL 当作毫米读取。请把模型放大到 100,000%。

Mac 不装其他应用能打开 GLB 吗?

在 macOS 27 上可以,用预览。在较旧的版本上情况不一。

为什么 GLB 在一个程序中能打开,在另一个程序中却打不开?

最常见的原因是扩展——通常是 Draco 或 meshopt 压缩,或者 KTX2 纹理。不支持它们的程序无法读取该文件。

相关页面

资料来源

有没有哪个 GLB 在你的 Mac 上打不开,或者转换后尺寸不对?请写信到 apps@xfanta.com,告诉我它来自哪个程序。

在 Preview3D 中打开

在 Mac、iPad、iPhone 和 Vision Pro 上打开 STEP、3MF、STL、G-code、BGCODE 等格式。一次购买,无需账户,无需联网。

App Store 上的 Preview3D