夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ゼロから始めるUnityShader開発 第九章 射影行列

本日はシェーダー枠です。

CGを理解するにあたって重要な概念である行列についての勉強です。

コンピュータ内では多くのデータをテンソルであらわします。

テンソルとは、多次元配列を意味し、例えば画像データを見てみると、RGBAの四次元であらわされる色チャンネルの集まり(ピクセル)が縦横の配列に並んで一つの画像が構成されています。

このように多次元の配列をテンソルと呼びます。

テンソルの中で0次元配列をスカラー、1次元配列をベクトル、2次元配列を行列と呼びます。

redhologerbera.hatenablog.com

コンピュータグラフィックスでは座標変換で多く行列が用いられており以前は回転行列や平行移動行列についてみていきました。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

今回は射影行列を見ていきます。

〇射影とは?

3DCGでは射影は非常に重要な概念です。

3次元の空間のオブジェクトを2次元の画像に変換するために射影が利用されています。

どういうことかというと3次元空間のオブジェクト(3Dデータ)は最終的にレンダリング時には2Dのスクリーンに表示される2Dの画像として出力されます。 この変換を投影と呼びます。

 投影は影などを見ればイメージがつきやすいですが、ある物体の形状を別の物体に落とし込むことを指します。

〇射影行列

射影行列はベクトル空間の部分空間への射影を表現するための行列です。

かみ砕くと

射影行列の定義

射影行列は正方行列でその二条が自身と等しいつまり以下を満たす行列を指します。

 \displaystyle 
P^{2} = P
\

正方行列とは行の数、列の数が一致する行列を指します。

つまり2行2列、3行3列のような正方形のような行列を指します。

例えば次のような行列は射影行列です。

 \displaystyle 
A=
\begin{bmatrix}
1 & 0 \\
0 & 0 \\
\end{bmatrix} 
  \

3DCGについての射影行列は次のようになります。

 \displaystyle 
P= A(A^{T}A)^{-1}A^T
  \

ここでAはベクトル

 \displaystyle 
\vec{a}_1 . \vec{a}_2,...,\vec{a}_n
  \

を列に並べた行列であり

 \displaystyle 
A^{T}A
  \

は正則(逆行列が存在する)です。

また射影行列にはさらに対象行列である直行射影行列があり、以下のようになります。

 \displaystyle 
P = \frac{aa^T}{a^Ta}
  \

aは射影するベクトルを指します。

これらは3次元空間のオブジェクトを2次元の画像へ変換する際にdのお湯に3次元の点を3次元の点にマッピング(射影)するかを決定します。

本日は射影行列の概念の理解でした