MRが楽しい

MRやVRについて学習したことを書き残す

UnityでHumanoidリグを利用する際の肘関節の捩れを調べる

本日は Unity の技術調査枠です。
Unity で Humanoid リグを利用する際の肘関節の捩れについて調べたことをまとめます。

まずは以下の動画を見てください。
f:id:bluebirdofoz:20180902032756g:plain

これは Blender で作成した、手の平を上に向けるように腕を捩るキャラクタモーションを Unity に取り込んだものです。
腕の影ラインに注目するとよく分かりますが、肘の部分が大きく捩れてしまっています。

この問題の原因は Unity で人型ボーン構造として推奨される Humanoid リグの構成にあります。
Humanoid リグは以下の通り、上腕部と前腕部をそれぞれ一本のボーンで構成しています。
f:id:bluebirdofoz:20180902033027j:plain

実際に手を捻ってみると分かると思いますが、腕は捻ると全体が徐々に捩れるのが正しい動きになります。
しかし、腕は大きく稼働する関係上、徐々に可動するような形にはウェイト付けが行えません。
このため、腕を捩ると可動部で大きく捩れが発生してしまいます。
f:id:bluebirdofoz:20180902033052j:plain

この問題を解決している一例として、3D 動画作成ソフトとして有名な MMD を見てみます。
MMD ではこの捩れ対策に、上腕部や前腕部に準基本ボーンとして「捩れ(ツイスト)」ボーンが定義されています。
モーション作成者がこれを適切に設定する事で極端な捩れの発生が回避できます。
f:id:bluebirdofoz:20180902033406j:plain

しかし、Unity の Humanoid リグにはこういった「捩れ(ツイスト)」がありません。
では全く対処されていないのかというと、そうではありません。以下のページに本問題に関する言及があります。
japan.unity3d.com
==========================================================
・ツイストボーンがなくてもよい理由
Humanoidリグはツイストボーンをサポートしないが、Mecanimソルバを使うことによって、各手足の親に含まれているねじれ具合をパーセントの形で取り出し、各々の子のほうに割り当てし直すことができる。
デフォルトでその値は50%だが、スキンデフォーメーションの問題を防ぐのに大いに役に立っている。
==========================================================

Humanoid リグで読み込んだモデルは腕や太腿を捩るとき、その捩れが自動的に分散されます。
改めて、最初の動画を「上腕部の回転」に注目して見ると、肩と肘で45度ずつ回転が行われていることが分かります。

試しに Blender 内で上腕部の90度回転を行ってみます。
本来ならば以下のように、肩の部分のみで90度の回転が行われて大きな捩れが発生します。
Unity では自動的に捻りを分散することで、こういった事象の発生を防いでいる訳です。
f:id:bluebirdofoz:20180902033537j:plain

人間の可動で90度以上の捻り回転が行われる箇所はないため、大抵の捻りによる破綻はこれで吸収されます。
太腿の捻りについても同様に分散され、極端な捩れが発生しないことが分かります。
f:id:bluebirdofoz:20180902033547j:plain

しかし、腕のみは上腕部と前腕部のそれぞれが90度回転しうるボーンが隣り合わせで繋がっています。
このため、肘の捩れだけは最大合わせて90度の捩れが発生してしまいます。
f:id:bluebirdofoz:20180902033611j:plain

違和感のない変形が行われるよう拘るのであれば、「捩れ(ツイスト)」ボーンを作成し、Generic リグで細かくモーションを作り込む他ありません。
しかし、ユニティちゃんなどで提供される Humanoid の共通モーション資産は利用できなくなってしまいます。
f:id:bluebirdofoz:20180902033636j:plain

また、完全に違和感のない変形とはいきませんが、Humanoid リグを用いつつ、この問題を回避する方法もあるようです。
最も分かりやすい一例はユニティちゃんです。
ユニティちゃんはこの問題をキャラクタのデザインで回避しています。
先程のモーションをユニティちゃんに適用したケースが以下です。
f:id:bluebirdofoz:20180902033845g:plain

肘の部分が服に覆われており、シワの寄ったテクスチャが貼られているため、90度回転してもそれほど気になりません。
他にもニコニ立体ちゃんなど、他の Unity で利用されることを前提としたモデルは同じような処理が施されています。
f:id:bluebirdofoz:20180902033901g:plain

「Humanoid リグを利用する際は、破綻しやすい肘関節を露出するデザインを避ける」
こんなデザイン的な制限があったんですね(必須ではないですが)……ホロ恋子の服装デザインも見直す必要がありそうです。