- Home /
Help converting stencil shader in HDRP
Hiya,
I'm converting my project to the High Definition Render Pipeline. The one hurdle I'm stuck at is how to convert my custom stencil shader.
I've pasted my shaders in below, along with a screenshot of what they do in Unity's old render pipeline.
The stencil object is transparent. The 'object that is stencilled' shader makes the object appear transparent, but when the stencil is directly in front of it, it renders that part of the object.
Does anyone have any pointers on the best way of recreating this in the HDRP?
I've been unable to get this working in Shadergraph as I don't seem to have access to ZWrite, but I'm not sure if I'm missing something?
Best, Laurien
STENCIL:
Shader "Unlit/Stencil"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType" = "Opaque" "Queue" = "Transparent+4"}
Stencil{
Ref 5
Comp Always
Pass Replace
}
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return float4(0,0,1,0);
}
ENDCG
}
}
}
OBJECT THAT HAS STENCIL APPLIED:
Shader "Custom/StencilledObject" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" "Queue"="Transparent+6"}
LOD 200
Stencil {
Ref 5
Comp Equal
}
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Answer by markgmullan · Apr 07, 2021 at 05:27 PM
@laurienash Hey there Laurie, just checking if you were able to come up with a solve for this? :)