来源:《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×Drgb?OA?=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 。
|