Depth Texture (深度テクスチャ) は、カメラから投影された各ピクセルの「距離(深度値)」を格納したグレースケールテクスチャバッファです。UnityのUniversal Render Pipeline (URP)では、シェーダー内で _CameraDepthTexture というグローバルプロパティを通じてアクセスできます。

現実世界での例え:プールに浮かぶ透明な『浮き輪』の沈み定規

Depth Textureは、「プールの水(深度情報)の中に浮かぶ、透明な『浮き輪(半透明オブジェクト)』の沈み具合を測るための定規」に例えることができます。

  • 従来(深度定規なし): プールの中にどのくらいの「水の深さ(不透明地面の深度)」があるかが測れません。そのため、浮き輪の底(半透明エフェクトの境界)がプールの底(地面)に激突している接地面がカミソリのようにクッキリと見えてしまい、非常に人工的で不自然に浮いて見えます(硬い境界線)。
  • 深度定規(Depth Texture)による解決: 定規を差し込み、「プールの底の深さ」と「浮き輪自体の浮いている深さ」の差(水の厚み)を測定します。この差がゼロに近づいていく境界付近では、浮き輪の底をうっすらと透明にボカす処理(ソフトパーティクル)を行います。この定規のおかげで、浮き輪がプールに自然に溶け込む美しいブレンドが完成します。
Unity Depth Texture Delta Depth collision fade diagram

図:不透明オブジェクト深度値と半透明パーティクル深度値の差分(Delta Depth)からソフトフェードを算出するインフォグラフィック

ソフトパーティクルや水面ブレンドでの利用

このテクスチャが最も威力を発揮するのが、半透明オブジェクトと不透明オブジェクトの境界を美しくぼかす表現(ソフトパーティクルやフェード効果)です。たとえば、パーティクルが地面(不透明メッシュ)に埋まる際、そのまま描画すると鋭い境界線が見えてしまいます。これを防ぐため、シェーダーで「地面の深度値」と「パーティクル自体の深度値」の差(Delta Depth)を算出し、その差が近づくほどパーティクルの透明度(Alpha)を下げることで、ふんわりと境界が馴染むようになります。