【Unity学习】Unity Shader 实现透明效果(2) 透明度混合

【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

最新文章