HPSでオイラー角の計算順はどれを選択すれば良い?

Live2D でソリッドなパーツを作る時の助けとなるよう作った “Head Phone Sim for Live2D”ですが、これの一番の謎パラメータ、 EulerOrder (オイラー角計算順の選択)についてページを変えて説明したいと思います。

オイラー角自体について詳細は Wikipedia などでご確認いただくとして、 ここではご自身のモデルに合った計算順を選ぶための最低限のイメージと、実作業時の特徴的な選択肢をいくつかご紹介します。

オイラー角(Euler Angles)とは

オイラー角計算順によって同じパラメータ操作で別の動きをする

オイラー角とは、3次元上の物の向きを3つの回転角度の組み合わせで表す方法です。
組み合わせる順序を変えると、パラメータの値が同じでも物体の挙動が変わります。
Live2Dで言えばデフォーマの親子関係を入れ替えるイメージに近いです。

表記・計算方法が複数あるので注意が必要ですが、ここでは 表記上の左が親、右が子 と考えていただければ充分です。

計算順の解説&Live2Dでの回転座標系

どれを選ぶかの結論

を先に書きますと、公式のひよりちゃんモデルや拙作ぽいんた先生は ZXY に近い動きをします。
VTube Studio の AngleX,Y,Z は XYZ だと推測しています。(個人的実験による(*1))
HPSのデフォルトが XYZ なのはこの推測に合わせた結果です。
以下、選択の元となる特徴的な動きをいくつかご紹介します。

計算順による特徴的な変化

XY or YX

XY, YX, rotateY比較

XY (XがYの親)の時、Y回転で自然なうなずき動作を作れます。
一方 YX の場合、Xがどの角度でも画面上の垂直方向にうなずきます。
これは感覚的に XY でモデリングする方が多いのではないでしょうか。

XY, YX, rotateX比較

同設定でのX回転比較。XYだと水平に、YXだと弧を描いて動きます。

感覚的に、Y回転はXY、X回転はYXでモデリングする方がいらっしゃるかと思います。
要因としては下記のあたりかと思います。

  • 遠近法の影響を加味している
  • 人間の首の動きを観察して反映している

HPSではあくまで数学的な回転を扱っており、また現在の所遠近法には弱いので、こういった場合は満足な動きが得られないかもしれません。

Z__ or __Z

ZXY, ぽいんた先生 比較

Zが最も左(親)である時、Z軸は奥行き方向に固定されるので二次元的な回転デフォーマをそのまま使えます。
低コストでよく動くモデルを作成できます。
モデラーの間で何度か話題になったジンバルロック問題「真横を向いた時にY回転とZ回転が同じ動きになる」は、ZXYの時によく観察できます。

XYZ 回転Z

Zが最も右の子である時、XYで決めた任意の向きそのままに首をかしげる事ができます。
非常に制作コストの高い 設定ですが、前述通りHPSのデフォルトがこれなのは、フェイストラックに最も素直に従うであろう仮想のモデルを基準としたためです。

オイラー角のパターンには XYX なども含めると 12種類ありますが、HPS では Three.js に準じた6種類のみ対応しています。(XYZ, XZY, YXZ, YZX, ZXY, ZYX)
下絵として利用するだけでなく、単にいじって挙動を確認する事で、自分のモデリング方法はどれに近いかなど知ると、モデリング作業時の頭の整理がついて良いかと思います。


(*1)… Blender でモックの頭部を用意し、1軸ずつ動かして VTube Studio にフェイストラックさせる実験。
Blender上とVTS上とのオイラー角計算順が揃えば、VTS上の出力も1軸ずつになるだろうという見込みの下に行いました。
結果最も妥当だったのがXYZ(Live2D)でしたが、公に明らかと言うには今一つな結果だったのでこれ単体での公表は控えました。

VTSのAngleX,Y,Zについての個人的な実験