透明度混合
透明度混合原理
这种方法可以得到真正的半透明效果,它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是透明度混合需要关闭深度写入,需要小心的处理物体的渲染顺序。
混合的实现
(一)原理
当片元着色器产生一个颜色的时候,可以选择与颜色缓冲中的颜色进行混合。这样一来,混合就和两个操作数有关:源颜色(source color)和目标颜色(destination color)。源颜色用S表示,指的是从片元着色器产生的颜色值,目标颜色,用D表示,指的是从颜色缓冲区中取得的颜色值。对它们进行混合后得到的输出颜色,用O表示,它会重新写入到颜色缓冲区中,RGBA四个通道均可以进行混合。在Unity中使用Blend命令设置混合状态(同时也开启了混合)
(二)混合等式、参数
混合是一个逐片元的操作,且是不可编程的,但却是高度可配置的。也就是我们可以设置混合时使用的运算操作、混合因子等来影响混合效果。
已知两个操作数:源颜色S,目标颜色D,想要得到输出颜色O,就必须使用一个等式来计算,我们把这个等式称为混合等式(blend equation)。当进行混合时,我们需要两个混合等式:一个用于混合RGB通道,一个用于混合A通道。当设置混合状态时,实际上就是在设置混合等式中的操作和因子。默认情况下,混合等式的操作都是加操作(可以换),然后在设置混合因子。因为需要两个等式,一个用于混合RGB,一个用于混合A,所以需要4个因子(每个等式两个)。
混合公式
混合因子
(三)混合操作
不仅可以是加操作来对混合进行操作,还可以使用减操作等等。可以使用ShaderLab的BlendOp BlendOperation命令,即混合操作命令。
混合操作
混合操作命令通常与混合因子命令一起工作的。但需注意的是Min和Max混合操作,当使用这两个命令时,混合因子是不起作用的,它们仅会判断源颜色,和目标颜色。
常见的混合效果
常见的混合效果
网友评论