各ピクセルが高い精度の“Depth” 値を持つ レンダーテクスチャ を作成することができます( RenderTextureFormat.Depth )。主に使用されるのはエフェクトでシーンのデプスが使用可能であることが必要な場合です(例えば、ソフトパーティクル、スクリーン空間環境光オクルージョン( Screen Space Ambient Occlusion )、透過はすべてシーンのデプスが必要です)。Image Effects もよくデプステクスチャを使用します。
デプステクスチャのピクセル値は、線形でない分布を示し、0 から 1 までの範囲です。使用されているデプスバッファにもとづいて、一般に精度は 24 ビットか 16 ビットです。デプステクスチャから読み込みするときは、0 から 1 の範囲の高精度の値が戻されます。もしカメラからの距離を取得する必要がある、あるいは別の形で線形の値を取得する必要がある場合、ヘルパーのマクロ(以下を参照)を使って、それを手動で計算する必要があります。デプステクスチャが高精度のデータを持っている場合は、その事を宣言するために sampler2D_float
データタイプを使ってください( data types and precision 参照)。
デプステクスチャは、現段階で一般的に使用されている多くのハードウェアとグラフィックス API でサポートされています。以下は特別な必要事項のリストです。
ほとんどの場合デプステクスチャはカメラからのデプスをレンダリングするのに使用されます。UnityCG.cginc
include ファイル には上記のケースの複雑さに対応するためのマクロを含んでいます。
例えば、このシェーダーはオブジェクトのデプスをレンダリングします。
Shader "Render Depth" {
SubShader {
Tags { "RenderType"="Opaque" }
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float4 pos : SV_POSITION;
float2 depth : TEXCOORD0;
};
v2f vert (appdata_base v) {
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
UNITY_TRANSFER_DEPTH(o.depth);
return o;
}
half4 frag(v2f i) : SV_Target {
UNITY_OUTPUT_DEPTH(i.depth);
}
ENDCG
}
}
}