结论当然是需要勾的!
原因要从透明混合模式说起,我们知道 unity shader 里有2种透明混合模式
Blend SrcAlpha OneMinusSrcAlpha // 传统透明度
Blend One OneMinusSrcAlpha // 预乘透明度
传统透明模式颜色混合正确是有前提的,就是做混合的目标,它是不透明的,也就是alpha=1。不透明物体的有效颜色即其颜色本身。
如果有那种半透明的情况,就是 alpha 在 0~1 之间,其实结果可能是不正确的,最直接表现就是,在混合结果中,在透明和不透明区域的边缘,会产生黑边。
对于这种问题,其实预乘透明度模式其实是可以解决的,因为它具有更好的纹理过滤特性。
但是它也不是没有缺陷的,在实践中,我们的纹理的数据源大多是 RGBA32,即单通道 8 比特,只能表示 0-255 的整数,同时游戏资产还会根据目标平台做纹理压缩。
由于精度问题,原本相近的颜色在预乘后会存储为更相近,甚至相同的颜色,经压缩后很容易产生大量 artifacts。要使用预乘 alpha 的纹理,一般会建议采用单通道 16 位的存储。
由于这种情况,即使预乘有很好的纹理过滤特性,也没有被广泛采用。
理论推导可以看这篇文章,写的很清楚了:关于理解 Premultiplied Alpha 的一些 Tips - 知乎
现在,就又说回来 Alpha is Transparency 的意义了,具体可以看官方文档:Texture Import Settings - Unity 手册

勾上以后,引擎会把边界处透明的颜色设置成和临近的不透明区域相近的值,这样边缘的不透明像素在Texture Filtering或计算mipmap时,就不会和黑色混合了(透明=黑色),从而避免产生黑边。
因此,但凡用alpha来表示透明的纹理,都应该把这个勾上。这样才能确保我们在用传统透明模式混合时的正确性。
本文详细介绍了Unity shader中的两种透明混合模式——传统透明度与预乘透明度,以及它们在处理半透明纹理时可能出现的问题。传统模式在边缘可能产生黑边,而预乘透明度模式虽能解决此问题,但因精度和压缩导致的artifacts限制了其应用。AlphaisTransparency选项通过调整边缘透明像素,防止与黑色混合,从而消除黑边,适用于使用传统透明模式的纹理。建议对使用alpha表示透明的纹理启用此选项,以确保混合的正确性。
1223

被折叠的 条评论
为什么被折叠?



