ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまでの4章は行列(Matrix)の話が書かれている。では、これを当てはめてみる
じゃあ、これがUE4だとどうなるのか?について解説してみる。
行列はほぼ扱えない
結論から言うと、BluePrintでは、行列はほとんど扱えないようになっている(C++のコードについては未調査)。
ほんの少しだけ行列はサポートしているのだが、BluePrintでサポートされているのは、こんな感じ。ほとんど扱えないに等しい。
行列が無い代わりにRotate型とTransform型が定義されている。なので、行列を使った処理は、Rotate型とTransform型を併用して処理する。
Rotate型とTransform型にういて大ざっぱに説明すると次の通り。
- Rotate型 : 回転のみが指定できる(スケールが無い3x3行列)
- Transform型 : 回転、スケール、座標が指定できる(4x4行列)
今回はBlueprintのみを追い掛けているが、そのうちC++のソースを追い掛けて、ちゃんと検証してみるつもり。
あと、Rotate型で角度を示す値の単位はdegreeとなり、角度はX軸、Y軸、Z軸は軸の正方向に向かって時計回りが正となる。
Rotate型
Rotate型は、ベクトルの向きを変更(つまり、回転)するのに利用するのがメインになるかと。
X軸、Y軸、Z軸を中心とした回転角は、UE4では、それぞれ、Roll、Pitch、Yawと定義されている
Rotate型の変数に値を代入する際には、角度(degree)を指定する方法と、ベクトルと軸や平面を元に生成する方法の2つがある。結果的には、後者をよく使う事になるんじゃないかな、たぶん。
分解と生成
Rotate型も、他の例に漏れず、分解はBreakRotate、生成はMakeRotateという関数が用意されている。
角度の取得
ベクトルと軸や面を指定して、なす角を取得する、という方法が用意されている。「Make Rot from なんとか」というのがそう。
その他
角度の倍率(スケール)が設定できる。ここのスケールは、あくまで角度を○○倍する、という意味。
Transfrom型
こちらは、スケール、位置、回転のすべての要素を示す型である。
ただ、Blueprintで定義されている関数を見ている限りは、Transform型は何かの演算に利用するというよりも、メッシュの状態(スケール、位置、向き)を持つために使われているようだ。
分解と生成
おなじみのMakeTransform、BreakTransformが用意されている。
演算
あとはTransform同士を合成するとか、Inverseするものがあったりする。
あとは、Leap(線形補間)ってのもあるのだが、これは、後日解説しようかと。