clusterのゲームジャムイベントの時にデフォルトのアバターというのもなんだな~と思ってVoxelorerBirdの主人公キャラをアバター化してみました。
VoxelorerBirdの主人公にはすでにボーンを設定していたのであっさり持っていけると思っていたのですが、ボーンの構造が単純すぎてVRM化に失敗。clusterの公式サイトで紹介されているmixamoでボーンを自動設定するのも、ボクセルキャラが人型ではなかったため失敗。やむを得ないのでVoxel Importerであらためてボーンとウェイトを設定することにしました。その際の作業の備忘録です。
目次
使用ツール
以下のツールを使いました。
- Unity2019.4.22f1
- MagicaVoxel
- Voxel Importer | Modeling | Unity Asset Store
- UniVRM
このうち、Voxel Importerは有料ですが、ボクセルを扱う最高のツールです。Unityでオリジナルのボクセルキャラを使ってゲームを作るならVery Animationとまとめてゲットしておくのがおススメです。
手順
MagicaVoxelでモデリング > Unityに読み込み > Voxel Importerでボーン設定 > dae形式でエクスポートして再読み込み > VRMにエクスポート、という流れです。
モデルの作成
Magica Voxelでキャラクターを作ります。いわゆるTポーズで作ります。Magica Voxelのサンプルのchr_knightとかのままだと変なになるので、あれを使う場合は装備を外して手を伸ばしてください。
左手の先に髪の毛が繋がってて駄目っぽいですが、Voxel Importerでうまいことウェイトを設定すれば切り離すことができます。斜め接続もVoxel Imporeterなら大丈夫です。
モデルができたらMagica Voxelのデフォルト形式のvox形式で保存すればモデル作成は完了です。Unityのプロジェクトがすでにあれば、プロジェクトのAssetsフォルダー以下の任意のフォルダーに入れればすぐに使えます。
ボーンの設定
作成したvoxファイルをVoxel ImporterでUnityに読み込んでボーンを設定します。
- Unityを起動してVoxel Importer | Modeling | Unity Asset Storeをインポートします
- 空のゲームオブジェクトを作成して、Voxel Skinned Animation Object コンポーネントをアタッチします
- InspectorウィンドウのVoxel File欄にMagicaVoxelで作成したvoxファイルをドラッグ&ドロップで読み込みます
- 読み込み直後はボクセルの一辺1m相当で読み込まれて巨大なので、Scaleで適度な大きさに調整します。例えばchr_knightは高さが15ボクセルなのでそのままだと15mに相当します。Import Scaleのx,y,zすべてを
0.08
にすれば1.2m相当になります - Import Offsetは、Setボタンをクリックして、Feetを選択すると足元の丁度よさそうな場所が設定されます。
- Animation欄でCreate > VoxelImporter > Editor > BoneTemplates > Maximum Humanoid(Mecanim).asset を選択して、必要なボーン構造を生成します
- 生成したボーンのうち、Jawがあると後でエラーになるので削除します
他にもclusterのドキュメントにないパーツは削除して構いません。
- RigのAnimationタイプに Humanoid を設定します
このままだとボーンが巨大すぎてclusterなどに持って行った時にちゃんと表示されないので、ボーンのサイズを合わせておきます。
- Hierarchyウィンドウでvoxを読み込んだオブジェクトを開いて、Hipsを選択します
- Inspectorウィンドウで Edit Bone Position をクリックして選択します
最初はこのぐらいボーンの大きさが合っていません。
- Scaling All欄に
0.5
を入力してApplyボタンを押して、それらしいサイズに調整します
ボーン合わせとウェイト設定は慣れるまで大変なので、先に動作確認のためにVRMに出力してみましょう。
VRMの作成
VRMを作成するには、notargsさんのUniVRMを利用します。
ドキュメントに従ってUnityプロジェクトにインポートしてください。
Voxel ImporterのオブジェクトのままだとVRMに書き出せないので、一度エクスポートしてUnityの通常のアセットにします。
- Assetsフォルダー内の適当な場所にエクスポートします。チェックは全てついていてOKです
- Projectウィンドウでエクスポートしたdaeファイルを選択します
- InspectorウィンドウでRigを選択して、Animation TypeがHumanoidになっていることを確認します。違う場合はHumanoidにしてApplyをクリックします
- VRM0メニューから Export to VRM 0.x を選択します
- 下の方にあるTitle欄にアバター名を入力します。例えば
chr_knight
など - Versionに適当なバージョン番号(
0.1.0
など)を入力します - Authorに著作権者名入力します。自作のモデルなら自分の名前、他の人のものならその人の氏名(chr_knightなら
Ephtracy
)を入力します
以上設定したら Export ボタンをクリックして出力します。デスクトップなどの適当なフォルダーを指定して出力すれば完了です。出力したvrmファイルをclusterのアバターなどにアップロードします。
ウェイトを設定していないのでTポーズのままですが、ワールドに入れるはずです。
あとは必要に応じて Voxel Skinned Animation Object の Advanced 設定をしたり、ウェイトを設定して、daeファイルのエクスポートからVRMファイルを作り直せばOKです。
Voxel Importerでのウェイト設定
苦戦したのでコツをメモしておきます。なにはともあれ、まずは公式動画を一度視聴します。
以下が作業のコツです。
- 近寄って作業したいのにモデルがカメラを突き抜けてしまうとか、回転位置がおかしくて操作しにくい場合、注視点を設定することで直せます。Hierarchyウィンドウでウェイトを設定したいキャラクターをクリックして選んで、Sceneウィンドウ上にマウスカーソルを移動させたら、Shift + F キーを押します。これでズームや回転が操作しやすくなります
- Sceneウィンドウは Iso(等角図)にした方がパースがかからずに設定しやすいと思います
- ウェイト編集モードでモデルが真っ黒になって形状が確認しにくい時は、Spaceキーを押すと元の絵が表示できます
- Spine(背骨)など親側から設定します
- 全てのボーンにウェイトを設定する必要はなく、Spine, Left Upper Arm, Left Lower Arm, Left Hand, Head, Left Upper Leg, Left Lower Legあたりにざっくりと設定します
- 頂点モード(Vertex)のRectでざっくりと設定すると、内部のボクセルもまとめて塗られて楽です
- ボクセルが隣接していたり、斜めになって頂点が共有されている場合は、VoxelモードとVertexモードを上手に使い分けて塗ると正しく分割できます
- ウェイトは1か0でめりはりをつけて設定しておく感じ
- まずはざっくり設定して、細かいところはあとで修正
こんなところです。はじめのうちはコツが掴めず何回もやり直しましたが、動画を参考に、アニメさせながら調整するとか、ざっくり設定する感覚が把握できると、結構さくさくと設定できるようになりました。
揺れもの
UniVRMのVR Spring Boneを使うと、髪の毛やしっぽなどの揺れものを設定できます。詳しくはVirtualCastの以下のWikiにあります。
Voxel Importerで作成した場合はドキュメント内のsecondaryに該当するものがないので、以下のような手順で下準備します。
- ボーンにしたい位置に空のゲームオブジェクトを作成して、Voxel Importerの Voxel Skinned Animation Object Bone をアタッチしてボーンにします
- ウェイトを設定します
- Collada形式でエクスポートして、Unityオブジェクトに変換します
- daeファイルをHierarchyウィンドウにドラッグ&ドロップしてシーンに読み込みます
- シーンに読み込んだルートオブジェクトの子供にスプリング管理用の空のゲームオブジェクトを作成して、VR Spring Boneコンポーネントをアタッチします
あとは、Virtualcastのドキュメントに従って揺れ設定をすればOKです。
移動や回転が速すぎると当たり判定を設定しても反対側にすり抜けてしまって戻らなくなったりしました。スプリング(Stiffness Force)を最大に固くして、抵抗(Drag Force)を大きくして、重力を軽くして(Gravity Dirを0に近づける)、動きを抑えてなんとなく安定させました。
まとめ
MagicaVoxelで作成したvoxファイルをUnityのVoxel Importerでボーンを入れて、UniVRMでVRMファイルに出力してclusterのアバターを作成しました。
- Magica Voxelでモデルを作成してvoxファイル化
- Voxel ImporterでvoxファイルをUnityにインポート
- Voxel Importerでボーンの作成とウェイト設定
- Voxel ImporterでモデルをエクスポートしてUnityオブジェクト化
- UniVRMでVRMファイル出力
難関はウェイト設定ですが、Voxel ImporterのVoxelモードとVertexモードを活用すると、くっついているボクセルを切り離すことができるのでモデル作成の制約が減ります。ウェイト設定時に Shift + Fキーでキャラクターに注目することと、Spaceキーで元の絵が見えることを知ると作業効率が格段に上がりました。
ボクセルならモデルが作りやすいのでモデリングが苦手な人でも自分用のオリジナルアバターが作れるのではないかと思います。