当前位置:   article > 正文

unity 半透明混合问题_聊聊 Unity 的 Alpha Is Transparency 有什么用

straight alpha texture

Unity的的贴图导入面板上有个开关,Alpha Is Transparency

04c41ff539d0be1937f41f2889f498b7.png

文档中是这样说的:

Enable this property to dilate the color and avoid filtering artifacts on the edges if the alpha channel you specify is Transparency.

本文讲下这个选项做什么,解决什么问题。


做什么?

这个选项开启后,图片中所有完全透明像素(alpha == 0)的RGB会改写为:与其最临近非完全透明像素(alpha>0)的RGB。

可以做个简单的试验看一下,创建一张4x4的图,中间2x2不透明给上不同颜色,周围一圈完全透明。

2a9e0b8aba503136ac1f922a803796de.png

导入Unity后,分别看下开启/不开启 Alpha Is Transparency 时,用不透明shader输出RGB部分。

不开启 Alpha Is Transparency

438ee8f6e11c7433e3658e7c40078a92.png

完全透明像素的RGB为白色(PS的默认行为)。网页背景白色为了便于观察,图片四周加了黑边框。

开启 Alpha Is Transparency

再来瞧下开启时的情况:

965bcfcd89d39c93e7c88da168d98ae8.png

周围一圈的完全透明像素RGB值被填充了,填充成了临近非完全透明像素的RGB。


解决什么问题?

减少纹理过滤产生的瑕疵。

还是拿上面的4x4图片为例,用半透明shader叠加到灰色背景。

图片开启双线性采样后放大显示(发生magnification)。对比下开启和关闭时的情况:

2b71f2341112b18a718a7897fd3b2ad5.png

可以看到右侧关闭 Alpha Is Transparency 时 ,插值部分颜色泛白。两种情况透明通道的插值是一样的,问题是,插值的出来的RGB也有全透明像素RGB的贡献,全透明区域的白色和其它颜色混合产生了白边。

在本文的例子中是白边,也有可能是其它颜色边,这取决于全透明区域的RGB部分存了什么。

在生成 Mipmap 时也会有同样的问题,会引入不期望的颜色。

Unity通过覆写全透明像素的RGB,使这些像素存储的RGB与临近像素一致,达到了减少纹理过滤瑕疵的目的。

这问题其实和 straight alpha 产生的问题类似,因此有了 premultiplied alpha。区别就是Unity 的Alpha Is Transparency只处理全透明像素,解决了一部分问题而且不用修改混合公式,而预乘alpha除了能达到一样的目的还可以缓解半透明像素之间过滤产生的颜色问题。

其它解决方式?

Unity的方式在引擎导入资源时做了全透明像素的修改,同样也可以在美术软件里达到相同的目的,没有统一的术语有叫 padding 的,也有叫 color dilation 的,PVRTexTool 中叫 alpha bleed,这里列举一些相关资料:

Edge padding - polycount​wiki.polycount.com
4c36184fafe0e5399c54dc4cb4f83965.png
Dilate: Color​share.substance3d.com
baad05a7ab0968ee8b766806ed644c8e.png
Applying Edge Padding to Alpha Textures​docs.unity3d.com
4181553d0ef3ca4fc45d9616a41bbf55.png
PVRTexTool Command Line Options​docs.imgtec.com Advanced Edge Padding​ravingbots.com White Edge on Transparent Texture​answers.unity.com Substance Painter - Padding​docs.substance3d.com
9ff7eee5123bd2d8fc7d9ab42ab96fb2.png
How to get rid of white edge artifacts when using alpha texture?​blender.stackexchange.com
795708871506832fe45f1a598ebf6558.png
https://share.substance3d.com/libraries/445​share.substance3d.com

最后打个小广告,我司(友谊时光)引擎开发部2021年招新,觉得北上广房价太贵,愿意来苏州发展的新老同学只要你有一技之长请私信我。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/118481
推荐阅读
相关标签
  

闽ICP备14008679号