【问题标题】:ASTC for normal maps法线贴图的 ASTC
【发布时间】:2019-01-25 18:15:13
【问题描述】:

我正在尝试压缩我的法线贴图纹理,所以我使用的是 ASTC 4x4。

它完全适用于其他纹理(也称为漫反射),但法线贴图的质量损失太大。

有没有办法直接提高法线贴图的 ASTC 质量?

我尝试使用 -normal-psnr 标志,但它使我的纹理变灰(而不是正常的蓝色)

ASTC 法线贴图:

PNG法线贴图:

【问题讨论】:

  • 您能说明一下您看到的质量问题吗?那是在编辑器中还是在设备上?你在什么平台上?这些标签与 Vulkan 和 OpenGL ES 混淆
  • @Bart 我已附上截图,请看。我的问题不在特定的渲染引擎上重复,问题在 astcenc 编解码器内部,所以我的问题是如何更有效地压缩法线贴图

标签: unity3d opengl-es textures vulkan astc


【解决方案1】:

在参考编码器中使用法线模式压缩法线贴图将法线贴图存储为 X+Y 贴图。 X 存储在 R 通道中(并在 G 和 B 中重复),Y 存储在 A 通道中,这就是它看起来灰色的原因。您需要在着色器中重建 Z;基于这样一个事实,即完整的法线应该是单位长度,您不需要存储它,这为压缩器提供了更多可用于提高质量的位。

vec3 normal;
normal.xy = texture(sampler, uv).ra;
normal.xy = normal.xy * 2.0 - 1.0;
normal.z = sqrt(1 - dot(normal.xy, normal.xy));

我倾向于发现 5x5 块 (5.12bpp) 的法线看起来不错,但比这低得多的比特率开始出现质量问题。

【讨论】:

  • 你能帮我吗,如何从纹理中获取正确的值?顺便说一句,似乎 sqrt(1 - dot(normal.xy, normal.xy));会因为 sqrt(0) 而崩溃
  • 你的法线在你压缩之前确定是单位长度吗?
  • 请注意,我在着色器代码中有错字,现在已修复,纹理 swizzle 应为 .ra 而不是 .rz
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2019-04-11
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多