ShaderLab中设置混合因子的命令 | |
---|---|
命令 | 描述 |
Blend SrcFactor DstFactor | 开启混合,并设置混合因子。源颜色(该片元产生的颜色)会乘以SrcFactor,而目标颜色(已经存在于颜色缓存的颜色)会乘以DstFactor,然后把两者相加入后再存入颜色缓冲中 |
Blend SrcFactor DstFactor SrcFactorA DstFactorA | 和上面几乎一样,只是使用不同的因子来混合透明通道 |
混合公式:
Orgb = SrcFactor * Srgb + DstFactor * Drgb
Oa = SrcFactorA * Sa + DstFactor * Da
参数 | 描述 |
One | 因子为1 |
Zero | 因子为0 |
SrcColor | 因子为源颜色值。当用于混合RGB的混合等式时,使用SrcColor的RGB分量作为混合因子;当用于混合A的混合等式时,使用SrcColor的A分量作为混合因子 |
SrcAlpha | 因子因为源颜色的透明度值(A通道) |
DstColor | 因子为目标颜色值。当用于混合RGB通道的混合等式时,使用DstColor的RGB分量作为混合因子;当用于A通道的混合等式时,使用DstColor的A分量作为混合因子 |
DstAlpha | 因子为目标颜色的透明度值(A通道) |
OneMinusSrcColor | 因子为(1-源颜色)。当用于混合RGB的混合等式时,使用结果的RGB分量作为混合因子;当用于混合A的混合等式时,使用结果的A分量作为混合因子 |
OneMinusSrcAlpha | 因子为(1-源颜色的透明度值) |
OneMinusDstColor | 因子为(1-目标颜色)。当用于混合RGB的混合等式时,使用结果的RGB分量作为混合因子;当用于混合A的混合等式时,使用结果的A分量作为混合因子 |
OneMinusSrcAlpha | 因子为(1-目标颜色的透明度值) |
混合操作
操作 | 描述 |
Add | 将混合后的源颜色和目标颜色相加。默认的混合操作。使用的混合等式是Orgb = SrcFactor * Srgb + DstFactor * Drgb Oa = SrcFactorA * Sa + DstFactorA * Da |
Sub | 用混合后的源颜色减去混合后的目标颜色。使用的混合等式是: Orgb = DstFactor * Drgb - DstFactor * Drgb Oa = SrcFactorA * Sa - DstFactorA * Da |
RevSub | 用混合后的目标颜色减去混合后的源颜色。使用的混合等式是: Orgb = DstFactor * Drgb - SrcFactor * Srgb Oa = DstFactorA * Da - SrcFactorA * Sa |
Min | 使用源颜色和目标颜色中最小的值,是逐分量比较的。使用的混合等式是: Orgba = (min(Sr , Dr),min(Sg,Dg),min(Sb,Db),min(Sa,Da)) |
Max | 使用源颜色和目标颜色中最大的值,是逐分量比较的。使用的混合等式是:Orgba = (max(Sr,Dr),max(Sg,Dg),max(Sb,Db),max(Sa,Da)) |
其他逻辑操作 | 仅在DirectX.11.1中支持 |
常见的混合类型:
1.Blend SrcAlpha OneMinusSrcAlpha //正常(Normal),即透明度混合
2.Blend OneMinusDstColor One //柔和相加(Soft Additive)
3.Blend DstColor Zero //正片叠底(Multiply),即相乘
4.Blend DstColor SrcColor //两倍相乘(2x Multiply)
5.BlendOp Min Blend One One //变暗(Darken)
6.BlendOp Max Blend One One //变量(Lightne)
7.Blend OneMinusDstColor One //滤色(Screen)
8.Blend One OneMinusSrcColor //等同于
9.Blend One One //线性减淡(Linear Dodge)