HN656
深度で割るだけ!一瞬で3D表現を実装する魔法のテクニック
Divide by depth for instant 3D
gabrieloc・3日前
Divide by depth for instant 3D
レンダリングやシェーダー開発において、深度値(depth)を活用した「深度除算(Divide by depth)」テクニックを使うことで、手軽かつ高速に3D的なパースペクティブ表現を実現する方法です。単純な計算式でありながら、ビジュアルに劇的な深みを与えられるため、パフォーマンスを意識するエンジニアには必見の最適化手法と言えます。
やあ!3Dカメラの仕組みについて、インタラクティブな例を交えて解説したノートを書いたよ。昔自分も苦労した複雑なトピックを、少しでも分かりやすくできればと思って。誰かの役に立てば嬉しいし、そうでなくても遊べるスライダーがあるから試してみて!
参考までに。「ビューフラスタムは、z = 1で先端がカットされ、末端が無限遠にある90度のピラミッドである」という前提から始めると、行列とパースペクティブディバイドを使ってそれをNDCにマッピングする方法を導き出せるよ。以前「グラフィックス101」の講義(最初のセッションではないけど)でそれを使ったら、「とりあえず透視投影行列の計算式はこれ、中身の導出は聞かないで」といういつものやり方より、ずっと直感的に理解してもらえたんだ。
スライダーのUIがモバイルでも最高だね。細部へのこだわりが素晴らしい。
最高だね。さらに一歩進んだ話として、自分はこの数学を使って2D写真をデプスマップ付きの3Dシーンに変換したよ: https://blog.skz.dev/3d-reconstruction-from-public-photos (https://blog.skz.dev/3d-reconstruction-from-public-photos)