_CameraDepthTexture
Unityのカメラが提供する、カメラから見た視点の深度情報が格納されたテクスチャ。 https://gyazo.com/3ee626ff443e5b39db591224554fe313
ForwardRenderingの際、カメラはShadowCasterパスを利用して画面をレンダリングして、上図の右下に映っているような1チャンネルの画像をレンダリングする。 その際、普通のレンダリングとは異なるカリング処理が行われる模様?RenderQueueもあまり仕事をしない?よくわからないが、Depthを出力するようなシェーダーだと正常な画像が出力されなかった。そのそも基本のRenderPipelineにおいて、ShadowCasterパスで出力Depthを弄る事は想定されていないのかもしれない。/icons/はて?.icon 上の画像で利用したチェック用シェーダー
code:DepthChecker.shader
Shader "Sokuhatiku/DepthChecker"
{
Properties
{
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Cull Off
Pass
{
CGPROGRAM
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _CameraDepthTexture;
v2f vert (appdata v)
{
v2f o;
o.vertex = float4(v.uv.xy, UNITY_NEAR_CLIP_VALUE, 1);
#if UNITY_UV_STARTS_AT_TOP o.vertex.y = 1 - o.vertex.y;
o.vertex.y = o.vertex.y;
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv));
return col;
}
ENDCG
}
}
}
シェーダーをアタッチしたオブジェクトの本来の場所がカメラの視界外に出ると消えるので注意