我有一个很大的
obj
文件 306 mb
。所以我将其转换为 glb
文件以减小其大小。文件大小已经减小很多到82 mb
,但仍然很大。我想让这个文件变小。有办法吗?如果有,请告诉我。
如果您无法进一步减少
glb
文件,请告诉我更有效的减少 obj
文件的方法。我已经完成的事情之一是将 obj
文件更改为 json
,使用 pako.js
压缩、展开并加载它。我没有选择这个方法,因为解压速度太慢
如果是顶点数据导致文件那么大,则可能存在。在这种情况下,您可以使用 DRACO 压缩库来进一步减小大小。
首先要测试压缩机,可以运行
npx gltf-pipeline -i original.glb -d --draco.compressionLevel 10 -o compressed.glb
(您需要安装当前版本的 Node.js 才能正常工作)
如果顶点数据是文件那么大的原因,则压缩文件应该比原始文件小得多。
现在您必须执行一些额外的步骤来加载文件,因为常规 GLTFLoader 不支持 DRACO 压缩网格。
THREE.DRACOLoader
和 draco-decoder。最后,您需要告诉您的 GLTFLoader
您知道如何处理 DRACO 压缩:
DRACOLoader.setDecoderPath('path/to/draco-decoder');
gltfLoader.setDRACOLoader(new DRACOLoader());
之后就可以像以前一样使用GLTFLoader了。
唯一的缺点是解码器本身需要一些资源:解码不是免费的,解码器本身是浏览器要加载的另外 320kB 数据。我认为如果它能为您节省兆字节的网格数据,那么它仍然是值得的。
令我惊讶的是,没有人提到有损地减小
.glb
文件大小的明显、简单的方法,该文件只是单独的网格和纹理数据的容器:
通过折叠靠近或共面的相邻顶点来减少顶点数,并通过修剪、缩小或使用较低的位深度来减少不必要的细节来减少图像数据。
表面多边形/像素密度每减少 2 倍,文件大小就会减少大约 4 倍。
然后,一旦删除了不需要的细节,就开始查看诸如DRACO
、
basis
、更少的
JPEG
色度样本和
optipng
之类的东西。