提高Unity中贴图的质量(IOS)

贴图在移动和桌面应用中普遍存在,他们为广泛的应用程序添加了一定的真实感。其中图像质量和加载时间等因素对智能手机,平板电脑用户至关重要。通常我们通过提高贴图分辨率来提高质量,通过压缩贴图来提高性能。

在Unity中我们 PVRTC 和 ASTC两种压缩格式,由于在IOS 9以后才会支持ASTC,所以这里只讨论PVRTC格式。
下面来看一个贴图压缩前后的对比图。

提高Unity中贴图的质量(IOS)_第1张图片
RGBA Compressed PVRTC 4.png

可以发现右边贴图质量非常低,正常来说我们很难接受这样的贴图,再来看看 RGB 格式的贴图压缩情况。

提高Unity中贴图的质量(IOS)_第2张图片
RGB Compressed PVRTC 4.png

对比来看 RGB贴图的压缩质量有显著的提高,已经在我们可以接受的范围内了。

RGBA Compressed PVRTC 4 bits 和 RGB Compressed PVRTC 4 bits拥有相同的压缩比率,但RGBA的质量损失更加严重。通常来说这种压缩格式在3D模型上的表现是可以接受的,但在2D UI上则表现不佳。

观察到RGB格式的压缩质量远远高于RGBA,可以通过把RGBA贴图分离成 RGB贴图和Alpha贴图来提高贴图质量。同步修改下Shader改成采样两张贴图,以2张4bits贴图 换1张32bits贴图节省了3/4的内存与加载时间。

提高Unity中贴图的质量(IOS)_第3张图片
PVRTC Data Word.png

贴图RGB和Alpha分离解决了大部分贴图质量问题,但是这时候还会碰到一个色阶块的问题。一张Alpha渐变贴图的在压缩后表现成块状。通过上图我们可以知道PVRTC 是按 4x4的方式压缩贴图,这里使数据更加离散化,变成我们能观察到的色块了。

由于Alpha贴图只占用一个通道,而我们只有RGB压缩格式。所以可以通过把数据分散在另外两个通道来改善色阶块的问题。具体实现可以通过修改自己贴图分离的代码和Shader同步实现。比如 AlphaTexture.rgb = (sourceTexture.a, 0, sourceTexture.a / 2 + sourceTexture.a % 2)可以显著改善色阶块的出现。

还有一个用内存换质量的方法,直接使用Alpha 8 bits格式。这个格式比 RGB PVRTC 4 bits大一倍,不过这样贴图质量肯定不会有任何损失。

你可能感兴趣的:(提高Unity中贴图的质量(IOS))