我有一个obj
的大306 mb
文件。因此,我将其转换为glb
文件以减小其大小。文件的大小已减少到82 mb
,但仍然很大。我想缩小这个文件。有办法吗?如果有,请告诉我。
如果您无法进一步缩小glb
文件,请告诉我更有效的方法来缩小obj
文件。我已经做的一件事是将obj
文件更改为json
,使用pako.js
压缩,展开和加载它。我之所以选择这种方法,是因为它解压缩的速度太慢。
答案 0 :(得分:2)
如果是顶点数据导致文件变大,则可能会出现。在这种情况下,您可以使用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数据。我认为,如果它可以为您节省兆字节的网格数据,还是值得的。
答案 1 :(得分:0)
令我惊讶的是,没有人提到明显减少损失.glb
文件大小的简单方法,该文件只是用于存放单独的网格和纹理数据的容器:
通过折叠彼此靠近或共面的相邻顶点来减少顶点数,并通过修剪,缩小或使用较低的位深度来处理不必要的细节来减少图像数据。
表面多边形/像素密度每降低2倍,文件大小就会降低4倍。
然后然后,一旦您删除了不需要的细节,就开始查看诸如DRACO
,basis
,更少的JPEG
色度样本和{{ 1}}。