- Home /
Depth texture override leaves black skybox
I want to ensure that behind a semitransparent object no other transparent object is rendered. Therefore I'm doing one pass in the opaque pass with culling the front and setting the colormask to 0. In the Scene view my idea works, in the game view and in builds im Getting a black background where the skybox should be.
The shader code is really simple:
Shader "Custom/FillDepthBackFaces"
{
SubShader
{
Tags { "RenderType"="Opaque" "Queue"="AlphaTest" }
ColorMask 0
Pass
{
ZWrite On
Cull Front
ZTest Less
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
return o;
}
half4 frag(v2f i) : COLOR
{
return fixed4(1,0,0,1);
}
ENDCG
}
}
}
I'm getting this result:
The black box should be the skybox with the transparent layer on top. I guess the black area is kind of an optimization because in theory there would be no need to render a skybox behind opaque objects?!
Any ideas how to solve this?
Answer by Johannski · Oct 14, 2019 at 08:26 AM
This indeed happens, because the skybox won't render at areas that already have depth. You can easily fix this, by using another render queue value. The Depth buffer relevant for the skybox is renderqueue 1-2500. So when z-writing at 2501, you won't have the problem.
Your answer
Follow this Question
Related Questions
URP – Order Independent Transparency 0 Answers
Shader Question about Alpha 0 Answers
Transparency and smoothness not working together? 1 Answer
Unity 4.6 and Grabpass fails 1 Answer