章程

引擎升级:材质 (alpha blend alpha test) 透明材质的升级,以及在头发上的应用


引擎这次升级,提供了新的透明材质的解决方案,可实用与头发,草丛等,既有透明通道,又有复杂层叠关系的实用情况。
1

在实时渲染的透明材质的制作中,长期以来,美术一直面对着以下两种情况:
0

Alpha test 可以透掉透明区域,但是由于是像素剪切形式,效果非常粗糙。
Alpha blend可以实现柔顺的半透明效果,但是在空间中会出现严重的前后排序问题。(自身的前后,自身和其他物体的前后排序,都会有问题)。

现在,引擎提供了一套新的透明通道的混合工具,经测试,已经可以较好的解决这个矛盾了。

在引擎中选择一个材质球,右边红框内的参数就是这次升级中,开放出来新的对透明通道的操控。
2

其中: 3是其决定性作用的一个选项。

我们这次这个解决方案的基本理论是,把透明的物体渲染两遍, 第一遍渲染出正确的排序,而透明还是最粗糙的透明。第二遍渲染出好的透明效果,不管排序。

然后在shader里,根据美术贴图里透明alpha通道的深浅程度,把这两种效果混合起来。 alpha通道越白的地方,也就是透明中越“实”的地方,那物体的前后排序是最为重要的,那就把“排序正确”的那个层混合的多一些, alpha通道越黑,也就是透明越“虚”的地方,比如发梢,草尖这些比较朦胧,缥缈的透明区域,恰好是美术最需要半透明效果精致,渐变柔顺,但这样的区域,恰好对“排序正确”视觉上不会太敏感,所以就把“透明衰减好”的那个层,混合的多一点。最终达到“正确排序”和“柔顺半透明”视觉上的平衡和舒适。

而这个 alpha Threshold 的选项就是通过alpha透明通道,来控制两个层之间的混合比例了,0就是0%,就是不混合,1就是100%完全使用第二次渲染的效果。 4

6
然后,如果决定采用渲染两次的“render blend pass”的方案, 除了在一些追求特殊效果,就是偏要把背景透出来的极端情况, 为了要有正确的排序结果,需要这个”write depth”的设定下,把它设置成”true”.

最后一个设置是 blend mode 选项:

7
如果没有一些极端的或者特殊的需求的话,其他几种层叠模式都可以忽略的。 美术可以在normal 和 layer 这两种模式中,选择当前项目需求下,视觉效果最合适的一种模式。这两种模式的差异和优缺点如下:

8

9

normal的混合方式,发梢过渡会比较生硬一些,但是物体整体的体积感会很强,没有漏光,漏背景的现象。一些比较硬的粗糙的发质或者植被,可以考虑使用。

layer的混合方式,半透明过渡非常柔和,但是只要alpha透明通道没有到达255纯白,如果背景颜色和透明物体颜色反差比较大,就会透背景,物体会比较虚,适合做柔软飘渺的长发或者植被,也可以用在头皮上画和头发一样的机理,或者提亮alpha通道来缓和这个问题。

综上所述:合适的模型,纹理以及特殊效果,搭载这次新的透明通道的合适的参数设置, 流程如下图:
10

该升级和各个其他效果配合,最终效果:
11 12