shader的Blend混合一直是个很头痛的东西,组合的种类比较多,所以效果比较难记得,所以今天来总结一下
1.Blend SrcAlpha OneMinusSrcAlpha 源颜色 x 源通道 + 目标颜色 x(1 - 源通道)
A * alpha + B*(1-alpha)
这就是我们常用的 alpha blending ,效果比较接近源颜色,可以深一些
2.Blend One One //additive :源颜色 + 目标颜色 正常的叠加模式
A + B
这种模式,是叠加模式,颜色只会比目标颜色亮,很难降低颜色,但是它可以不用通道,黑色就可以替代通道颜色
3.Blend SrcAlpha One //additive blending 源颜色 x 源通道 + 目标颜色 带通道的叠加模式(常用的ADD模式)
A*alpha + B
跟第2种比较接近,但是他需要alpha通道,如果黑白图,可以将黑白图的R通道取出来作为alpha通道,但是记得修改颜色和强度的时候,想办法避免就可以了
4.Blend OneMinusDstColor One //soft additive 源颜色 x (1-目标颜色) + 目标颜色
A * (1-B) +B
这种也是add模式,相对温柔一点,只认黑白图,不用管通道
5.Blend DstColor Zero //multiplicative 源颜色 x 目标颜色 + 0(目标颜色 x 0)
A * B+0
6.Blend DstColor SrcColor //2x multiplicative 源颜色 x 目标颜色 + 目标颜色 x 源颜色 正片叠底的效果
A*B + A *B
选项代号 | 与之等价的代码 |
One | 值为1,使用此因子来让帧缓冲区源颜色或是目标颜色完全的通过。1 |
Zero | 值为0,使用此因子来删除帧缓冲区源颜色或目标颜色的值。0 |
SrcColor | 使用此因子为将当前值乘以帧缓冲区源颜色的值 A |
SrcAlpha | 使用此因子为将当前值乘以帧缓冲区源颜色Alpha的值。A*alpha |
DstColor | 使用此因子为将当前值乘以帧缓冲区目标颜色的值。B |
DstAlpha | 使用此因子为将当前值乘以帧缓冲区目标颜色Alpha分量的值。B*alpha |
OneMinusSrcColor | 使用此因子为将当前值乘以(1 -帧缓冲区源颜色值) 1- A |
OneMinusSrcAlpha | 使用此因子为将当前值乘以(1 -帧缓冲区源颜色Alpha分量的值) 1-A*lpha |
OneMinusDstColor | 使用此因子为将当前值乘以(1 –目标颜色值) 1-B |
OneMinusDstAlpha | 使用此因子为将当前值乘以(1 –目标Alpha分量的值) 1- B*alpha |