AI 3D建模工具: Tripo 3D | Meshy AI
一句话结论:GLB 就是一个 ZIP 式思路的"单文件 3D"——JSON 描述 + 二进制数据 + 贴图,全在一个盒子里。所以它天然不会出现"打开是灰模、贴图丢了",那类问题属于 .gltf(外部引用)。反过来说,你打不开 GLB,通常只有两个原因:后缀被改过,或者版本/扩展不支持。
一、先给结论:三种打开方式
| 场景 | 用什么 | 说明 |
|---|---|---|
| 网页/手机上快速看 | 浏览器在线查看器 | 拖进去即可,贴图跟着文件走 |
| 验收资产(尺寸、朝向、面数) | 带"验证报告"的查看器 | GLB 是给运行时用的,先验证再看 |
| 编辑 | Blender(自带 glTF 2.0 导入) | 导入后是普通网格,能改材质 |
二、GLB 的结构:12 字节头 + 若干分块
对 Khronos 官方示例 BoxTextured.glb 做二进制解剖:
| 项 | 实测值 |
|---|---|
| 魔数 | glTF(4 字节) |
| 版本 | 2 |
| 声明总长度 | 5,956 字节,与实际大小一致 ✅ |
| 分块 1 | JSON,1,336 字节(材质、节点、贴图描述) |
| 分块 2 | BIN\0,4,592 字节(顶点、索引、以及贴图字节) |
| 算术校验 | 12 + (8 + 1336) + (8 + 4592) = 5956 ✅ |
| 贴图 | image/png,bufferView 引用 → 内嵌在 BIN 里 |
| 几何 | 12 个三角面 / 24 个顶点(带索引复用) |
| 包围盒 | 1 × 1 × 1 米(glTF 规范单位就是米) |
注意那个 24 顶点:同样 12 个三角面,STL 要存 36 个顶点,GLB 只存 24 个(8 个角 × 3 个法线方向)。索引复用是 GLB 更小的第一个原因,贴图编码是第二个。
三种"同一个模型"的体积对照
| 形式 | 字节 | 说明 |
|---|---|---|
外部三件套:.gltf + .bin + .png |
3,695 + 840 + 3,750 = 8,285 | 搬家必须整目录搬 |
自包含 .gltf(base64 内嵌) |
8,462 | 单文件,但 base64 让体积涨到 GLB 的 1.42 倍 |
.glb |
5,956 | 二进制分块,没有 base64 膨胀 |
结论很直接:要单文件,就用 GLB;要人能读、要 diff、要手改,才用 .gltf。
三、打不开的两类原因(其余都很罕见)
① 后缀被改过:xxx.glb 其实是 .gltf,或反过来。实测:把 BoxTextured.glb 改名成 .gltf,再按 JSON 解析 → UnicodeDecodeError。因为文件开头是 glTF 二进制头(67 6C 54 46),不是 {。
一行判定:
head = open(path,'rb').read(4)
is_glb = head == b'glTF'
is_gltf = head.lstrip().startswith(b'{')
② 版本或扩展不支持。GLB 头部第 2 个 4 字节是版本号,只见过 2(glTF 1.0 的 GLB 极少)。真正会卡住你的是 extensionsRequired 里的扩展:Draco 压缩(KHR_draco_mesh_compression)、meshopt、Basis 纹理(KHR_texture_basisu)。老的/精简的查看器遇到"必需扩展"会直接拒绝加载,而不是显示灰模。
判定:把 GLB 的 JSON 分块读出来看 extensionsRequired(有内容就必须用支持它的加载器)。
顺带说一个反常识的点:GLB 里也能放外部文件。规范允许 image.uri 指向外部贴图,只是导出器默认内嵌。所以"GLB 一定不会丢贴图"这句话要加个"通常"。
四、在线打开的实际流程(BimAnt)
- 打开 GLB 在线查看,拖入
.glb; - 看朝向:glTF 规范是 Y 轴向上、右手系、单位米。如果模型躺着,是导出器没按规范写,不是查看器的问题;
- 看尺寸:显示 0.01 米的汽车模型,就是导出时按 cm 建模却没转换;
- 看贴图:正常应该直接带纹理。灰模说明该文件确实是"无材质 GLB"(text-to-3D 常见)。
需要更细的结构检查(缺资源、非法索引、扩展声明)可以用 glTF Viewer 2.0 的验证报告。
五、GLB 和相邻格式怎么选
| 你的场景 | 选它 | 理由 |
|---|---|---|
| 网页/小程序展示 | GLB | 单文件、贴图内嵌、生态最全(three.js / model-viewer / Babylon 都原生支持) |
| 需要人读、进 Git diff | .gltf + 外部文件 |
JSON 可读,方便 code review 与脚本批处理 |
| 要动画 | GLB(带 skin/animation) | glTF 2.0 支持骨骼与动画,FBX 更适合进 DCC 编辑 |
| 3D 打印 | STL / 3MF | 打印链路不认 glTF(切片器不支持) |
体积太大时,先做几何优化再考虑压缩:见 3D 模型在线轻量化。
常见问题
Q:GLB 和 glTF 是两种格式吗?一种格式、两种封装。.gltf 是 JSON + 外部资源,.glb 是二进制单文件。内容模型完全一致。
Q:为什么 text-to-3D 工具都导出 GLB?因为要"一个文件丢进网页就能显示"。STL 不能带材质,OBJ 要一堆配套文件,FBX 浏览器里基本没法直接读。
Q:GLB 能转回 STL 吗?能,但会丢掉 UV、材质和动画——STL 只有三角面。做 3D 打印时这是正常取舍。
Q:打开 GLB 提示"不支持的扩展"怎么办?先看扩展名:Draco 需要用支持 Draco 的加载器(本站在线查看器按可用扩展处理),或者用 Blender 重新导出为不压缩的 GLB。
Q:GLB 里能塞几个模型?一个文件可以有多 mesh / 多 node / 多个场景。常见是"一个场景多个零件",不是"一个文件一个模型"。
样本与复现:Khronos glTF-Sample-Assets/Models/BoxTextured(glTF 与 GLB 两种封装);分块解析用 Python 3.10 + struct + json;体积对照由 base64 内嵌脚本生成。数字均为 2026-10-25 实测。
相关阅读:glTF / GLB 尺寸朝向校验与体积优化 | 3D 模型在线轻量化 | 3D 模型在线查看工具 | 3D 格式与在线查看完全指南
本文由 BimAnt 整理,含本地实测数据,转载请注明出处。最后更新:2026-10-25
查看专题全部文章 →
按格式打开:GLB 在线查看 | glTF 文件怎么打开 | OBJ 文件在线预览(浏览器直接打开,不上传服务器)