今天来分享一下GDC2017上给出的一种优化Alpha Test表现的方案,这种方案借助一套简单的随机算法,以微小的额外消耗,优化了Alpha Test方案随着距离拉远效果下降明显的问题,原文地址在文末的链接中可以找到。
Alpha Test相对于Alpha Blend而言,性能较好(PC端),且效果不受渲染顺序影响,通过Alpha-to-coverage还可以支持MSAA下的Alpha Test效果。
但是这个方案的问题在于,随着距离拉远,覆盖像素数目减少,导致采样结果并不能很好的表示整体形状。
这里提出了一种新的方案,跟此前使用固定值作为Alpha Test的Threshold不同,这里采用一个随机值,为了使得两帧之间的随机值相同,避免闪烁,常用的方案是用hash值来代替。
hash值是一个基于固定算法,固定输入下得到的一个计算结果,具有随机的特性,却不会随时间变化(准确来说是高频变化,当然,这是理想情况下)。
优秀的hash算法需要具备如下几项特征:
- 在给定输入下,输出是稳定的
- 输出数据处于一个有限范围内
- 输出数据的概率分布是均匀的
想要保证输出稳定,首先要考虑的是输入数据是稳定的,否则当变化时就会导致结果变化,从而触发闪烁。
一个可以采取的做法是,将高频变化通过一个倍率降低为低频变化,如上图所示,当然这种做法对效果有一些影响,如下图所示:
可以考虑对坐标进行离散化来得到稳定结果,就需要在上述的一些变化情形下都有稳定结果。
通过对比,贴图空间坐标(UV)与模型空间坐标是比较合适的,考虑离线计算(奇怪,难道UV不能离线计算?),可以选择模型空间。
对A2C的效果也有增强,此外在开启TAA之后,效果会更好:
网友评论