【问题标题】:three.js texture compression with PNGsthree.js 纹理压缩与 PNG
【发布时间】:2014-09-29 05:00:52
【问题描述】:

具有 S3TC 压缩的纹理很好,例如因为它们允许它更快地将纹理上传到 GPU。在这种情况下(使用three.js)我将不得不使用DDS格式,但是即使使用压缩效果最好的方法,这种格式的纹理图像通常也比相同的PNG更大。

有没有可能让一个人拥有两全其美的东西?

【问题讨论】:

  • 纹理压缩与 GPU 内存使用有关,而不是“更快地上传到 gpu”。
  • 所以它是在 GPU 中即时解包的?太好了,甚至更好!

标签: three.js


【解决方案1】:

我不太确定你的问题是什么。如果要下载 PNG 并将它们作为 DDS 上传到 GPU,则必须编写 JavaScript DDS 压缩器(或使用 emscripten 移植 C/C++ 压缩器)。不过你会遇到一些问题

  1. DDS 压缩很慢。

    大多数压缩器需要几秒钟的时间来压缩

  2. DDS 支持仅存在于桌面

    大多数手机不支持 DDS

更好的问题是您为什么要这样做?您的项目是否如此具有如此多的资源的 AAA 级,以至于您真的需要使用 DDS 来压缩内存中的所有纹理?

【讨论】:

  • 好点,在处理大型纹理时,将某些东西编码为 DDS 确实很慢。在我的情况下,我现在解决了一些更小的纹理,我希望我的客户很高兴,它是关于非常详细的平面 AutoCad 数据。 PS:我最初将它归类为 WebGL 是因为我想知道是否有一些 WebGL 功能可以制作成一个可以帮助我的 three.js 插件。我知道three.js 支持DDS。 PPS:我相信在某些平台上支持某些纹理压缩格式(PVRTC?),虽然我自己还没有检查过。