Open4
【Unity】深度画像を線形で保存する
深度画像を線形で取得し,ファイルに保存する方法についての備忘録です.
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);
}
参考文献
ビルトインのシェーダー変数
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
リニアレンダリングにする←不必要?
-
Color Space
をLinear
からGamma
に変更する -
RenderTextureReadWrite
を設定する
参考文献
Panorama180 Render : 環境別のメモ
https://light11.hatenadiary.com/entry/2020/02/14/002651