我正在为网格使用自定义着色器,这基本上是其他网格的“视线阻挡器”。 您看不到网格本身,并且它后面的所有其他网格都被它遮挡。
现在我根据Unity的文档将项目升级到Universal Render Pipeline: https://docs.unity3d.com/Packages/[电子邮件受保护]/manual/InstallURPIntoAProject.html
不幸的是,着色器似乎与 URP 不兼容,导致“视线阻挡器”显示其后面的网格像素,但在旋转/移动视口时也会移动:
由于我没有任何着色器经验,您能否支持我将着色器转换为与 URP 一起使用(或者可能是 URP 本身的配置问题?)。
Shader "Custom/InvisibleStencilShader"
{
SubShader
{
// Make sure this shader is rendered before others
Tags { "Queue" = "Geometry-1" }
// This pass will write to the stencil buffer
Pass
{
// Disable color buffer writes
ColorMask 0
// Write a value of 1 to the stencil buffer
Stencil
{
Ref 1
Comp Always
Pass Replace
}
}
}
}
提前致谢
我想通了,想让你知道我最后是如何解决的。
基本上我在这里找到了关于 urp 模板缓冲区的参考教程: https://bdts.com.au/tips-and-resources/unity-create-windows-portals-using-stencils-with-the-universal-render-pipeline-urp.html
以下步骤即可达到预期效果:
将每个应被遮挡的网格放在名为“HiddenObjects”的新层上。
将遮罩网格(遮挡其他网格)放在名为“遮罩”的新层上。
最后但并非最不重要的一点是,使用新材质将以下着色器添加到遮罩游戏对象(以隐藏遮罩网格):
.
Shader "Custom/StencilMask"
{
SubShader
{
Pass
{
ZWrite Off
}
}
}
这个解决方案有一个小小的权衡,但它对我来说和以前一样好:只有平面网格物体正确遮挡,实体网格物体不知何故不起作用。 最终结果现在看起来像这样: