反向深度遮罩着色器

时间:2014-03-25 18:34:21

标签: unity3d shader depth-buffer depth-testing

我在Unity3D中开发。

使用定义的深度蒙版着色器here,不会使用着色器绘制蒙版后面的对象(仅绘制蒙版前面的对象)。使用引用的代码,我尝试创建一个反向深度掩码,旨在使相机仅在其后面绘制对象

我做的是改变

ZTest LEqual

ZTest GEqual

我也试过

ZTest Greater

然而,发生的事情是相机会在面具的后面或前面绘制所有物体。 如何实施反向深度遮罩?

1 个答案:

答案 0 :(得分:0)

您必须在蒙版对象的着色器中使用ZTest GEqual,而不是蒙版本身。另请注意,深度掩码和蒙版对象必须在之前渲染所有其他对象。所以你应该使用以下渲染队列:

  • 深度模板:Geometry - 202080
  • 蒙面物品:Geometry - 102090

(深度掩码的更详细说明可在Unity Wiki中找到。)

您还应该为被屏蔽的对象(ZWrite Off)禁用z缓冲区写入。这意味着如果蒙版对象重叠,它们将无法正确渲染。您可能还会遇到其他几何问题。更好的方法是使用Pro 4.2版本的Unity 4.2中提供的模板缓冲区。