うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【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