こんな仕事をさせてもらってていいのか

Collision Detection in Interactive 3D Environments (Series in Interactive 3d Technology)

Collision Detection in Interactive 3D Environments (Series in Interactive 3d Technology)

最近会社で物理エンジン、というかコリジョンのお勉強をしていて、GJKというものについて勉強する機会がありました。GJKといえばミンコフスキー(和|差)とサポート写像なんですが、このサポート写像てのがすんごい便利なんですね。定義を簡単に言うと、

ある形状と方向ベクトルが与えられた時にその形状内におけるその方向ベクトル方向の末端にある点を返す写像

ってだけなんですが、フレームコヒーレンシという概念と一緒に使うとここまで種々の計算時間を短縮できるのか!!みたいな感動を覚えながら色々読んでました。サポート写像はGJKだけじゃなくて、バウンディングボックスの高速な導出にも使えるみたいで、なんつーか、パズルみたいでそのトリックを理解していくのが非常に楽しいです。
ちなみにGJKは凸形状の様々な物体(球やボックスの様なプリミティブから、一般的な凸多面体に至るまで)に対する交差判定のクエリを行うための手法で、じゃあ

  1. 凹形状に対してはどうやって対処するのか
  2. 有効な凸形状の集合に分割してしまえ
  3. その分割手法は?

とか、

  1. 全物体にGJK適用したらさすがに重いよね
  2. バウンディングボックスで高速化だ!
  3. 変形する物体のバウンディングボックスを高速に求めるには?

とか、

  1. バウンディングボックスの計算すら無駄を省きたいよね
  2. したらばそのデータ構造はどうすればいいの?

みたいな感じでこの本の中に様々な計算幾何学の学問がごちゃまぜられていて、それらが衝突検出を目的とする一つの美しい世界(システム)を構築しているのが分かります。とはいってもまだ全体の半分くらいしか読んでませんが。早くこの世界の全体を把握したいです。

ゲームプログラミングのためのリアルタイム衝突判定

ゲームプログラミングのためのリアルタイム衝突判定

ちなみにちょっとややこしい概念はこっちに当たると不思議と載ってます。日本語だし分かりやすくていい感じです。