我已经构建了一个工作表面着色器(称为“仙境”),它呈现为不可见,除非从相机的角度来看伴随的“lookGlass”着色器与其相交。简单的模板着色器排列。
十分简单。
我可以添加着色器设置来指定一个平面,甚至只是一个最小的世界空间 Z 值,并使用 clip() 仅在该平面的一侧渲染像素......(换句话说,我可以使用它来修剪内容这是 Stencil 允许的。)
我想做的是“通过镜子”在表面上使用模板(以显示镜子内部的几何形状)并始终在它们位于镜子的“我们”一侧时渲染这些表面(始终如果他们在镜子门户的这一侧,请向他们展示)。例如,如果 z<0,则在满足 Stencil Ref 值时进行渲染。如果 z>=0,则无论如何渲染。
现在,在 Unity 中,我可以将两种材质附加到 MeshRenderer 组件(一种带有模板着色器,一种带有“平面截止”着色器)——效果很好。实际上,它非常棒,至少在视觉上是这样。但是,虽然我还没有对它进行基准测试,但我本能地相信,如果有许多对象、相当复杂的几何图形等以这种方式设置,它会极大地影响帧速率。
(我也可以在代码中管理着色器附件,并且只在我期望某些东西过渡时才这样做,但我真的希望从中获得统一的着色器以避免不必要的绘制调用。)