法線の変換の話
オブジェクトの頂点をモデル座標系からワールド座標系に移すときに法線も一緒に変換する必要がある。
たとえば、シェーディングするときは法線が必要になるが、たいていライトはワールド座標系に存在しているため、法線もワールド座標系に移す必要がある。
他にも、法線をいろいろ利用するときは頂点と同じ座標系にあった方が都合が良い。
頂点について、モデル座標系からワールド座標系に移すときには何らかの変換行列を使って変換する。
しかし、頂点に対して作用する行列と同じものを法線に対して作用させてもうまくいかない。
まず、平行移動成分を除去しなければならない。法線は向きのみの量なので平行移動は関係ないからである。
回転移動成分についてはそのまま使うことが出来る。
拡大縮小などのスケーリング成分については、たとえば各頂点をX軸方向に3倍にする場合、法線はX軸方向に1/3倍にする必要がある。(最終的に正規化して長さは1にする)
これらの各要素を考慮しつつ法線を適切に変換するための行列を求めるには、頂点の変換行列の逆転置行列を求めればよい、ということが知られている。
まず、与えられた変換行列について、平行移動成分を除去する。これは4x4行列の左上3x3の成分を抜き出せばよい。
次に、この左上の成分の行列について、特異値分解を考える。
すると、という形に分解できる。ここで、特異値分解の性質よりは正規直交行列になる。
正規直交行列ということは標準基底の回転によって得られるということであり、これらの行列は回転行列として表現できるということになる。(本当は鏡像も考えなければならない気がするが、拡大縮小行列にまとめることができるので得られる結果は変わらない)
また、特異値分解の性質よりは対角行列になる。対角行列ということはは拡大縮小行列として表現できるということになる。
つまり、任意の3x3変換行列は回転行列と拡大縮小行列の積に分解できるということになる。
今回求めたい、法線に対する変換行列というのは、元の変換が回転の場合はそのまま同じ回転を作用させ、元の変換が拡大縮小の場合は逆数の分だけ拡大縮小するものである。
つまり回転行列についてはそれをそのまま作用させ、拡大縮小行列についてはその逆行列を作用させたいということになる。
今、なので、法線にたいして作用させるべき行列はである。
回転行列の転置行列は自身の逆行列と等しくなることと、拡大縮小行列の転置行列は自身と等しくなることから、
となる。
ここで、行列に対する転置はまとめることができる。ただし掛け算の順番は変わる。
同様に、逆行列もまとめることができる。やはり掛け算の順番は変わる。
よって、となるので、法線に対する変換行列は元の行列の逆転置行列となる。
CG系講義まとめ
アメリカの有名大学とかのCG系講義ページをまとめました。
Stanford University
- Courses in Graphics
- CS 248: Interactive Computer Graphics
- CS 348A: Computer Graphics: Geometric Modeling
- CS 348B: Computer Graphics: Image Synthesis Techniques
- CS 448: Topics in Computer Graphics
- 色んなトピックの集合
- http://graphics.stanford.edu/courses/#cs448
- CS 148: Introductory Computer Graphics
Cornell Univ.
- Courses
- CS 4620: Introduction to Computer Graphics
- CS 4621: Computer Graphics Practicum
- CS6630: Realistic Image Synthesis
- CS 5625: Advanced Interactive Graphics
- CS 5643: Physically Based Animation for Computer Graphics
- CS 7690: Computer Graphics Seminar
- CS667: Physically Based Rendering
University of California, San Diego
フォトンマップのJensen先生とか。
- CSE272: Advanced Image Synthesis
- CSE168: Rendering Algorithms
- CSE169: Computer Animation
- CSE167: Introduction to Computer Graphics
Carnegie Mellon
- Graphics courses offered
- 15-462: Computer Graphics I
- 15-869 B: Physically Based Character Animation
- 15-864: Advanced Computer Graphics
- 15-869: Graphics and Imaging Architectures
- 15-466: Game Programming
Harvard Univ.
- CS 175: Computer Graphics
- CS 234: Computer Graphics
- CS 277: Geometric Modeling in Computer Graphics
Princeton Univ.
- Classes
- COS 426: Computer Graphics
- COS 526: Advanced Computer Graphics
- CS 451: Computational Geometry
University of Pennsylvania
- Undergraduate Courses
- CIS 563: Physically Based Animation
- CIS 565: GPU Programming and Architecture
- CIS 462: Computer Animation
- CIS 800: Graphics Reading Group(たぶん輪講)
- CIS 660: Advanced Topics in Computer Graphics and Animation
- CIS 277: Introduction to Computer Graphics Techniques
- CIS 460 / CIS 560: Computer Graphics
University of California, Berkeley
- CS184: Computer Graphics
- CS 294-13: Advanced Computer Graphics
Brown Univ.
- CLASSES
- CS 123: Intro to Computer Graphics
- 資料多め&ページがすごい
- http://www.cs.brown.edu/courses/csci1230/
- CS125: Introduction to Computer Animation
- CSCI1280: Intermediate 3D Computer Animation
- CS 224: Interactive Computer Graphics
M.I.T.
- Courses
- 6.837: Introduction to Computer Graphics
- 6.839: Advanced Computer Graphics