Open4

【Unity】深度画像を線形で保存する

ryuryu0226ryuryu0226

Linear01Depth関数

Zバッファを線形な0~1の深度値に変換 (0は目の位置,1はfar面)

inline float Linear01Depth( float z )
{
	return 1.0 / (_ZBufferParams.x * z + _ZBufferParams.y);
}

LinearEyeDepth関数

inline float LinearEyeDepth( float z )
{
    return 1.0 / (_ZBufferParams.z * z + _ZBufferParams.w);
}

参考文献
ビルトインのシェーダー変数

ryuryu0226ryuryu0226

vertexシェーダー内

原因を調べる

v2f vert (appdata_img v)
{
    v2f o = (v2f)0;
    o.pos = UnityObjectToClipPos(v.vertex);
    // o.uv = v.texcoord; // 線形化されない
    // o.uv = TRANSFORM_TEX(v.texcoord, _CameraDepthTexture); // よく分からない
    o.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord.xy); // 線形化される
    return o;
}

参考文献
【Unity】【シェーダ】カメラから見た深度を描画する
【Unity】【シェーダ】カメラからの深度情報を用いてアウトラインを描画する
【Unity】カスタムイメージエフェクトのつくりかた
UNITYでDepthをリニアでEXR形式で出力
Postprocessing with the Depth Texture