バンナムが公開した「AI研究開発用3Dモーションデータセット」をUnityのモデルに適用させる方法
やれること
上のデータを
こんな感じに、Unity 上の Humanoid に適用させる方法について解説します。手順は以下のような感じ。
bvh データのダウンロード
bvh ファイルから Animation の作成
Animator の適用
bvhデータのダウンロード
上のリポジトリを clone します。なんのことかわからなければ、
ここの「Download ZIP」でもOK。
フォルダの中に「dataset-1_bow_active_001.bvh」といったファイルがあるが大量にあると思いますが、この bvh というファイルがモーションデータの本体になります。しかしこのままでは Unity に読み込めません。
アニメーションファイルの作成
Unity に読み込める形にするためには、まず「fbx」に変換する必要があります。そのためには Blender で中間処理をする必要があります。と言っても、特にモデリング的な操作をする訳ではなく、本当にファイルを読み込んで別の形式にエクスポートするだけですので、Blender アレルギーがある人も身構える必要はありません。
Blender のインストールについてはさすがに割愛するので、もししていない人はぐぐってください。
「File」→「Import」→「Motion Capture」から bvh ファイルをインポート。GUI操作が煩わしければ、F3 キーを押して「import bvh」で検索しても同じ操作がヒットすると思います。私はそうしています。
こんな感じのスケルトン君が召喚されます。
これをそのまま「File」→「Export」→「FBX」でエクスポート。
Blender あるあるですが、「Camera」と「Lamp」のチェックは外しておきましょう。これは、カメラと光源も fbx に含めるという内容で、3Dデータを部品として使う場合には、通常は必要ないです。
出力された fbx を Unity で読み込みます。
アセット欄にドラッグ&ドロップで放り込むと以下のようになります。
まだ fbx が Generic(人型ではない固形物)扱いなので、これを人型のデータだと認識させます。
Untiy 上で fbx を選択すると、(初期配置では)右上の方にあるインスペクタ欄に上のような情報が出ます。「Animation Type」を「Humanoid」にして「Apply」を押すと自動的に人型だと認識してくれます。bvhファイルの構成によりますが、よほど変な構成でなければうまくいくはずです。少なくともバンナムのデータセットでは大丈夫でした。データによってはボーンの手動割当が必要になるかもしれません。
fbx がこのようになっていれば Humanoid としてインポートできています。この中にある▲マークみたいのが、アニメーションデータになります。
他モデルへの適用
アニメーションデータを他のモデルへ適用させます。まずは適用させたいモデルを取り込みます。当たり前ですが、人型モデルで Humanoid として取り込む必要があります。
本記事ではこの娘を使います。
アセット欄を右クリックして「Create」→「Animator Controller」を選択します。「Animation」ではないので注意してください。
「New Animator Controller」というファイルができます。
クリックしたらこのようになります。
右クリックして、「Create State」→「Empty」を選択します。
「New State」というノードができて、自動的に「Empty」から線が引かれます。
(初期配置では)右上のインスペクタ欄に上のような情報が出ます。「Motion」の欄の右にある◎をクリックします。該当欄を選択した上でスペースキーでも可です。私はそうしています。
「Select Motion」というウィンドウが出るので、目的のアニメーションを選びます。上の図では「dataset…」というアニメーションがそれにあたります。
これでアニメーターコントローラーの設定は終わりです。
最後にこれを、モーションを適用させたい3Dモデルに適用させます。
アニメーターコントローラーをドラッグ&ドロップすると、Humanoid のプリファブに自動的にそのコントローラーが設定されます。
後はゲーム再生ボタンを押せば、そのモーションをしてくれるはずです。Unity のカメラの初期配置だとうまくアバターの方を向いていない可能性があるので、そのあたりは適宜調整しましょう。
他のソフトへの適用
最後に、他のソフトへの適用について話します。
そもそも、bvh(Biovision Hierarchy)がモーションキャプチャ用の汎用的な形式です。中身はテキストファイルで、以下のようなジョイントの情報と、それらがフレームごとにどう動くかを記述しています。
では他のソフトだったらこれを読み込ませれば一発……とはなりません。
なぜかというと、bvh で記述されているのはボーンの情報のみだからです。3Dモデルに同じ動きをさせるにはそのボーンの動きをベイクする必要があります。しかし、そもそもモーションデータと適用先が同じボーン構造をしているとは限りません。
これを解決するためには、モーションデータと適用先のボーン対応関係を指示する(リターゲティング)するか、そもそも適用先のウェイトをすべて無視して、モーションデータのボーンにリギングするかのどちらかが必要です。どちらもそれなりに手間がかかります。
Unity だとなぜ上手くいったかというと、Humanoid という形式で強力に正規化されているからです。
また、VRM Live Viewer のような bvh ファイルをサポートしているソフトであっても、バンナムのデータセットは読み込めませんでした(ver3.3時点)。恐らくヒエラルキー構造の違いによるものだと考えられます。
少なくとも Unity の Humanoid ではこのあたりの違いを吸収できているので、簡単な補正で対処可能だとは思いますが、まだ条件等を調査中です。
この記事が気に入ったらサポートをしてみませんか?