【Unity学习】Unity Shader 实现透明效果(1)
Blend 命令
为了进行透明度混合,Unity为ShaderLab提供了Blend命令:
一般方法中,经过混合之后的新颜色是:
new_DstColor = SrcAlpha x SrcColor + (1-SrcAlpha ) x old_DstColor;
关闭深度写入的透明度混合效果
这样物体就透明了,但是会存在一个问题:
该透明模型内部会出现交叉的效果,即模型原本被遮挡的部分因为透明了也能被看到,因为它关闭了深度测试
解决方法之一就是再次重新使用深度测试
开启深度写入的透明度混合效果
要完成这种效果,只需要再增加一个通道,让它打开深入写入,当然,也需要设置点别的东西:
Pass { ZWrite On ColorMask 0 }
非常简单的代码
在Pass内的第一行我们打开了深入写入,从而能够读取数据
ColorMask 这是一个新的渲染命令,用于设置颜色通道的写掩码,它的语义是:
ColorMask RGB |A |0 | 以及其他的R、G、B、A组合
但设置为0时,意味着Pass不写入任何颜色,此时该通道只写入深度缓存,符合要求
开启双面渲染的透明度混合效果
在没有开启双面渲染的时候,我们常常无法观察到物体内部及背面的形状,这是因为另外一面并没有被渲染而是被默认剔除了。
所以我们需要用到一个新的指令Cull来设置:
Cull Back | Front | Off
选Back时剔除背对摄像机的图元,选Front时剔除朝向摄像机的,选Off则不会剔除任何一种
所以要给上面每一个Pass都增加一个Cull命令:
Cull off
这样每个面都被渲染了,当然,不是每个透明物体都用这种需要。
来源:CSDN,作者:雨果66666,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/qq_32418469/article/details/81323338