BlenderのZ DepthとMistの違い
結論
オレンジがMist
青がZ Depth
https://gyazo.com/5b0ed319f0594a04948b46eba39d4653
0,1,2,3,4,5…と書いてあるけど、実際にはMistの方はこれをどの範囲で0~1の値するか設定するという形
Start: 0 Depth: 5の場合、上図のその範囲が0~1の値に変換される 1の場所にある面はMistでは0.2が出力される
Z Depthは多分合ってる
検証の流れ
BlenderのMistとZ Depthはなんか厳密には違うらしいと言うことを耳にして色々検証してみた
Blender公式のマニュアルをとりあえず見てみる
https://gyazo.com/bb3752ee42c26435cd8da0df3fc12d7e
なんかただ単に0~1の範囲にNormalizeされてるかどうかと、サンプル数にしか違いがなさそうな感じに書いてある
とりあえず試してみる
まずZ Depthの値の範囲をMistを同じにする(Mistはマイナスの値を持たないからややこしくなってくるのでStartを0にしている)
Differenceを使って2つの値に差があればあるほど白くなるようにする
https://gyazo.com/9e757da708d4f680d824cc5e2e669b92
Blenderのマニュアルにあったとおり、Zは1サンプルしか飛ばしてないのでエイリアス(ジャギジャギ)が生じていてMistには生じていない
オブジェクトの輪郭が白くなっているのはそのため
見えづらくなっているけど輪郭以外も差が生じていて、見やすくするため適当な値で乗算して見やすくした
https://gyazo.com/af3b58d8d5cf1fb64453d8b4e23f2384
どうやら同心円状に差が大きくなっているっぽい
それで、もしかしたら透視投影によるカメラの歪みが適用されてないんじゃないかと思って、それぞれどのように値が増えていっているのかの方向が見えるようにノードを組んだ
https://gyazo.com/9e5a8ccdcc9de91020c6ce055e6e3f53
Mist側はこっちを向いてる
なぜ違いが生じているのか、マニュアルには特に違いがないのにと考えて、ふとシェーダーエディター側にCamera Dataノードがあるということを思い出した
https://gyazo.com/5cd02fb3cc1bb9de598e85788f3ac533
こっちはなんか違うらしいことが書いてある
正直PixelとShading Pointに何の違いがあるのかよく分かってないけど、もしかしたらパスのZ DepthはView Z Depthと、MistはView Distanceと同じ方式で値を出しているのでは?
画像左上が3Dビュー、手前にある球体にマテリアルを適用して検証
https://gyazo.com/e65394b466734384feea201e8f4bbe9f
https://gyazo.com/ebd87f0532387e6dac46f91955dab9fa
見た感じ値完全に一致している!
もしかしてView Distanceってカメラオブジェクトからの距離と一致するんじゃないかと思って以下のノードを組んだ
https://gyazo.com/d779ffd0cec87bf79aa2db3120170ef4
そしたら見事に値が同じような増え方をしていた
もしかしてと思ってカメラを横に動かしてみると
https://gyazo.com/2e8c30ad2a95ef4c5f0d202109d09c3e
View Distanceの方では値が変化した(本当はパスの方でも確認したほうがいいけど 追記:試したら同じ結果でした)
ということはシェーダーエディターのView Z DepthとView Distanceには下の画像のように、距離の図り方が違っていて
https://gyazo.com/5b0ed319f0594a04948b46eba39d4653
そしてそれがそのままパスのZ DepthとMistの違いになるんじゃないか
そりゃあ同心円状に差が生まれるよね
という結論に至りました
完