VRMからBeatSaber向けavatarファイルを作成する

何も入れなくても楽しいBeatSaberだけど、やっぱり剣を振るキャラがいると気分が上がる。

それをするためにはmodとモデルが必要。modはなんとかなるけどモデルはちょっと…みたいな場合、VRoid Studioを使ってモデルを作れたら良いなと思うわけですよ。そのために苦労したので覚え書きを残しておく。簡単なUnity操作ができる想定で書いています。

※modなどを使用しています。自己責任でお願いします。modの入れ方については別のサイトを参照してください。

参考サイト

手順

  1. BeatSaberにavatars modなどを入れる
  2. VRMファイルを0.0で作る
  3. custom avatar作るためのUnity ProjectにVRM 0.x Import/Exportを入れたり必要なdllファイルを入れたりする
  4. Unity ProjectにVRMファイルをインポートする
  5. モデルの手を握る形にしたりIKの設定をしたりする
  6. マテリアルの設定をBeatSaber向けにする
  7. 出力する
  8. BeatSaber上でモデルが正しく表示されるか確認する

1.BeatSaberにavatars modなどを入れる

省略。各自調べてください。

2.VRMファイルを0.0で作る

VRoid Studioで作ったら、画面右上の「VRM エクスポート」からエクスポートする。エクスポート時には、VRM0.0でやってください(1.0でもいいかもしれませんが、ここでは0.0で説明します)。
※自分のやりたいこととが、素材等の権利的に問題ないか再確認してください。

3.custom avatar作るためのUnity ProjectにVRM 0.x Import/Exportを入れたり必要なdllファイルを入れたりする

https://github.com/nicoco007/BeatSaberCustomAvatars/releases から、Unity Packageをインストールする。この記事ではCustomAvatar-UnityProject-v5.4.0.zipをダウンロードします。Compatible with Beat Saber 1.37.0と書いていますが、多少のバージョンずれは許してもらえるはずの気持ち…(保障しません。自己責任でお願いします)。

全て展開したらUnity Hubから展開後のフォルダを開く(Unity Versionは2021.3.16 ちょっと古いね!)。ライブラリが足りないエラーが出るので、Beat SaberのインストールフォルダのlibフォルダからFinalIK.dllとDynamicBone.dllを、Assets/Librariesにコピーする。

エラーがなくなったら次にVRM 0.x Import/Exportを入れる。https://github.com/vrm-c/UniVRM/releases からVRM0.x向けのUniVRM-x.xxx.x_xxxx.unitypackageをダウンロード。Unityを開いている状態でunitypackageをダブルクリックして、出てくるウィンドウで[All]->[Import]でインポートできる。

そしたらめっちゃエラーが出る。Universal RenderPipelineというのが必要なので、Unityの[Window]->[PackageManager]、から「Test Framework」と「Universal RP」をインストール。見つからない場合、Package Managerウィンドウ上部のPackages:がUnity Registryになっていることを確認すること。

ウィンドウ右下の[Inport]からインポート。
でエラーが消える…はずが消えない。HideInCallstackアトリビュートが見つからないと言われてるっぽいので、とりあえずアトリビュートを削除してしまう。

該当のコード。まあ…イランやろ。たぶん。

これで環境の準備はOK…のはず。

4.Unity ProjectにVRMファイルをインポートする

Projectビューで右クリック→[Create]->[Folder]でVRMモデル関係のファイルを入れる新規フォルダ作成(名前は適当にModelとか)。作成したフォルダを開き、VRMモデルをドラッグアンドドロップ。UniVRM-x.xxx.x_xxxx.unitypackageをうまく入れられていたら問題なくインポートできるはず。

5.モデルの手を握る形にしたりIKの設定をしたりする

まずはシーンに空のオブジェクトと、その子オブジェクトとして空のオブジェクトを4つ用意する。親オブジェクトはキャラ名(ここではAmmie)、子オブジェクトはそれぞれHead, Body, RightHand, LeftHandとする。Ammieの下に展開されたVRMモデルも置く。

BeatSaberをプレイするので、両手を何か握るような形にする。VRMモデル(画像だとAmmieWorkStyle0)を展開していくと、Root/…Hips/…Spine/…Chest/…UpperChest/…L_Shoulder/…L_Handの子オブジェクトが、左手の指(の第三?関節/第二関節/第一関節)になるので、良い感じに回転させる(移動/拡大はあまりしない方が…)。あまりこだわらないときは、4つ指は第三関節z軸45°回転→第二関節z軸75°回転→第一関節20°回転で、それっぽい感じになると思います。親指はy軸x軸も使って良い感じに。こだわりポイントでもあるけど、あとでもっと見やすくなるので今はなんとなくでも良いかも。右手も同じような形で曲げる。数値は+-反転させること。

できたら、最初の方に作った「Head」「LeftHand」「RightHand」の位置を、目の間のちょっと前(VRのカメラがあるだろう位置)、右手・左手の穴の位置(セーバーを握る場所)に置く。
置いたら、…L_Handと…R_Handの子オブジェクトとして、またRoot/…Hips/…Spine/…Chest/…UpperChest/…Neck/…Headの子オブジェクトとして、空のオブジェクトを作る。名前はそれぞれLeftHandTarget/RightHandTarget/HeadTargetとする。
作成したら、LeftHandTargetをLeftHandの子に、RightHandTargetをRightHandの子にする。

そしたらIKの準備をする。VRMモデルのオブジェクト(画像だとAmmieWorkStyle0)に、VR IKとVRIK ManagerをAdd Componentする。機嫌が良いと勝手にReferenceにトランスフォームが設定される。設定されない場合、VR IKとVRIK ManagerのReferenceをちくちく埋めていく必要がある。。

その後、VRIK ManagerのSolverのSpine中Head Target/Left Arm中Target/Right Arm中Targetに、それぞれHeadTarget/LeftArmTarget/RightArmTargetをアタッチする。

ここで一度再生する。エラーが出ないかとか、編に動かないかとか確認する(本当はIKが正しく動くかもここで見たい…。

問題なければ次へ。

6.マテリアルの設定をBeatSaber向けにする

これのために記事を書いたと言ってもいい。簡単に説明すると、VRMは専用のシェーダーで表示しているけれど、Beat SaberにはBeat Saber用のシェーダーで表示されている。そこがずれると、うまく表示できず真っ白なモデルになってしまう。

というわけで、Beat Saber用のものにマテリアルを変更していく。

VRMをインポートしたフォルダに、xxx.materialsというフォルダができていると思うので、そこのフォルダを開く。そこにあるマテリアルのShaderが全部VRM/MToonになっていると思うので、全部BeatSaber/xxxに変える。細かいところにこだわらないのであれば、Unlit Glow系(Textureを再設定する必要があって面倒だけど…)。眼鏡や眉毛などの透明な部分がある場合はTransparentを選んでおけば、とりあえず表示はされる。こだわる場合はパラメーターをいじったりしてキミだけの素敵シェーディングをみせてください!

7.出力する

最初に付けたモデル名(画像だとAmmie)に、Avatar Descriptor コンポーネントをAddする。NameとAuthorを適当に埋めた後、[Window]->[Avatar Exporter]を開き、[Export xxx]をクリックして、(Beat Saberの場所)/CustomAvatarsに出力する。

8.BeatSaber上でモデルが正しく表示されるか確認する

結局はこれがダメなら全部ダメなので…。

手首がグネってなるのは、Left/RightHandTargetのZ軸を30~50°程度回転させると良いらしい。

再出力時は、基本的にBeat Saber起動中でも再読み込みしてもらえるので、それで確認するのがよさそう。

以上

関連記事

コメント

この記事へのコメントはありません。

TOP