赞
踩
当片元着色器产生一个颜色时,可以选择与颜色缓存中的颜色进行混合。混合与两个操作数有关系:源颜色(Source Color)和目标颜色(Destination Color)。
混合中的源颜色、目标颜色、输出颜色都包含RGBA四个通道的值。
想要混合源颜色S和目标颜色D,得到输出颜色O需要使用混合等式(Blend Equation),而且每次混合需要两个等式,其中一个用于混合RGB通道,另一个用于混合Alhpa(A)通道。
由于需要两个等式混合(一个用于混合RGB通道,另一个用于混合Alpha通道),并且每个等式需要两个因子(一个用于和源颜色相乘,另一个用于和目标颜色相乘),所以一共有四个因子。
ShaderLab中设置混合因子的命令
命令 | 描述 |
---|---|
Blend SrcFactor DstFactor | 开启混合,并设置混合因子。 源颜色会乘以SrcFactor,而目标颜色会乘以DstFactor,然后把两者相加再存入颜色缓冲区中。 |
Blend SrcFactor DstFactor, SrcFactorA DstFactorA | 和上面一样,只是使用不同的因子来混合透明通道 |
在第一种情况下的命令,仅提供了两个因子,这意味着使用相同的混合因子来混合RGB通道和Alpha通道,即此时SrcFactorA等于SrcFactor,而DstFactorA等于DstFactor。
混合公式:注意结果是相加的
可以作为混合因子的参数
参数 | 描述 |
---|---|
One | 因子为1 |
Zero | 因子为0 |
SrcColor | 因子为源颜色。当用于混合RGB的混合等式时,使用SrcColor的RGB分量作为混合因子;当用于混合Alpha的混合等式时,使用SrcColor的A分量作为混合因子 |
SrcAlpha | 因子源颜色的透明度值(Alpha通道) |
DstColor | 因子为源颜色值。当用于混合RGB通道的混合等式时,使用DstColor的RGB分量作为混合因子;当用于混合Alpha通道的混合等式时,使用DstColor分量作为混合因子。 |
DstAlpha | 因子为目标颜色的透明度值(Alpha通道) |
混合操作
混合等式中,当把源颜色和目标颜色与它们对应的混合因子相乘后,还可以使用Add/Sub/RevSub/Min/Max等操作。
操作 | 描述 |
---|---|
Add | 将混合后的源颜色和目的颜色相加。默认的混合操作
|
Sub | 用混合后的源颜色减去混合后的目的颜色。
|
RevSub | 用混合后的目的颜色减去混合后的源颜色。
|
Min | 使用源颜色和目的颜色中的较小值,是逐分量比较。
|
Max | 使用源颜色和目的颜色中的较大值,是逐分量比较。
|
常见的混合类型
Blend SrcAlpha OneMinusSrcAlpha, One Zero
// 正常(Normal), 即透明度混合
Blend SrcAlpha OneMinusSrcAlpha
// 柔和相加 Soft Additive
Blend OneMinusDstColor One
// 正片叠底(Multiply) 相乘
Blend DstColor One
// 两倍相乘(2x Multiply)
Blend DstColor SrcColor
// 变暗 Darken
BlendOp Min
Blend One One
// 变亮 Lighten
BlendOp Max
Blend One One
// 滤色
Blend OneMinusDstColor One
// 线性减淡
Blend One One
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。