ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Blender】boneが逆回転してしまう現象の私的な調査メモ

time 2016/11/13

というわけで、前に続き Blender に関するお話です!
今回はアニメーション設定時に bone が逆回転してしまう現象について調べてみました!

特に縦横にキャラクターを回転させるアクションを作った際に起こりがちです。
自分のように頭身の低いキャラを使っている場合はモロに響く問題です。

どうやら「Quaternion」が関係してくる話のようです。
何とかならないか調べてみたので、その内容について書いておきます!

※書いている人が数学全然ダメなので、問題ないという保証はありません。
試す際は自己責任で!

逆回転するフレームを修正したフレームで登録する

逆回転する部分を手動で補完し登録することで、「内部的に逆回転しているが描画されない」ようになります。
力技っぽいアプローチですが、Quaternion の回転制限を受けずに修正できます。

shot2ss20161112234715154

実際にやってみるとなかなか大変です。
「10フレームかけて1回転する」アニメーションを直す場合でも、逆回転する度にポーズを修正してキーフレームを登録する必要がある上、手動なので動きもぎこちなくなってしまいます。
とは言え、Quaternion にした状態で180度以上回転させるにはこれしかないようです。

boneのRotationModeを変える

そもそもこの現象は、Quaternion が -1~1 の間しか表現できないため、その最短の補完を行う際に起こるみたいです。
角度でいうと -180~180 ですね。
これ以上に回転を掛けようとしなければ発生しないようですが、キャラクターの回転アクションを180度以内で収めるのは無理があります。

このあたりのお話は Unity の公式マニュアルに書いてあります。
https://docs.unity3d.com/ja/current/Manual/QuaternionAndEulerRotationsInUnity.html
https://docs.unity3d.com/ja/current/Manual/AnimationEulerCurveImport.html

shot2ss20161112235006561

で、Blender の bone はデフォルトの回転モードが Quaternion になっているそうです。
これを Euler に切り替えればOKです。

テスト用に作ったウサギちゃんで試してみます。

20161113_02

20161113_01

上は回転モードが Quaternion、下は Euler で、X軸に220度ほど回転させた際の動きです。
Quaternion では逆回転して戻ってしまいますが、Euler ではしっかり1回転してくれます。

shot2ss20161112235208705

この状態で Unity にインポートした場合、Unity 側で自動的に Quaternion のキーフレームを考慮したモーションに修正してくれるようです。
リサンプリングした結果が厳密ではない場合、「Resample Curves」のチェックを外すと Euler のキーフレームをそのまま使えるようです。

ただし、Euler を使うと「ジンバルロック」という問題が発生するようです。
3方向の特定の軸が重なった場合に2方向にしか自由に動かせなくなる・・・的なものらしいですが、自分もよく分かりませんorz
ぐぐった感じでは、1~2軸のみ動かす場合は Euler でも問題ないようです。
Blender の場合は bone ごとに回転モードを選択できるため、逆回転しうるものだけ Euler にするのも有りかもしれません。

shot2ss20161112235339520

また、回転モードを変えた bone はキーフレームを設定し直す必要があります。
(Rotation だけ黄色くなっていない=キーフレームが設定されていない)
モーション作成中に変えると面倒なので、アニメーション系の作業に取り掛かる前に決めておくのがよさそうです。

まとめ

そんなわけで、Blender で bone が逆回転する現象について調べてみました!
かなり難しい話題なので、また何か分かったら考えてみます。

down

コメントする