我可以缩小 glb 文件吗?

Can I make the glb file smaller?

我有 306 mb 的大 obj 文件。所以我将其转换为 glb 文件以减小其大小。文件的大小减少了很多,达到 82 mb,但仍然很大。我想让这个文件更小。有办法吗?如果有,请告诉我。

如果您不能进一步减少 glb 文件,请告诉我更有效的减少 obj 文件的方法。我已经完成的其中一件事是将 obj 文件更改为 json、压缩、展开并使用 pako.js 加载它。我没有选择这个方法,因为解压太慢了

可能是 vertex-data 导致文件如此之大。在这种情况下,您可以使用 DRACO compression-library 进一步缩小尺寸。

首先,要测试压缩器,您可以运行

npx gltf-pipeline -i original.glb -d --draco.compressionLevel 10 -o compressed.glb

(您需要安装当前版本的 node.js 才能运行)

如果 vertex-data 是文件那么大的原因,那么压缩文件应该比原始文件小得多。

现在您必须经过一些 extra-steps 才能加载文件,因为常规 GLTFLoader 不支持 DRACO-compressed 网格。

基本上,您需要导入 THREE.DRACOLoader and the draco-decoder。最后,你需要告诉你的 GLTFLoader 你知道如何处理 DRACO-compression:

DRACOLoader.setDecoderPath('path/to/draco-decoder');
gltfLoader.setDRACOLoader(new DRACOLoader());

之后,您可以像以前一样使用 GLTFLoader。

唯一的缺点是解码器本身需要一些资源:解码不是免费的,解码器本身是浏览器加载的另外 320kB 数据。我认为如果它为您节省兆字节 mesh-data.

还是值得的

令我惊讶的是,没有人提到明显、简单的有损减小 .glb 文件大小的方法,该文件只是单独的网格和纹理数据的容器:

通过折叠靠近或共面的相邻顶点来减少顶点数,并通过修剪、缩小或使用较低的位深度来处理不必要的细节来减少图像数据。

表面 polygon/pixel 密度每减少 2 倍,文件大小就会减少大约 4 倍。

然后然后,删除不需要的细节后,开始查看 DRACObasis、更少的 JPEG 色度等内容样本,以及 optipng.