本日はいつもと趣旨を変えて数学についての記事です。
3Dグラフィックスでは、座標変換の処理で行列が一般的に使用されます。
今まで回転行列、平行移動行列、スケーリング行列についてみていきました。
しかしながら筆者自身が行列についての基礎を完全には理解していないので今回学習していきます。
〇行列とは?
行列は数字を矩形状に並べたもので、通常、数の配列や表として表されます。行列は次のように表されます。
ここでmが行の数、nが列の数となります。
行列は線形代数学の発展とともに登場し、線型方程式の解法やベクトル空間の性質の理解に使用されます。
行列を使用することで次のような利便性があります。
・データ整理と表現
・線形変換の表現
・連立の方程式の解法
・統計分析
また、コンピュータでは多次元の成分を計算する際に行列を使用することで、メモリー管理や処理の工程が最適化されたメソッドを使用することができるため、それぞれの成分ごとに計算することに加えパフォーマンスを高めることが期待できます。
〇ベクトル、行列、テンソルの違い
PythorchなどのAIについて触れる際にはテンソル
という概念が登場します。
テンソルとは行列に似た概念であり、多次元のデータ構造を持った構造体です。
イメージとしては配列の成分として配列を持っているようなデータのことです。
例えばテンソルであらわすことができるものとして画像データがあり、画像データは縦横のピクセルであらわされます。
この時点では行列としてのデータですが、ピクセルはさらにRGBAの色の成分として4次元の値で構成されています。
このように画像は4次元のデータを格納する配列というような表し方ができます。
逆に2次元のテンソルは行列、1次元のテンソルはベクトル、0次元のテンソルはスカラーというようなこともできます。
〇行列の加算
次に行列の計算についてみていきます。
ここでは2つの画像データを例に見ていきます。
例えば次のようなデータがあったとします。
成分を見てわかる通り行列の大きさはA,B同じです。(一致している)
この場合A+Bの画像は次のように表されます。
各成分ごとに足し算がされていることがわかります。
これはシェーダーやお絵かきソフトなどでの加算
合成モードに等しく、結果として明るくなることがわかります。
また、1を超えた値はHDRであらわされます。
〇行列同士の掛け算
次に行列同士の掛け算を行います。
例えば先ほどの画像を例とした行列AとBを書掛け合わせる例を見ていきます。
この場合はまず、Aの各行とBの各列の内積を計算します。
次に内積を使用してAとBを掛け合わせた新しい行列Cの各成分の計算を行うことができます。
次のようになります。