一、介绍
Blending(混合)是计算机呈现渲染结果的最后阶段,混合操作用于与所有计算已结束且已决定将当前计算结果输出到帧缓冲中,此时,如何将待渲染的像素与G-buffer中已的像素进行作用,是直接替换原来的,还是一加一的混合,这就需要混合命令来告诉GPU混合方式。
二、语法:
1. 命令
Blend Off:关闭混合(默认)
Blend SrcFactor DstFactor : 片元产生的颜色乘以SrcFactor,加上屏幕上已有的颜色乘以DstFactor,得到最终的颜色(写入颜色缓存)
Blend SrcFactor DstFactor, SrcFactorA DstFactorA:和上面一样,但是使用不同的因子来混合Alpha通道。
BlendOp Op:不要将混合颜色添加到一起,而是对他们执行不同的操作。
BlendOp OpColor, OpAlpha:与上面相同,但对颜色(RGB)和alpha(A)通道使用不同的混合操作。
2. factor 混合因子
- One
混合因子1,表示完全的源颜色或目标颜色 - Zero
混合因子0,舍弃源颜色或目标颜色 - SrcColor
源颜色值 - SrcAlpha
源透明度 - DstColor
目标颜色值 - DstAlpha
目标透明度 - OneMinusSrcColor
1-将要渲染的像素颜色值 - OneMinusSrcAlpha
1-SrcAlpha - OneMinusDstColor
1-屏幕上(G-buffer中)的像素 - OneMinusDstAlpha
1-DstAlpha
3. BlendOp 混合操作
默认Add,也可以改为其他
- Add
加法:FinalColor = SrcFactor* SrcColor + DstFactor* SrcColor
- Sub
减法(源-目标): FinalColor = SrcFactor* SrcColor - DstFactor* DstColor
- RevSub
减法(目标-源): FinalColor = DstFactor* DstColor - SrcFactor* SrcColor
- Min
较小值(逐个通道比较)
- Max
较大值(逐个通道比较)
- 此外还有DX11.1专属的其他操作,具体参考ShaderLab Blending手册
三、混合效果
混合命令 | 混合效果 |
---|---|
Blend SrcAlpha OneMinusAlpha | 正常模式(传统透明度混合) |
Blend OneMinusDstColor One | 柔和相加(soft Additive) |
Blend DstColor Zero | 正片叠底(Multiply 相乘) |
Blend DstColor SrcColor | 两倍相乘(2X Mutiply) |
BlendOp Min ,Blend One One | 变暗 |
BlendOp Max ,Blend One One | 变亮 |
Blend OneMinusDstColor One | 滤色 |
Blend One One | 线性变淡 |
参考
Unity ShaderLab Blending
Shader Blend混合效果
Unity 之 Shader Blend 混合操作 - 八