[ShaderGraph]ScreenPositionとSceneDepthの差について
ShaderGraphの解説動画を見ていると次のようなノードの組み合わせをよく見ます。
図1. ShaderGraph, ScrennPositionとSceneDepthの差を色として出力している
図2. 結果, 壁とのふちが黒っぽくなる
これは最終的にバリアのエフェクトを作るのに使われるのですが(もちろん他にも色々な使い道があります)、何が起こっているのか私には分かりませんでした。
色々考えた結果、それらしい答えが得られたので紹介します。(間違ってたらコメントお願いします。)
解説
図3. ScreenPositionとSceneDepthの差を取るとふちが黒くなる理由
手書きで申し訳ありませんがこの図がすべてです。
ざっくり解説するとふちのほうは両者の差が0(=黒色)になり、真ん中の方は差が大きくなる(1以上で白)ため図2のように出力されます。
そして、両者の差を考える上で重要なことはScreenPositionとSceneDepth(Zバッファ)の判定が異なるという点です。
以前は「ScreenPosition = カメラからの距離, SceneDepth = カメラからの距離? 同じこと???」と考えていました。
実際、似た概念なので分かりづらいのですが、どうやらそれぞれ判定が異なるようです。
そもそも、ShaderGraphの設定はTransparentにしています。この設定の場合ScreenDepth(Zバッファ)の判定が行われません。
つまり、ScreenPositionはカメラから球の表面までの距離でSceneDepthはカメラから壁までの距離を(今回の場合は)表しています。
このような処理が起こることで、ふちが黒くなり真ん中のほうが白くなっています。
バージョン
Unity: 2020.2.2f1
ShaderGraph: 10.2.2
Universal RP: 10.2.2
参考
この記事が気に入ったらサポートをしてみませんか?