【Unity】RendererFeature の Shader で GBuffer を利用する
環境: Unity2021.3.16f1, URP12.1.8
Shader 側で GBuffer + Depth を利用するためには、特にスクリプト側で設定する必要は無く、
- _CameraDepthTexture
- _GBuffer0
- _GBuffer1
- _GBuffer2
を定義するだけで参照することができる
Shader "Hidden/GBufferFullScreenShader"
{
SubShader
{
Cull Off ZWrite Off ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex FullscreenVert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/Shaders/PostProcessing/Common.hlsl"
TEXTURE2D_X(_CameraDepthTexture);
TEXTURE2D_X_HALF(_GBuffer0);
TEXTURE2D_X_HALF(_GBuffer1);
TEXTURE2D_X_HALF(_GBuffer2);
SamplerState my_point_clamp_sampler;
half4 frag(Varyings i) : SV_Target
{
half4 depth = SAMPLE_TEXTURE2D_X_LOD(_CameraDepthTexture, my_point_clamp_sampler, i.uv, 0);
half4 gbuffer0 = SAMPLE_TEXTURE2D_X_LOD(_GBuffer0, my_point_clamp_sampler, i.uv, 0);
half4 gbuffer1 = SAMPLE_TEXTURE2D_X_LOD(_GBuffer1, my_point_clamp_sampler, i.uv, 0);
half4 gbuffer2 = SAMPLE_TEXTURE2D_X_LOD(_GBuffer2, my_point_clamp_sampler, i.uv, 0);
return gbuffer0;
}
ENDHLSL
}
}
}
以下に実際に取得できたバッファーを以下に示す
Default

_CameraDepthTexture

_GBuffer0

_GBuffer1

_GBuffer2
