Unity shader 混合

混合(Blend)命令

混合(Blend)被用于创建透明的对象。渲染图像时,当所有的着色器执行完并且所有的纹理都被应用之后,像素点会被写入屏幕。如何将这些像素与已有图像进行组合?我们就需要使用混合命令来告诉GPU混合的方式。

混合命令有以下这些:

Blend Off

关闭混合(默认)

Blend SrcFactor DstFactor

片元产生的颜色乘以SrcFactor,加上屏幕上已有的颜色乘以DstFactor,

得到最终的颜色(写入颜色缓存)

Blend SrcFactor DstFactor, SrcFactorA DstFactorA

同上,只不过使用单独的因子SrcFactorA和DstFactorA来混合透明度通道

BlendOp BlendOperation

用其他的操作来取代加法混合。

BlendOp OpColor, OpAlpha

同上,只不过对于透明度通道使用不同的操作。

注:此外还有AlphaToMask On命令,用来开启alpha-to-coverage,如果有机会我们会在后续文章中介绍。

混合操作(BlendOp):

Add

加法:

FinalColor=SrcFactor*SrcColor+DstFactor*DstColor

Sub

减法(源-目标):

FinalColor=SrcFactor*SrcColor-DstFactor*DstColor

RevSub

减法(目标-源):

FinalColor=DstFactor*DstColor-SrcFactor*SrcColor

Min

较小值(逐个通道比较)

Max

较大值(逐个通道比较)

混合因子(Blend)

One

混合因子1,表示完全的源颜色或目标颜色

Zero

混合因子0,舍弃掉源颜色或目标颜色

SrcColor

源颜色值

SrcAlpha

源透明度

DstColor

目标颜色值

DstAlpha

目标透明度

OneMinusSrcColor

1-SrcColor

OneMinusSrcAlpha

1-SrcAlpha

OneMinusDstColor

1-DstColor

OneMinusDstAlpha

1-DstAlpha

常用的混合命令有:

Blend SrcAlpha OneMinusSrcAlpha // 传统透明度

Blend One OneMinusSrcAlpha // 预乘透明度

Blend One One // 叠加Blend OneMinusDstColor One // 柔和叠加

Blend DstColor Zero // 相乘——正片叠底

Blend DstColor SrcColor // 两倍相乘

猜你喜欢

转载自blog.csdn.net/qq_40833062/article/details/129293211
今日推荐