Vulkan 中的法线贴图 DXT5 压缩
Normal map DXT5 compression in Vulkan
在 DX10 中,通常的做法是通过将 Y 值放在绿色通道中,将 X 值放在 alpha 中来压缩法线贴图,并应用 DXT5 压缩(然后在着色器中重建 Z 分量)。 Vulkan中对应的格式是什么?我能找到的最接近的是 VK_FORMAT_BC5_UNORM_BLOCK,它是带有 DXT5 的无符号 RG 通道。这是等价的吗?如果是这样,您会将其存储为 R: X 和 G: Y 还是相反(这有关系)吗?或者是否有更新的压缩格式做得更好?
DXT5 是 renamed to BC3 in DX10。 Vulkan 的等效压缩纹理格式遵循 DX10+ 命名约定。所以 VK_FORMAT_BC3_UNORM_BLOCK
正是您习惯使用的。
也就是说,使用 DXT5/BC3 法线贴图在十年前就已经过时了,即使在 DX10 时代也是如此。现在处理这个问题的常用方法是使用 BC5 来存储 X 和 Y 分量,在着色器中生成 Z。对于相同的纹理大小,您可以获得更好的质量。
但更现代的等效方法是使用 BC7 with a 2-channel, separate encoding mode。虽然这需要更先进的压缩器。
在 DX10 中,通常的做法是通过将 Y 值放在绿色通道中,将 X 值放在 alpha 中来压缩法线贴图,并应用 DXT5 压缩(然后在着色器中重建 Z 分量)。 Vulkan中对应的格式是什么?我能找到的最接近的是 VK_FORMAT_BC5_UNORM_BLOCK,它是带有 DXT5 的无符号 RG 通道。这是等价的吗?如果是这样,您会将其存储为 R: X 和 G: Y 还是相反(这有关系)吗?或者是否有更新的压缩格式做得更好?
DXT5 是 renamed to BC3 in DX10。 Vulkan 的等效压缩纹理格式遵循 DX10+ 命名约定。所以 VK_FORMAT_BC3_UNORM_BLOCK
正是您习惯使用的。
也就是说,使用 DXT5/BC3 法线贴图在十年前就已经过时了,即使在 DX10 时代也是如此。现在处理这个问题的常用方法是使用 BC5 来存储 X 和 Y 分量,在着色器中生成 Z。对于相同的纹理大小,您可以获得更好的质量。
但更现代的等效方法是使用 BC7 with a 2-channel, separate encoding mode。虽然这需要更先进的压缩器。