纹理压缩
在Verge3D中,纹理可以通过高效率的KTX2/BasisU压缩算法进行压缩,从而显著减少GPU显存的消耗并提高渲染速度。
启用纹理压缩
要在导出时自动启用纹理压缩,您只需在导出设置中打开相应的选项即可。
同时请确保在创建应用时启用了 Texture Decompressor 选项(默认启用):
如果您忘记启用 Texture Decompressor 选项,只需将 basis_transcoder.js 和 basis_transcoder.wasm 文件从Verge3D安装文件夹的 build 子文件夹(例如 C:\Program Files\Verge3D_for_Blender\build)复制到您的应用目录中。
检查文件
为确保您的应用现在实际加载压缩纹理,请运行您的应用(从应用管理器或部署应用的网站)。打开浏览器控制台,切换到 Network 选项卡。
重新加载您的应用,以便控制台从头开始显示文件。在列表中找到纹理文件——如果一切正常,它们应该以 .ktx2 结尾。
或者,您可以使用性能概况功能来检查压缩纹理是否已启用。
调整压缩
每个纹理都有一个选项来调整压缩算法:
- Auto
- 自动选择最佳算法。在当前实现中对应于使用UASTC。
- UASTC
- 提供最佳质量的现代方法。它对所有纹理都适用,包括法线贴图、ORM纹理等。
- ETC1S
- 提供最佳压缩并生成最小的文件。然而,此算法可能会削弱纹理,所以仅建议用于非对比度图像(如草、木材、砖等)。
- Disable
- 禁用纹理压缩。
特殊情况 - HDR纹理
除了真正的纹理压缩之外,所有HDR图像都使用无损LZMA进行压缩(即与glTF文件使用的方法相同)。这使得HDR文件小了4到6倍,尽管它们仍然占用相同数量的显存。当您将纹理压缩设置设置为 Disabled 时,此功能将关闭。
局限
通常,为所有场景启用纹理压缩是安全的,但是您应该了解此功能带来的一些局限性和缺点。
压缩需要通过网络加载更多数据
如本节开头所述,纹理压缩可显著减少应用所消耗的GPU内存。然而,对于通过网络传输的数据并非总是如此。使用 UASTC(或 Auto)压缩算法时,纹理在某些情况下可能会变得更大。如果网络带宽是优先考虑的因素,请禁用纹理压缩或使用更高效的 ETC1S 算法。
从Verge3D 4.2开始,我们实现了一种对策来限制压缩纹理的大小。如果生成的图像比原始图像大3倍以上,导出器将保留原始未压缩图像不变。
导出更慢
压缩需要在导出过程中花费更多时间来压缩数据。为了节省时间,您可以仅在开发的最后阶段启用它。
仅支持JPEG与PNG格式的纹理
只有JPEG/PNG纹理可以被转换为KTX2格式。其他格式的纹理(如WebP、BMP等)将不会被压缩。
不支持非二次幂 (NPOT) 纹理
如果导出器检测到您尝试压缩NPOT纹理(无论如何我们不建议在应用中使用),它将回退到常规的非压缩数据,并在建模工具的控制台中输出警告。
不支持带有嵌入式ICC配置文件的PNG纹理
带有嵌入式颜色配置文件块(ICC aka iCCP)的PNG图像不受纹理压缩器支持。因此,为了处理此类图像,我们会在将它们传递给压缩器之前完全剥离ICC数据。在非标准颜色配置文件(非sRGB)的情况下,这可能会导致颜色有所失真。
如果不希望剥离ICC数据,请对相关图像禁用纹理压缩,或使用图像编辑软件(Photoshop、GIMP)应用颜色配置文件。
遇到问题?
欢迎您随时在 论坛上提问!您还可以加入中文用户社区QQ群(171678760),在线寻求帮助。