在shader中想让物体出现透明的地方有两种思路。
- 把物体的渲染队列设置为transparent,此时的物体将会在所有不透明物体之后渲染,从而保证正确的渲染结果。然后我们使用Blend指令来把原颜色缓冲区的颜色乘上当前物体的a通道值,来进行混合。
- 使用Clip指令来对物体的像素进行裁剪。
Blend指令
每经过一个pass物体就会产生一个临时颜色缓冲区(假设当前为M,上一个颜色缓冲区为N)。
Blend A B,C D 的含义就是混合后新的颜色缓冲区为 float4(AM.rgb+BN.rgb,CM.a+DN.a)
ABCD有许多可取的值,可取值中src含义为来自M值,而dst含义为来自N的值。
如srcalpha意思是M区域的a通道值。
blendop指令是指两个缓冲区的算术,有add(默认) sub revsub max min这些取值。
Clip指令
需要注意的是Clip指令是逐像素操作,所以只能在像素着色器中使用。
Clip(x)如果x<0则当前像素舍弃。
复杂shader(多pass)下的处理
思路一:使用Clip指令。
我们就拿三渲二来说,我们一般会有一个Pass要用来生成描边,所以这个pass会剔除掉正面。如果我们在最后一个pass中去clip会发现,描边产生的背面仍然存在,因为clip只是把当前pass的临时缓冲区的像素给裁剪掉了,所以如果想要达到