GLB 压缩 — 在线压缩 GLB 文件

为网页缩小 3D 模型,纹理和几何体一并压缩,还能对比压缩前后的效果,全程无需上传。

🔒 文件不离开设备🖼️ 纹理转为 WebP🔍 压缩前后预览

.glb · .gltf · 最大 200 MB · 在本设备上压缩,从不上传

🔒

无需上传任何文件

模型在这个浏览器标签页内,由后台工作线程读取、压缩并写出。未发布的产品和客户项目永远不会离开你的设备。

🔍

下载前先看效果

在同一视角下切换“压缩前”和“压缩后”,需要时还可以打开线框,并在压缩前后对照表中逐一检查每张纹理。

🧩

懂兼容性的预设

Web 预设为浏览器生成最小的文件。“兼容”预设不添加任何 glTF 扩展,原文件能在哪里打开,结果就能在哪里打开。

♾️

免费,没有每周次数限制

无需账号,不扣点数,也没有水印。电脑上最大支持 200 MB 的文件,手机上最大 50 MB。

压缩 GLB 文件到底做了什么?

压缩 GLB,就是重新编码其中的纹理和几何体,让同一个模型占用更少的字节。省下来的大部分来自纹理:在我们实测的八个 Khronos 示例模型中,只要文件带有纹理,图片就占了大头。这个 GLB 压缩工具会缩小这些图片、清理几何体,再写出一个新的 .glb,全部在你的浏览器中完成。

更小的 GLB 在商品页上加载更快,能满足 3D 平台和模型市场的上传大小限制,在手机上也更省内存。要做到这些,模型的形状、材质和动画都不必改变。

GLB 里的字节都花在了哪里

GLB 包含三类数据:纹理(包裹在模型表面的图片)、几何体(顶点位置、法线和三角形列表)以及动画。纹理以完整图片文件的形式存放在 GLB 中,常常是 2048 × 2048 的 PNG,所以一个只有几百个三角形的模型也可能重达 8 MB。压缩之前,可以先在 GLB 查看器 中打开文件,看看它自己的体积构成。

无损清理与有损压缩

有些步骤不会带来任何肉眼可见的变化:删除重复数据,去掉没有被使用的材质和纹理,合并完全相同的顶点。更大的节省来自有损步骤:缩小纹理,把纹理重新编码为 WebP 或 JPEG,以及用更少的位数存储顶点位置。有损并不等于看起来更差,但这部分值得检查,“压缩前 / 压缩后”切换正是为此而设。

原文件Avocado.glb · 7.73 MB压缩后0.09 MB−98.8%去掉的部分:更小的 WebP 纹理和打包后的几何体纹理几何体
Avocado 使用 Web 预设前后的对比:青绿色条带就是压缩去掉的 98.8%。

3 步压缩 GLB 文件

1

拖入 .glb 或 .gltf

点击“选择 3D 文件”,或把 .glb 拖到预览区。压缩 .gltf 时,请连同它的 .bin 和纹理文件一起选择,或直接拖入整个文件夹;输出结果始终是单个 .glb。面板会列出每张纹理的尺寸、格式和字节数。

2

选择 Web、“兼容”或“自定义”

Web 为浏览器生成最小的文件,“兼容”让文件不含任何新扩展,“自定义”则让你自行选择纹理尺寸、格式和质量。在你按下任何按钮之前,纹理表就会显示每张纹理将变成什么样。

3

对比,然后下载

点击“压缩 GLB”。完成后,预览区会切换到“压缩后”,镜头停在你离开时的位置;按 B 键或使用“压缩前 / 压缩后”切换进行对比,然后点击“下载压缩后的 .glb”。

.glb选择 3D 文件
1

选择 .glb,或连同附带文件一起选择 .gltf。

Web兼容自定义
2

按模型接下来的去向选择预设。

压缩前压缩后B
3

对比“压缩前”和“压缩后”,然后下载。

纹理:大部分字节的去处

GLB 中的每张纹理都是一个完整的图片文件,模型显示出来时,GPU 会把它解包成原始像素:一张 2048 × 2048 的纹理,不论它的 PNG 有多小,在未计 mipmap 的情况下都要占用约 16 MB 显存。所以压缩 GLB 时,纹理设置既决定下载有多大,也决定模型显示起来有多吃资源。

纹理尺寸:4096、2048、1024 还是 512?

把纹理的宽和高各减半,像素只剩四分之一。在网页上,模型通常只占屏幕的一部分,1024 像素对大多数商品已经足够;主视觉图和特写值得保留 2048 像素,小道具用 512 像素就合适。这个 GLB 压缩工具只会缩小纹理,绝不放大,并且保持宽高比。如果想手动调整单张纹理的尺寸,可以使用 图片尺寸调整工具。

GLB 中的 WebP、PNG 与 JPEG

PNG 和 JPEG 属于 glTF 本身,所以每个能打开 GLB 文件的应用都能读取它们。WebP 通常能得到最小的文件,但使用 WebP 的 GLB 需要声明 EXT_texture_webp 扩展,打开它的应用也必须支持该扩展。JPEG 无法存储透明度,所以只要纹理的像素不是完全不透明,本工具就会把它保留为 PNG。关于这几种格式的一般性取舍,请参阅 PNG 转 WebP。

法线贴图需要更温和的压缩

法线贴图用颜色记录表面朝向,有损压缩留下的块状瑕疵会表现为光照错误,而不只是颜色噪点。两个预设都为法线贴图设定了更高的质量下限(0.9)。WebP 和 JPEG 还会以较低的分辨率存储颜色,这会让法线贴图损失一些精度;把粗糙度、金属度和环境光遮蔽分别存进不同通道的纹理也是如此。如果这些精度很重要,请选择“自定义”并选择“保留原格式”。

带透明度的纹理

树叶、贴花和玻璃常常依赖 alpha 通道。WebP 能保留它,JPEG 不能,所以原本要转成 JPEG 的透明纹理会改存为 PNG。在我们的实测中,Lantern 和 ToyCar 都因此各有一两张纹理保留为 PNG。

4096 px64 MB2048 px16 MB1024 px4 MB512 px1 MB每张纹理解码后占用的显存RGBA,每像素 4 字节,未计 mipmap;磁盘上的文件小得多,显存占用却不会变小。
纹理边长每减半一次,像素和显存占用都只剩四分之一。
glTF 内置透明度典型大小(照片类纹理)PNG是是JPEG是否WebP需要 EXT_texture_webp是
PNG 和 JPEG 属于 glTF 本身;WebP 需要扩展,但通常能得到最小的文件。

几何体压缩:meshopt、量化与 Draco

几何体通常是 GLB 中较小的部分,但在高密度网格、扫描模型和带动画的角色中,它可能占据文件的大部分。Web 预设用 meshopt 压缩几何体;其他预设保持原有编码,只做清理。

meshopt 压缩做了什么

meshopt 先重排顶点和三角形,让相邻的数据存放在一起;然后把位置、法线和纹理坐标从 32 位浮点数改存为较小的整数(即量化,声明为 KHR_mesh_quantization);最后用 EXT_meshopt_compression 打包。它在浏览器中解码得非常快,three.js、model-viewer 和 Babylon.js 都能读取。

焊接顶点与去除重复数据

导出工具经常把同一个顶点写好几遍、复制整个访问器(accessor),或者留下没有任何地方用到的材质和纹理。合并相同的顶点、删去未使用的数据是无损的,在每个预设中都会执行;仅这一步就让小小的 Fox 模型缩小了 32%。

为什么 Draco 模型的几何体保持不变

Draco 是另一种几何体压缩扩展,压缩率往往比 meshopt 更高。重新写出 Draco 需要它的编码器;而先解码、再不用 Draco 存储几何体,会让一个测试网格变大 4 到 13 倍。因此,当 GLB 已经使用 Draco 时,本工具只重新编码纹理,其余每个字节(包括 Draco 几何体)都保持原样。发生这种情况时,结果卡片会注明。

float3232 位位置坐标0 1 2 → 2 0 1重排顶点int16量化为整数meshopt打包float32在浏览器中解码
meshopt 先重排并量化几何体,再进行打包;浏览器在加载时将其解包。

该选哪个预设?

压缩 GLB 之前,先想想模型接下来要用在哪里:合适的预设取决于此,因为体积最小的设置依赖 glTF 扩展,而并非每个应用都能读取这些扩展。预设下方的说明会列出当前设置将添加的扩展。

用于网页查看器:three.js、model-viewer、Babylon.js

选择 Web 预设。它把纹理缩小到最大 1024 像素,存为 WebP,并用 meshopt 压缩几何体。基于浏览器的查看器,以及基于 three.js 或 Babylon.js 构建的引擎,都能读取它用到的全部三个扩展;而且这是本工具能做出的最小文件:在 Khronos 示例模型上缩小了 48% 到 98.8%。

用于 Blender、Unity 和桌面查看器

选择“兼容”预设。它保留最大 2048 像素的纹理,不透明纹理写为 JPEG,透明纹理写为 PNG,并且完全不添加扩展。桌面工具和游戏引擎的导入器对 WebP 和 meshopt 的支持参差不齐,所以当你无法掌控对方使用的软件时,不含这些扩展的文件才是稳妥的选择。

什么时候用“自定义”

用“自定义”可以让纹理保持原始尺寸、为精确的数据贴图保留原格式、提高或降低质量,或者关闭 meshopt。每改一项设置,纹理表都会随之更新,压缩前就能看到结果会是什么样。

模型接下来用在哪里?网页或浏览器查看器WebBlender、Unity 或桌面应用兼容需要精确控制纹理自定义
选哪个预设,取决于将来用什么软件打开文件。

Khronos 示例模型的实测结果

为了让你心里有数,我们用本页压缩了 Khronos glTF Sample Assets 合集中的 GLB 文件:共八个原始文件,在台式电脑上的 Chrome 中完成。使用 Web 预设时,这八个文件平均缩小 86%,中位数缩小 96%;节省最多的是 Avocado,从 7.73 MB 降到 0.09 MB,因为它的三张 2048 × 2048 PNG 纹理几乎就是整个文件。每个模型大约用时一秒。

“兼容”预设节省得少一些,因为它把纹理保持在 2048 像素,也不使用 WebP,但仍让八个模型中的四个缩小了 83% 到 93%。节省最少的模型要么几何体最多(ToyCar 约有 10.9 万个三角形),要么带有透明纹理,这些纹理会保留为 PNG。

实测:原始大小、Web 预设与兼容预设

模型原始大小Web 预设兼容预设
Avocado7.73 MB0.09 MB (−98.8%)0.57 MB (−92.6%)
WaterBottle8.55 MB0.12 MB (−98.6%)0.88 MB (−89.7%)
BoomBox10.12 MB0.22 MB (−97.8%)1.12 MB (−89.0%)
Corset12.87 MB0.51 MB (−96.0%)2.15 MB (−83.3%)
Lantern9.12 MB0.36 MB (−96.0%)5.49 MB (−39.8%)
SheenChair3.93 MB0.97 MB (−75.3%)1.72 MB (−56.3%)
ToyCar5.17 MB1.30 MB (−74.9%)3.92 MB (−24.2%)
Fox0.16 MB0.08 MB (−48.0%)0.11 MB (−31.9%)
Avocado7.73 MB0.09 MB0.57 MBWaterBottle8.55 MB0.12 MB0.88 MBBoomBox10.12 MB0.22 MB1.12 MBCorset12.87 MB0.51 MB2.15 MBLantern9.12 MB0.36 MB5.49 MBSheenChair3.93 MB0.97 MB1.72 MBToyCar5.17 MB1.30 MB3.92 MBFox0.16 MB0.08 MB0.11 MB原始大小Web 预设兼容预设
八个 Khronos 示例模型在本页的实测结果:原始大小、Web 预设和“兼容”预设。

压缩会损坏我的模型吗?

压缩 GLB 改变的是数据的存储方式,而不是模型本身。网格、材质、节点名称、动画以及其他 glTF 特性都会保留下来;需要检查的是新文件要求哪些扩展,以及近看时纹理的效果。

输出文件可能要求的扩展

Web 预设可能会添加 EXT_texture_webp、EXT_meshopt_compression 和 KHR_mesh_quantization,并把它们标记为必需,这样无法读取它们的应用会报错提示,而不是显示一个残缺的模型。“兼容”预设不添加任何扩展。GLB 原本使用的其他扩展会保留;如果本工具不认识某个扩展,就会改为只重新编码纹理,不改写任何它不理解的内容。

动画、蒙皮与变形目标

动画、带蒙皮的角色和变形目标都能完好地经过压缩。meshopt 还会压缩动画关键帧,量化保留的精度对常规尺寸的模型已经足够;对于非常大的场景或以毫米为单位的工程模型,请打开线框对比结果,或在“自定义”中关闭 meshopt。

KTX2 纹理保持原样

已经以 KTX2(KHR_texture_basisu)存储的纹理是为 GPU 压缩的,在显存中也占用很小。本工具会原样保留它们,而不是把它们转回普通图片。

Web兼容无需任何扩展即可打开EXT_texture_webpEXT_meshopt_compressionKHR_mesh_quantization此预设会写入不使用three.js、model-viewer 和 Babylon.js 均能读取这三种扩展
每个预设可能为压缩后的文件添加的扩展。

为什么压缩后 GLB 仍然很大

如果压缩 GLB 后节省得很少,面板通常会显示原因。文件可能已经压缩过:本来就是小尺寸 WebP 或 JPEG 的纹理很难再缩小,而且只要重新编码不能让纹理变小,本工具就会保留原纹理。如果结果完全没有变小,就不会提供下载,这是有意为之。

高密度扫描与摄影测量模型

扫描物体和摄影测量模型常常有数十万乃至数百万个三角形,这时占满文件的是几何体,而不是纹理。meshopt 有帮助,但真正的解决办法是减少三角形:先在 3D 编辑器中精简网格,例如使用 Blender 的“精简”(Decimate)修改器,再到这里压缩结果。

压缩带外部文件的 .gltf

.gltf 把几何体和纹理保存在单独的文件中。把它们全部选中,或拖入整个文件夹,本工具就会把所有内容打包成一个压缩后的 .glb。使用 Draco 的 .gltf 必须先导出为 .glb,因为 Draco 数据只有在 GLB 内部才能原样保留。

命令行中的等效做法

本页是在你的浏览器中运行开源的 glTF Transform 库。如果要在构建流程中批量压缩文件,它的命令行工具可以完成类似的工作,例如 gltf-transform optimize input.glb output.glb --compress meshopt --texture-compress webp --texture-size 1024。

你的模型永远不会离开你的设备

许多在线 GLB 压缩工具会把文件上传到服务器,有些还限制每周能压缩多少个文件。在这里,整个过程都在你浏览器标签页内的后台工作线程中完成:模型从你的磁盘读取,在内存中压缩,再直接以下载的形式保存回来。这对未发布的产品、客户项目以及任何受保密协议约束的内容都很重要。关闭标签页后,什么都不会留下。想找以同样方式工作的其他工具,请查看 我们所有的免费工具。

GLB 压缩 — 常见问题

免费,无需账号,不扣点数,也没有每周次数限制。电脑上最大支持 200 MB 的文件,手机上最大 50 MB,因为手机的内存更容易耗尽。

清理步骤是无损的;缩小纹理、改用 WebP 或 JPEG 以及量化顶点则是有损的。对大多数模型来说,差别很难看出来,而且“压缩前 / 压缩后”切换会以同一视角展示两者,方便你在下载前检查。

取决于文件中纹理所占的比例。在 GLB 查看器 中打开文件即可查看体积构成:以纹理为主的模型用 Web 预设往往能缩小 90% 以上,以几何体为主的扫描模型则节省得少一些。

请使用“兼容”预设:它不添加任何 glTF 扩展,原文件能在哪里打开,压缩后的文件就能在哪里打开。Web 预设适用于 three.js、model-viewer 和 Babylon.js 等浏览器查看器。

两者都用于压缩几何体。Draco 通常能让网格更小;meshopt 解码更快,还能压缩动画。本工具写出的是 meshopt;如果模型已经使用 Draco,则原样保留其 Draco 几何体。

可以。把 .gltf 连同它的 .bin 和纹理文件一起选中,或拖入整个文件夹,就能得到一个压缩后的 .glb。

它很可能已经压缩过,或者文件的大部分是几何体而不是纹理。可以试试“自定义”并选择更小的纹理尺寸,或者先在 3D 编辑器中减少三角形数量。

不会。模型由你浏览器标签页内的工作线程压缩,并直接保存到你的设备上,不会向服务器发送任何内容。

T

TinyImagePro 工程团队

我们打造从不上传你数据的浏览器端文件工具。这个 GLB 压缩工具会自行解析文件结构,所以在压缩任何内容之前,就能告诉你每张纹理将变成什么样。

关于 TinyImagePro →