UnityShader开发之透明

1.渲染顺序

        对于开发具有透明效果的Shader而言,渲染顺序十分重要,为了解决渲染顺序的问题,Unity提供了渲染队列:

        

名称 描述
Background 这个渲染队列会在任何其他队列之前被渲染,我们通常使用该队列来渲染那些需要绘制在背景上的物体
Geometry 默认的渲染队列,大多数物体都是用这个队列,不透明物体使用这个队列
AlphaTest 需要透明度测试的物体使用这个队列,在所有不透明物体渲染之后再渲染他们会更高效
Transparent 这个队列中的物体会在所有Geometry和AlphaTest物体渲染后,再按从后往前的顺序进行渲染,任何使用了透明度混合(例如关闭了深度写入的Shader)的物体都应该使用该队列
OverLay 该队列用于实现一些叠加效果,任何需要在最后渲染的物体都应该使用该队列。

2.透明度测试

        只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会在进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它。

3.透明度混合

        它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色,但是,透明度混合需要关闭深度写入,这时的我们要非常小心物体的渲染顺序。

        Blend语义:

语义 描述
Blend Off 关闭混合
Blend SrcFactor DstFactor 开启混合,并设置混合因子,源颜色(该片元产生的颜色)会乘于SrcFactor,而目标颜色(已经存在于颜色缓存的颜色)会乘以DstFactor,然后把两者相加后再存入颜色缓冲中
Blend SrcFactor DstFactor,SrcFactorA DstFactorA 和上面几乎一样,只是使用不同的因子来混合透明通道
BlendOp BlendOperation 并非是把源颜色和目标颜色简单地加减后混合,而是使用BlendOperation来对他们进行其他操作

        混合因子:

参数 描述
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分量作为混合因子
OneMinusDstAlpha 因子为(1-目标颜色的透明度值)

        BlendOperation:

操作 描述
Add

将混合后的源颜色和目标颜色相加。默认的混合操作。使用的混合等式是:

O_{rgb}=SrcFactor *S_{rgb}+DstFactor *D_{rgb}

O_{a}=SrcFactorA *S_{a}+DstFactorA *D_{a}

Sub

将混合后的源颜色减去混合后的目标颜色。使用的混合等式是:

O_{rgb}=SrcFactor *S_{rgb}-DstFactor *D_{rgb}

O_{a}=SrcFactorA *S_{a}-DstFactorA *D_{a}

RevSub

将混合后的目标颜色减去混合后的源颜色。使用的混合等式是:

O_{rgb}=DstFactor *D_{rgb}-SrcFactor *S_{rgb}

O_{a}=DstFactorA *D_{a}-SrcFactorA *S_{a}​​​​​​​

Min

使用源颜色和目标颜色中较小的值,是逐分量比较的,使用的混合等式为:

O_{rgba}=(min(S_r,D_r),min(S_g,D_g),min(S_b,D_b),min(S_a,D_a))

Max O_{rgba}=(max(S_r,D_r),max(S_g,D_g),max(S_b,D_b),max(S_a,D_a))​​​​​​​

猜你喜欢

转载自blog.csdn.net/qq_28474981/article/details/85487564