六 UnityShader透明效果( 三 )


效果如下
但假如我们换一个模型 , 就会发现这样做有些许问题
很明显 , 当模型网格相互交叉时 , 会得到错误的半透明效果 。这是因为我们关闭了深度写入 , 无法对模型进行像素级别的深度排序 。解决方案是增加一个Pass通道 , 在新的Pass通道中开启深度写入 , 但不输出颜色 。这样就会先把模型的深度值写入缓冲中 。当第二个Pass再进行透明度混合时 , 由于上一个Pass已经获得了逐像素的正确深度信息 , 因而该Pass就可以按照深度排序结果进行透明渲染 。当然 , 这样做的缺点也很明显:多使用了一个Pass会对性能造成影响 。
// 新增一个PassPass{ZWrite On// 不写入任何颜色通道ColorMask 0}
效果如下