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