unity 半透明混合问题_【Unity学习】Unity Shader 实现透明效果(2) 透明度混合

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

这样每个面都被渲染了,当然,不是每个透明物体都用这种需要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值