今回の内容はレポートフォルダのゲームプログラミングフォルダに
QuaternionPractice.zip
として作業済みのUnityプロジェクトを置いておいた。
セガ、150ページ超の社内向け数学資料を無償公開 「3DCGの技術的基礎に」
線形代数:数学の分野。高校数学のベクトル・行列も線形代数で扱う道具。理系分野では理解が必須。
ゲームプログラミングとクオータニオン
ゲームエンジンの3DCGに関する処理でクオータニオンを扱う。
プログラム的にはゲームエンジン内部の処理で完結するためUnityのC#で直接クオータニオンを扱う機会は少ない。
※むしろUnity公式マニュアルではクオータニオンは理解している人しか扱うべきではないと記述されている。
クオータニオンと3DCG
3次元空間で物体の姿勢変更(回転させる)で利用されている。回転する物体の座標の変換にクオータニオンによる表現を介在させる。
クオータニオンを使用しなくても物体の回転は計算できる。
ただし、多数の三角関数の計算が必要となり計算のコストは高くなる。
そこで、
を計算する。この計算ではsinとcosを1回計算する他は加減乗除の四則演算のみで計算が完了する。計算コストが低いので処理が早く済む。
ゲームの3DCGでは多数の座標の回転が必要となるので回転に関する計算はなるべく早く済むことが望ましい。
その為、クオータニオンを3DCGで扱うことになる。
クオータニオンではー180~+180度の回転までを扱う。
例)
200度の回転(後の姿勢)は-160度の回転(後の姿勢)と同等となるので逆方向(早く姿勢変更が済む方)に回転する。
大雑把なクオータニオンの計算の仕組み:
φ度の回転を
ステップ1: φ/2 の3次元空間の回転 +4次元軸の回転(クオータニオンの成分w)
ステップ2: φ/2 の3次元空間の回転 ー4次元軸の回転(クオータニオンの成分w)
で実行する。4次元軸の回転は1と2で打ち消されて3次元空間でφ度回転することになる。
Quaternionをプログラムすればアニメーション機能を使わずに、姿勢変更(姿勢A→姿勢B)を時間軸で補完できる。
つまりキーフレームアニメーションをコードで実行できる。
例)クオータニオンによる回転とオイラー角(X軸 Y軸 Z軸)の回転の比較。Unityのオイラー角の適用順序はZXY。
参照: https://light11.hatenadiary.com/entry/2019/01/24/223705
白の板 クオータニオンによる回転の補完
緑の板 クオータニオンによる逆回転の補完
黄の板 オイラー角による回転の補完
黄の板の回転は白の板に比べて遠回りしている。白の板は最短距離で回転している。