【图形学】28 更多的透明等式和参数

来源:《UNITY SHADER入门精要》

1、ShaderLab的混合命令

  当着色器进行透明度混合的时候,和两个操作数有关:源颜色 S(source color)目标颜色 D(destination color),对于它们混合产生的颜色,我们用 O 表示。
在这里插入图片描述

  之前,我们已经看过了 ShaderLab 的 Blend 命令了。
  第一个命令是关闭 Blend。
  第二个命令只有两个混合因子,分别乘以源颜色和目的颜色。
  第三个命令比第二个多两个混合元因子,多出来的因子会作用于A通道。也就是不仅仅是RGB通道了,A通道也会用相同的混合因子混合。即:
O r g b = S r c F a c t o r × S r g b + D s t F a c t o r × D r g b O A = S r c F a c t o r × S A + D s t F a c t o r × D A O_{rgb}=SrcFactor \times S_{rgb}+DstFactor \times D_{rgb} \\ O_{A}=SrcFactor \times S_{A}+DstFactor \times D_{A} Orgb=SrcFactor×Srgb+DstFactor×DrgbOA=SrcFactor×SA+DstFactor×DA
  也就是RGB和A通道分开混合了。
  当然,使用 Blend 命令的时候,也可以设置许多不同的混合因子,按照格式都和上面的一样,前两个作用于RGB通道,都好之后,后两个作用于A通道。

在这里插入图片描述

  比如我们希望输出颜色的透明度就是 源颜色的透明度的时候,可以使用这条命令:

Blend SrcAlpha OneMinusSrcAlpha, One Zero

2、混合操作

  在颜色混合的时候,我们默认是源颜色和目标颜色与它们对应的混合因子相乘。实际上,我们可以使用 BlendOp 命令(BlendOperation)来做出更多操作命令:

在这里插入图片描述

  混合操作命令通常会和混合因子命令一起工作,得到不同的混合效果。

在这里插入图片描述

3、透明度测试的双面渲染

  由于我们有透明度的设置,所以我们理应能够看到背面才对,原来,我们会由法线和摄像机的方向判断而裁剪掉背面的图片。这里,我们使用 Cull 命令来控制哪些面的渲染图元被剔除或者不被剔除。

Cull Back | Front | Off

4、透明度混合的双面渲染

  我们不仅是因为要透明度混合,所以关闭了深度写入。而且我们正面和背面都要画,所以画的顺序就很重要了。
  为了确保渲染的顺序正确:是从后往前渲染。这里,我们和之前的操作一样,开启两个 Pass。不一样的是,第一个是渲染背面,第二个渲染前面,手动写出顺序,以保证渲染顺序的正确。
  使用 Blend 命令的时候,当然第一个 Pass 就是 Cull Front,第二个 Cull Back

猜你喜欢

转载自blog.csdn.net/qq_40891541/article/details/127092136