【问题标题】:Can I make the glb file smaller?我可以让glb文件更小吗?
【发布时间】:2019-10-09 19:18:06
【问题描述】:

我有一个大的obj 文件306 mb。所以我把它转换成一个glb 文件来减小它的大小。文件的大小已经减少了很多到82 mb,但它仍然很大。我想让这个文件更小。有办法吗?如果有,请告诉我。

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

【问题讨论】:

    标签: gltf


    【解决方案1】:

    如果是顶点数据导致文件那么大,则可能存在。在这种情况下,您可以使用 DRACO 压缩库来进一步减小大小。

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

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

    (您需要安装当前版本的 node.js 才能正常工作)

    如果文件这么大的原因是顶点数据,那么压缩后的文件应该比原始文件小很多。

    现在您必须通过一些额外的步骤来加载文件,因为常规 GLTFLoader 不支持 DRACO 压缩网格。

    本质上,您需要导入THREE.DRACOLoaderdraco-decoder。最后,您需要告诉您的GLTFLoader,您知道如何处理 DRACO 压缩:

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

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

    唯一的缺点是解码器本身需要一些资源:解码不是免费的,而且解码器本身需要浏览器加载另外 320kB 的数据。我认为如果它可以为您节省数兆字节的网格数据,它仍然是值得的。

    【讨论】:

      【解决方案2】:

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

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

      表面多边形/像素密度每减少 2 倍,文件大小应该会减少大约 4 倍。

      那么,一旦你删除了不需要的细节,就开始查看DRACObasis、更少的JPEG 色度样本和optipng

      【讨论】:

      • 我一直在四处寻找,同样感到惊讶的是,没有人谈论只是让 .glb 更小。我想做这样的事情来加载预览 3D 文件,这些文件在打开时指向全尺寸模型,但预览只是一个有损缩小模型。同样,如果您在移动设备上有一个 2400x2400 像素的图像,您可以简单地将图像缩小到 640x640,而几乎没有/没有感知损失。显然,3D 文件远不那么简单,但概念相同。关于如何解决这个问题的任何建议?最好在 node.js 后端?
      • @AhrenFullStop Google 获取“网格抽取库”和“网格简化库”。如果您可以调用外部命令并且不介意过度使用,您还可以将 Blender 作为 Python 库运行并使用其“Decimate”修改器重新导出网格——这可以自动处理保留 UV 映射等。跨度>
      猜你喜欢
      • 2010-12-29
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多