見出し画像

[ShaderGraph]ScreenPositionとSceneDepthの差について

ShaderGraphの解説動画を見ていると次のようなノードの組み合わせをよく見ます。

画像1

図1. ShaderGraph, ScrennPositionとSceneDepthの差を色として出力している



画像2

図2. 結果, 壁とのふちが黒っぽくなる


これは最終的にバリアのエフェクトを作るのに使われるのですが(もちろん他にも色々な使い道があります)、何が起こっているのか私には分かりませんでした。

色々考えた結果、それらしい答えが得られたので紹介します。(間違ってたらコメントお願いします。)


解説

画像3

図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


参考


この記事が気に入ったらサポートをしてみませんか?