Unity版本2019.1.2f1 HDRP项目。
我正在尝试在一个完成的游戏对象上打一个洞,该对象具有不想干扰的材质和着色器,要点是,它应该与完成的任何对象一起工作。 我在其他地方找到了这种方法,但似乎不适用于HD Render Pipeline版本。 基本上,要在要打洞的地方放置两个额外的游戏对象/形状,一个对象可以进行准备,另一个可以打孔。
着色器示例:
Shader "Custom/HolePrepare" {
Properties{
}
SubShader{
Tags { "RenderType" = "Opaque" "Queue" = "Geometry+1"}
ColorMask 0
ZWrite off
Stencil {
Ref 1
Comp always
Pass replace
}
CGINCLUDE
struct appdata {
float4 vertex : POSITION;
};
struct v2f {
float4 pos : SV_POSITION;
};
v2f vert(appdata v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
half4 frag(v2f i) : SV_Target {
return half4(1,1,0,1);
}
ENDCG
Pass {
Cull Front
ZTest Less
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDCG
}
Pass {
Cull Back
ZTest Greater
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDCG
}
}
}
和
Shader "Custom/Hole" {
Properties{
}
SubShader{
Tags{ "Queue" = "Geometry+10" }
ColorMask RGB
ZWrite On
Stencil {
Ref 1
Comp notequal
Pass Zero
}
Pass{}
}
}
我认为这些值在理论上是不正确的,因为这不是示例代码的方式,但是由于它不适用于HDRP,所以我开始四处寻找并查看是否有任何问题。 孔着色器应具有 ColorMask RGB 0 ,但是除了孔对象不可见以外,什么也不会发生。这使我相信我无法正确使用模板缓冲区。 我到达可以标记要删除的像素的地步,但是我无法删除它们。 我希望能够擦除主要对象(奶酪)的这一部分,以使背景(在这种情况下为地板)可见。
HDRP有什么方法吗?
注意:我也尝试了在HDRP项目中使用脚本和着色器进行渲染队列的方法,但是没有成功,尽管相同的代码在标准的unity项目中也起作用。