以前書いたVRoidモデルをVRChatへ持ち込む記事(現在非公開)の最新版です。突貫作業で書いたので、色々と端折っています。また、不適切な説明をしている場合がありますので予めご了承ください。
BlenderとCATSプラグインでVRMファイルを編集して、Unityで扱いやすい状態にします。Blender 3.6 LTSで行いますので、そちらをインストールしておいてください。
VRoid Studioでモデルのエクスポート
何も削減せずにエクスポートしておきます。今回はVRoid StudioのサンプルモデルAを使って、VRM1.0形式で挑戦します。
Blenderプラグインのインストール
CATSの公式版は更新がされていないので、非公式版を使います。何か困っても、CATSの公式Discordサーバーで質問をしないでください。
「Blender 3.6.11」に「CATSの非公式版(3.6.7.1)」と「VRMアドオン」、「PolyQuilt」を入れておいてください。
PolyQuiltでキーマップ設定
PolyQuiltはメッシュを弄るときに便利なプラグインですが、今回は「Unityと同じカメラ操作に変更」するために使います。Blender慣れしているのならこの操作は不要です。
インストールした後に「ゲームエンジン風キーマップをセットアップ」を押せばOKです。
日本語化設定
Blender プリファレンスから日本語設定が行えます。
念のため、新規データのチェックだけ外しておきます。
次に、ビュー内で「Nキー」を押すと右側にアイテムやツールなどのメニューが出てきますので、CATSを選択します。
「Settings & Updates」から日本語に変更可能です。
CATSでのモデルのセットアップ
日本語設定でざっくり説明します。
VRMモデルをインポートする
「モデルのインポート」から.vrm形式のファイルをインポートします。
自動修正をする
Fix MMD Model
かつてCATSにあった「モデルを修正」ボタンは削除されています。「レガシーなもの」の中に、「Fix MMD Model」ボタンがあるのでそちらを使用してください。
モデルの修正は少し時間が掛かるので、処理が終了するまで待ちましょう。
処理が終わるとArmatureとBody等のメッシュのみの構成になるはずです。
固定材料(Fix Material)
翻訳がおかしいですが、マテリアルの修正をするボタンです。
その他
多分該当する物は入ってないと思いますが、「剛体とジョイントを削除(Remove Rigidbodies and Joints)」ボタンは押しても大丈夫そうでした。「同じマテリアルを組み合わせる」のはダメそうなので触らないでおきます。
リップシンクの作成
メッシュ欄に面(Face)を割り当てて、「fcl_MTH_A」「fcl_MTH_U」「fcl_MTH_I」になっていることを確認してから「バイセムを作成する(Create Visemes)」を押してリップシンク用のシェイプキーを生成します。
但し、VRoid Studioで口のサイズを変更しているなどで、「MTH U」が破綻している場合は、「MTH O」で代用したほうが良さそうです。
vrc.v_から始まる名前のリップシンク用シェイプキーが複数生成されます。
アイトラッキングの修正
目のボーンの向きを修正します。「Eye_L」と「Eye_R」を割り当てて、「目のボーンを回転させる」を押します。
下にあるアイトラッキング作成ボタンは使わないので触らないでください。
FBX形式でエクスポート
「モデルをエクスポート」から「Unity用FBX」を選んでエクスポートを行います。
警告が表示されますが、メッシュは結合せずに「Continue to Export」を押して保存してください。
テクスチャをエクスポートする
テクスチャが埋め込まれていると不便なので書き出します。書き出す前に「ファイル→名前を付けて保存」から、一度blendファイルを保存しておくと良いでしょう。
「ファイル→外部データ→リソースをパック解除」を選びます。
「現在のディレクトリのファイルを(必要があれば作成して)使用します」を選ぶと、blendファイルの保存先に「textures」フォルダが作成されてテクスチャがエクスポートされます。
Unityと和解する
最初にVCCかALCOMを使用してVRChat用のプロジェクトを用意してください。今回はALCOMを使います。
VPMリポジトリの設定
「Modular Avatar」と「AAO: AvatarOptimizer」と「liltoon」はよく使うので、そちらを入れます。それと、表情作成が必要なので、「FaceEmo」も入れておきます。
VPMリポジトリを追加ボタンから、以下のアドレスを入れてリポジトリを追加してください。
- https://vpm.nadena.dev/vpm.json
- https://vpm.anatawa12.com/vpm.json
- https://lilxyzw.github.io/vpm-repos/vpm.json
- https://suzuryg.github.io/vpm-repos/vpm.json
リポジトリを追加したら、新規作成したプロジェクトの「管理」ボタンから、「AAO: AvatarOptimizer」と「liltoon」をインストールしておいてください。
FBXファイルとテクスチャをUnityにインポートする
出力したFBXファイルをプロジェクト内にドラッグ&ドロップします。テクスチャも「textures」フォルダごと入れておきましょう。
モデルの設定
Read/Writeのチェックと法線をインポートに設定しておきます。
リグの設定
リグをHumanoidに変更して、「適用する」を押します。
それから「設定」ボタンを押すとリグ編集画面に切り替わりますので、左側のInspectorタブで「Head」を選んでください。
「Jaw」を「なし」に変更しておきます。
下にスクロールすると「Done」ボタンがあるので押して終了します。
マテリアルの設定
「外部マテリアルを使用(古い機能)」を選んで「適用する」を押します。
別の方法もあると思いますが、とりあえずこれで行きます。
マテリアルの編集
Materialsフォルダにマテリアルが出力されているはずなので、全て選択してからliltoonに変更します。
マテリアルにテクスチャを入れる
とても面倒ですが、手動で入れます。(前は自動で入ってたんだけどな……。)ノーマルマップ(真っ青なテクスチャ)があるものは、ついでに入れておくと良いでしょう。
メインカラーのところにテクスチャを入れて、色はE7E7E7からFFFFFFにします。
ノーマルマップ設定を開くと、ノーマルマップも選べます。
テクスチャ名の数字はモデルによって全く異なると思われるので、あまり参考にはなりませんが一応掲載しておきます。「_01.png~_11.png」までは身体と顔なので共通だと思いますが、それ以降は髪と衣装のマテリアル数に応じて変わってくるはずです。
サンプルモデルAの場合は以下のようになりました。
マテリアル名 | テクスチャ名 | ノーマルマップ | 描画モード | 備考 |
---|---|---|---|---|
N00_000_00_Body_00_SKIN | _10 | _11 | 不透明 | |
N00_000_00_EyeHighlight_00_EYE | _03 | 半透明 | ||
N00_000_00_EyeIris_00_EYE | _02 | カットアウト | ||
N00_000_00_EyeWhite_00_EYE | _06 | 不透明 | ||
N00_000_00_Face_00_SKIN | _04 | _05 | 不透明 | |
N00_000_00_FaceBrow_00_FACE | _07 | 半透明 | ||
N00_000_00_FaceEyelash_00_FACE | _08 | 半透明 | ||
N00_000_00_FaceEyeline_00_FACE | _09 | 半透明 | ||
N00_000_00_FaceMouth_00_FACE | _01 | 不透明 | ||
N00_000_Hair_00_HAIR_01 | _15 | 不透明 | ||
N00_000_Hair_00_HAIR_02 | _17 | 不透明 | ||
N00_000_Hair_00_HAIR_03 | _19 | 不透明 | ||
N00_000_Hair_00_HAIR_04 | _21 | 不透明 | ||
N00_001_01_Shoes_01_CLOTH | _03 | カットアウト | ||
N00_001_02_Bottoms_01_CLOTH | _12 | カットアウト | カリングOFF | |
N00_005_01_Tops_01_CLOTH | _14 | カットアウト | カリングOFF |
参考程度に描画モードの設定も書いておきましたが、描画モードは見栄えに合わせてカットアウトと半透明を使い分けてください。
できるだけカットアウトで済ませた方がトラブルになりづらいです。全部半透明にすると重なったときに消えたりしておかしくなりやすくなります。(※レンダーキューの都合)
VRoidの服は裏に面がないので、背面カリングをOFFにして両面を描画するようにします。(特にスカート)
テクスチャの設定は?
カラーテクスチャはsRGBのチェックを入れたままにして、マスクなどの色を扱わないテクスチャはsRGBのチェックを外しておきましょう。髪の透過用マスクテクスチャを自作するときなど、思ってたのとなんだか違うというトラブルを防げます。
ミップストリーミングは必須ですが、アップロード時にAuto Fixボタンが出てくるのでうっかり忘れても対処可能です。ミップマップフィルタリングはカイザーに設定するのが推奨されています。
テクスチャの最大サイズは2048に設定してください。4096はテクスチャ容量が爆増しますので、やむを得ない場合を除いて4096に設定するのは控えてください。
圧縮は高品質を選ぶと綺麗になりますが、ファイルサイズが大きくなる場合があります。(2.7MBから5.3MBぐらいになる)Crunch Compression(クランチ圧縮)は使用しないこと。
アバターのセットアップ
シーン内にモデルを投げ込んでください。マテリアル設定を間違えていなければ、目元が黒くなったりはしません。黒くなっている場合は描画モードをカットアウトか半透明に切り替え、テクスチャを間違えている場合は置き換えます。
「コンポーネントの追加」から「VRC Avatar Descriptor」を入れます。
View Position
良い感じの位置に設定します。サンプルモデルの場合Yが1.41、Zが0.08ぐらいになりました。
LipSync
Viseme Blend Shapeにして、シーン内のFaceメッシュを選択すると自動的にシェイプキーが登録されます。
Eye Look
Eye_LとEye_Rを選択して、目の可動範囲を設定します。
シーン内に幾つかアバターを配置している場合は、Hierarchyの方からツリーを展開していって、直接持ってくるのが確実です。
Blender側で特に弄っていなければ、可動範囲は±5ぐらいの範囲が無難ではないかと思われます。
まばたきの設定
EyelidsをBlendshapeにして、Faceメッシュを設定するとまばたきのシェイプキーが選べるようになります。
まばたき用のシェイプキーは用意しなかったので、とりあえずBlinkに「Fcl_EYE_Close」を入れておきます。他2つは無しでもOKです。
表情作成
FaceEmoでよしなにしてください。
VRCAvatarEditorも利用できるので、ALCOMに以下のリポジトリを追加して使うのもありです。非破壊ではありませんが、VRoidでアバターを作る際は何もかもが空っぽなので、最初にAvatarEditorでFXレイヤー周りを自動生成する分には問題ありません。
- https://vpm.gatosyocora.net/index.json
アバターの最適化
この状態のVRoidアバターはそんなに重くはありませんが、アバター直下に「AAO Trace And Optimize」を入れておくと良い感じに最適化してくれます。
今後色々と弄って重たくなってきたら、しっかりとした最適化に挑戦することをオススメします。
Quest対応は?
VRoidアバターをQuest対応する為には半透明テクスチャを一切使わないようにする必要があります。しかし、それはあまりにもしんどいので解説はしません。Blenderで目元を全部作り直す気力があるなら、まぁその……。
VRChatにアップロードする
多分動くと思うので名前とサムネイルを設定してアップロードをします。
Streaming Mip Mapsのエラーが出ているはずなので、Auto Fixを押しておいてください。
予め設定する場合は、テクスチャのインポート設定で、「ミップストリーミング」にチェックを入れて適用します。
ノーマルマップ設定で怒られた場合もFix nowを選択してください。
細かいところはかなり端折ったので、そのうち書き足すと思います。
トラブルシューティング
目元が黒くなったりする
VRoidモデルは半透明テクスチャで色々とくりぬいている構造なので、描画モードが不透明だとおかしくなります。描画モードをカットアウトか半透明に設定してください。
スカートの裏側が透ける
カリングをOFFにします。liltoonであれば、基本設定の中にCull Modeがあるので、それをBackからOffに切り替えてください。
色が少しくすんでいる・暗い
シェーダーのメインカラーが灰色になっているかもしれません。
色が少し黄色っぽい
ディレクショナルライトの色を白にしてください。
矢印(キズモ)が出てこない
シーンビューの右上のボタンがオンになっているか確認してみてください。
プレビューする度に一時停止してしまう
エラーで一時停止する設定になっているかもしれません。コンソールタブを確認してください。
Unityのバージョンが古い
新しいバージョンのUnityをインストールしておくと、ALCOMのプロジェクト管理から「プロジェクトを移行」を選択することでマイグレートが行えます。