我有一个平面网格(一个自定义的跟踪),使用高级着色器在URP,我需要它来检测重叠,并改变它的颜色为红色。
应用程序是3d的,轨迹总是在y 0处绘制的。当路径重叠时,用户需要有视觉反馈,这样他们才能修复他们的路径。我正在尝试使用模版着色器来完成它,但是用于URP的模板不像内置渲染器那样工作。
这个问题完全有我需要做的事情,,但是在URP中,着色器不能工作。无论我尝试做多少次模板传递,它只是呈现第一次通过,而从来没有检测到其他的通行证。
在URP中,我只能用一个书写着色器和一个阅读器着色器使用模具,并替换模具缓冲区(添加不起作用)。
由于它不能检测到这两种不同的传递,我甚至不能使用双对象来完成它,包括作者和读者,我的阅读器有一个高级着色器和一个平面红色的pass。
记住,我需要一堆平面轨迹来检测重叠和自我重叠。有人能让它发挥作用或提出另一种方法吗?(我必须在工作中完成这件事)
发布于 2022-06-07 17:28:26
找到了的两种方式--。
经过几个小时的搜索,我找到了这条线,Invertex说:
由于性能原因,URP不会自动运行所有的着色器通行证。您可以制作另一个已启用另一个传递的材料,并将其添加到对象的材料列表中。实际上是一样的。
所以我用:
Tags {
"RenderType" = "Opaque"
"Queue" = "Geometry-1"
}
Pass
{
Stencil {
Ref 0
Comp Equal
Pass IncrSat
Fail IncrSat
}
}
//here the code that renders when not overlapping另一个着色器有:
//this one is in "Queue"="Geometry"
Stencil {
Ref 1
Comp Less
}
//here the code that renders when overlapping然后我把两个着色器放在我的预制板中。由于它只有一个亚网格,它在其中呈现两种材料。

上面的方法是一个丑陋而昂贵的解决方案--,所以我一直在搜索这个问题。
,在这条线之后的解决方案。我们可以使用"LightMode“标签,如"DepthOnly”、"Meta“、"SRPDefaultUnlit”、"UniversalForward“等。绕过URP的通行证。它们将以特定的顺序呈现,无论它们在文件中的顺序是什么。你被限制在少数,但它解决了它在我的情况下。
由于"SRPDefaultUnlit“将首先呈现所有对象,然后"UniversalForward”将呈现所有对象,因此我可以将其用于我的优势。
在第一关内:
Tags
{
"LightMode" = "SRPDefaultUnlit"
}
Stencil
{
Ref 0
Comp Equal
Pass IncrSat
Fail IncrSat
}
//here the code that renders when not overlapping在第二关:
Tags
{
"LightMode" = "UniversalForward"
}
Stencil
{
Ref 1
Comp Less
}
//here the code that renders when overlapping注意:如果您使用内置的呈现,LightMode将不能工作,您必须使用默认的呈现,并在代码中更改传递顺序以获得所需的效果。你会在底座传球后再加一个。
对我来说,这似乎是最后的解决方案,但请随时为我做贡献,因为你将来可能会帮助其他人。
https://stackoverflow.com/questions/72533739
复制相似问题