unity shader学习笔记(十一)——Unity中的透明效果之ShaderLab中的混合命令

来源:互联网 发布:64式轻坦性能数据 编辑:程序博客网 时间:2024/05/18 08:30

混合

  混合:当片元着色器产生颜色时,可以选择与颜色缓冲中的颜色进行混合。混合与两个操作数有关,源颜色(source color)目标颜色(destination color)。源颜色就是片元着色器产生的颜色,目标颜色是颜色缓冲中的颜色,两者进行混合后会重新写入颜色缓冲中,它们都包含了RGBA四个值。

  Unity在开启混合后,只需要设置混合因子即可,下面是Unity中的几种混合因子:

命令 描述 One 因子为1 Zero 因子为0 SrcColor 因子为源颜色值 SrcAlpha 因子为源颜色Alpha值 DstColor 因子为目标颜色值 DstAlpha 因子为目标颜色Alpha值 OenMinusSrcColor 因子为(1-源颜色值) OneMinusSrcAlpha 因子为(1-源颜色Alpha值) OneMinusDstColor 因子为(1-目标颜色值) OneMinusDstAlpha 因子为(1-目标颜色Alpha值)


  使用上面的指令时,RGB通道的混合因子和A通道的混合因子是一样的,当我们希望使用不同的参数混合A通道时,可以用下面的指令:

Blend SrcAlpha OneMinusSrcAlpha, One Zero

混合操作

   一般情况下,将源颜色和目标颜色与它们的因子相乘后,都是把它们的结果相加的,但也可以设置为其他的操作。在SharderLab中可以使用BlendOp BlendOperation命令。ShaderLab中支持的混合操作如下表:

操作 描述
Add 将混合后的源颜色和目标颜色相加,是默认的混合操作,等式是:
Color = SrcFactor*SrcColor + DstFactor*DstColor
Alpha = SrcFactor*SrcAlpha + DstFactor*DstAlpha
Sub 用混合后的源颜色减去目标颜色,等式是:
Color = SrcFactor*SrcColor - DstFactor*DstColor
Alpha = SrcFactor*SrcAlpha - DstFactor*DstAlpha
RevSub 用混合后的目标颜色减去源颜色,等式是:
Color = DstFactor*DstColor - SrcFactor*SrcColor
Alpha = DstFactor*DstAlpha - SrcFactor*SrcAlpha Min 使用混合后的目标颜色和源颜色中较小的值,等式是:
Color = (min(SrcR, DstR), min(SrcG, DstG), min(SrcB, DstB), min(SrcA, DstA)) Max 使用混合后的目标颜色和源颜色中较大的值,等式是:
Color = (max(SrcR, DstR), max(SrcG, DstG), max(SrcB, DstB), max(SrcA, DstA)) 其他逻辑操作 仅在DirectX11.1中支持


常见的混合类型

  通过混合操作和混合因子命令的组合,我们可以得到一些类似Photoshop混合模式中的混合效果:

//正常(Normal),即透明度混合Blend SrcAlpha OneMinusSrcAlpha//柔和相加(Soft Additive)Blend OneMinusDstColor One //正片叠加(Multiply),即相乘Blend DstColor Zero//两倍相乘(2x Multiply)Blend DstColor SrcColor //变暗(Darken)BlendOp MinBlend One One//变亮(Ligthten)BlendOp MaxBlend One One //滤色(Screen)Blend OneMinusDstColor One//等同于Blend One OneMinusSrcColor //线性减淡(Linear Dodge)Blend One One

  需要注意的是Min和Max混合操作会忽略混合因子。有些混合模式没有设置混合操作的种类,但是默认是用加法操作。

阅读全文
0 0
原创粉丝点击