Mad*_*s M 8 shader stencil-buffer unity-game-engine
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
Shader "Custom/Hole" {
Properties{
}
SubShader{
Tags{ "Queue" = "Geometry+10" }
ColorMask RGB
ZWrite On
Stencil {
Ref 1
Comp notequal
Pass Zero
}
Pass{}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这些值在理论上是不正确的,因为这不是示例代码的方式,但是由于它不适用于HDRP,因此我开始四处寻找并查看是否有任何问题。孔着色器应具有ColorMask RGB 0,但是除了孔对象不可见以外,什么也不会发生。这使我相信我无法正确使用模板缓冲区。我到达可以标记要删除的像素的地步,但是我无法删除它们。我希望能够擦除主要对象(奶酪)的这一部分,以使背景(在这种情况下为地板)可见。
HDRP有什么办法吗?
注意:我也尝试了在HDRP项目中使用脚本和着色器进行渲染队列的方法,但是没有成功,尽管相同的代码在标准的unity项目中也有效。
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |