Unity shader 学习记录(透明效果2)

本文深入探讨了Unity中透明度渲染的关键技术,包括渲染顺序控制、透明度测试及混合的实现方式,以及如何通过特定标签和混合指令实现复杂的半透明效果。

前篇介绍了透明度测试和透明度混合的鸡腿实现,下面从几个功能点深入解析:

1、渲染顺序

Unity提供了渲染队列来解决渲染顺序。可以使用SubShader的Queue标签来决定模型归于哪一个渲染队列。 Unity内部使用一些整数索引来表示每个渲染队列,索引号越小越早被渲染。

下面是定义的五个渲染队列:

 用法是在subshader中加入Tag{"Queue"="AlphaTest"}或{"Queue"="Transparent"}

Zwrite Off用于关闭深入写入,一般写在pass中,表示该pass关闭,其他不受影响。

2、透明度需要的标签

 无论透明度测试还是透明度混合都需要定义上面三个标签。RenderType标签可以让unity把这个shader归入提前定义的组,指明该shader,一般用于着色器替换。Camera类的RenderWithShader方法和SetReplacementShader方法。而IgnoreProjector设置为true表示不会投影器影响。

3、混合指令

混合参数有两个:源颜色(片元着色器产生的颜色值),目标颜色(深度缓冲中的颜色值)

 混合因子枚举:

  blendOp指令:

 

 实际写法:

 两个特殊实现的半透明效果:

1、开启深度写入的半透明效果(解决关闭深度写入造成的错误排序) 复杂模型

用两个pass实现,在第一个pass中写入深度不输出颜色,第二个pass关闭深度写入写入颜色。

例子:

 ColorMask用于设置颜色通道的写掩码,语义如下:

2、双面渲染的透明效果

使用cull指令控制需要提出哪个面的渲染图元

 

透明度测试双面渲染: 

只用在pass中设置  Cull Off

透明度混合双面渲染:使用两个pass分别进行背面渲染和正面渲染。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值