Verge3D纹理压缩 - Soft8Soft
Description: Verge3D支持使用KTX2/BasisU压缩算法压缩纹理。了解如何在您的应用中启用此功能。

# 纹理压缩

在Verge3D中，纹理可以通过高效率的KTX2/BasisU压缩算法进行压缩，从而显著减少GPU显存的消耗并提高渲染速度。

一个台灯模型样品的尺寸比较，图片由Khronos® Group提供。

- 启用纹理压缩
- 检查文件
- 调整压缩
- 特殊情况 - HDR纹理
- 局限

#

## 启用纹理压缩

要在导出时自动启用纹理压缩，您只需在导出设置中打开相应的选项即可。

Blender
3ds Max
Maya

同时请确保在创建应用时启用了 Texture Decompressor 选项（默认启用）：

如果您忘记启用 Texture Decompressor 选项，只需将 basis_transcoder.js 和 basis_transcoder.wasm 文件从Verge3D安装文件夹的 build 子文件夹（例如 C:\Program Files\Verge3D_for_Blender\build）复制到您的应用目录中。

#

## 检查文件

为确保您的应用现在实际加载压缩纹理，请运行您的应用（从应用管理器或部署应用的网站）。打开浏览器控制台，切换到 Network 选项卡。

重新加载您的应用，以便控制台从头开始显示文件。在列表中找到纹理文件——如果一切正常，它们应该以 .ktx2 结尾。

或者，您可以使用性能概况功能来检查压缩纹理是否已启用。

#

## 调整压缩

每个纹理都有一个选项来调整压缩算法：

Blender
3ds Max
Maya

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)，在线寻求帮助。