何も入れなくても楽しいBeatSaberだけど、やっぱり剣を振るキャラがいると気分が上がる。
それをするためにはmodとモデルが必要。modはなんとかなるけどモデルはちょっと…みたいな場合、VRoid Studioを使ってモデルを作れたら良いなと思うわけですよ。そのために苦労したので覚え書きを残しておく。簡単なUnity操作ができる想定で書いています。
※modなどを使用しています。自己責任でお願いします。modの入れ方については別のサイトを参照してください。
参考サイト
- https://bsmg.wiki/models/avatars-guide.html modのwikiのヘルプ。mmdからなのに加えて英語
- https://noshilog.com/beat-saber-avatar-creating mmdからavatarファイルを作る方法。日本語だけどちょっと古い?
- https://github.com/nicoco007/BeatSaberCustomAvatars/releases custom avatar作るための環境とかがおいてあるところ。
- https://www.ay3s-room.com/entry/unity-vrm-import-export UnityにVRMを入れるためのヘルプ
手順
- BeatSaberにavatars modなどを入れる
- VRMファイルを0.0で作る
- custom avatar作るためのUnity ProjectにVRM 0.x Import/Exportを入れたり必要なdllファイルを入れたりする
- Unity ProjectにVRMファイルをインポートする
- モデルの手を握る形にしたりIKの設定をしたりする
- マテリアルの設定をBeatSaber向けにする
- 出力する
- 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起動中でも再読み込みしてもらえるので、それで確認するのがよさそう。
以上
コメント