【2024/08時点】VRChatでBlenderで作ったアバターをとりあえず動かす

約半年ぶりに、真面目にいうと2年ぶりくらいに作ったら色々変わっていたのでメモ。
 おそらくそのうち役に立たなくなる。

使用するもの

環境

  • VRReadyのPC
  • Quest2 Air Link

環境を整える

  1. VCCをインストールする。
  2. Unity ダウンロードアーカイブから指定のエディターをインストールする。Unity Hubからだと失敗する。
  3. VCCで新規プロジェクトを作成する。
  4. MAとFaceEmo、GestureManagerとAv3Emulatorをプロジェクトに追加する。
  5. VRChatアカウントにログインする。

アバターをセットアップする

アバターのボーンについて

全部受け売りです。

横から見たボーン

赤字部分
青字部分
緑字部分 参考にしたツイートを見失った……
ピンク字部分 特に参考にしているものはないはず……

前から見たボーン
青字部分 参考元見失い……

ちなみにベースはVRM Addon for Blenderで作れるHumanoidボーンです。

おすすめBlenderExtensions

すべて4.2で確認済み

  • VRM Addon for Blender
    Unityに持っていく人形モデルを作るときはいれると楽。
  • Mio3Shapekey
    同じコレクション内の同じシェイプキーを持つモデルのシェイプキーを同期して操作できる
  • ShapeKeysUtil
    シェイプキーを持つメッシュにモディファイアーを適用できる
    また、シェイプキーを左右別々にできる。ウィンクを作るときなど。
  • CATS Blender Plugin
    非公式4.2対応版。わかりにくいVRChatの口パクシェイプキーを自動生成してくれる。

とりあえず基本的な設定をする

  1. FBXとテクスチャをUnityに読み込む
  2. お好きなシェーダーを読み込む。今回はliltoonを使うのでそれを前提に話す。
  3. マテリアルをExtractし、RigをHumanoidにする。

    この際Hipを靴底など分の高さ上げておくとVRChatに持っていった時に埋まらない。
  4. Hierarchyに配置し、配置したモデルを右クリックしてUnpackCompletelyする。
  5. Materialの調整をする。liltoonの場合はモデルを右クリックしてFix lightingをする。
  6. Add ComponentでAvatarDescripterを追加
  7. ViewPositionを設定
  8. LipSyncとEyelidを設定する。

ひとまず最低限これだけでアップロードできます。
 オフラインでテストしてからアップロードしてみましょう。

表情をセットアップする。

FaceEmoの公式ドキュメントを読んでください。

これは投げやりとかではなく、そっちのほうが最新情報がまとまっているので……

目線コントロールシェイプキーアニメーションを作る

  1. 目線コントロールシェイプキーをFaceEmoの除外シェイプキーに設定します。
  2. 目線を左右に動かすアニメーションと上下に動かすアニメーション、そしてそれらのシェイプキーを0にするアニメーションを作成する。
    1. 左右に動かす場合は0フレーム目をアバターから見て左向き、1フレーム目を右向きにする。
    2. 上下に動かす場合は0フレーム目を上向き、1フレーム目を下向きにする。
    3. 作ったアニメーションはInspectorからLoop Timeを切ること。
  3. Projectウィンドウで右クリック→Create→VRChat→AvatarsでExpression MenuとExpression Parametersをどちらも作成。Expression Menuはメインメニューと目線コントロール用で二個作り、一個目は名前を変えず、二個目はEyeControllにする。
  4. ParametersにEyeMoveLREyeMoveUDEyeMoveONを作成する。
    EyeMoveLRとEyeMoveUDはFloatでデフォルト0.5、EyeMoveONはboolでFalseにする。
  5. 名前を変えなかった方のExpressionMenuに以下の設定をする。
  6. EyeControllに以下の設定をする。
  7. Projectウィンドウで右クリック→Create→Animtation Controllerを作成する。名前はFXLayerにする。
  8. FXLayerのパラメーターに4で作ったパラメーターと同じものを設定する。
  9. FXLayerにEyeMoveLRレイヤーとEyeMoveUDレイヤーを作成する。忘れずに歯車をクリックし、Weightを1にすること。
  10. リセットアニメーションを追加し、次に視線コントロールアニメーションを追加。
    1. リセットアニメーションを右クリックしてMake Transitionで視線コントロールアニメーションに接続。
    2. 作られた線をクリックし、ConditionでEyeMoveONがTrueの場合視線コントロールアニメーションを追加。
    3. 視線コントロールアニメーションを右クリックしてMakeTransitionで視線コントロールアニメーションに接続。同様にConditionでMoveONがFalseの場合はリセットアニメーションに遷移するようにすること。
    4. これを左右分と上下分作成する。
  11. 視線コントロールアニメーションのMotion Timeに対応したパラメーターをセット。
  12. Avatar DescriptorのPlayableLayersにFXLayerを追加。ExpressionsにVRCExpressionsMenu、ParametersにVRCExpressionParametersを追加
  13. ToolsからGesture Manager Emulatorを追加してシーンを再生してテスト。

無事に動いていたら完成です。

動かない場合

  1. 除外シェイプキーに入ってるか確認してからFaceEmoPrefabを削除し、FaceEmoを再度適用する。
  2. パラメーターの名前や型が合っているか確認する。

揺れモノをセットアップする。

特に書くことないので意識していることだけ。

  • 長くない揺れモノはコライダーではなくLimitsで制限する。
  • コライダーは大きめに設定する。
  • 同ボーンを親とする揺れモノボーンは特別なことがなければ空のGameObjectを作成しその子にしてから揺れモノ設定をする。

これでとりあえずアバターをアップロードすることはできると思います。
ギミックとかは作るタイプではないので詳しい人にお願いします。

おすすめアバターギミック(無料)

Siromori Eye Pointer

VRChat内で簡単に視線の向きを設定できる。設定は簡単ではない。

SittingAdjuster

VRChat内で座ったときの位置を変更できる。助かる。

Constraint使う系のギミックが動かないとき

大体.animファイル内のボーンの階層の問題なので、

  1. .animファイルをVSCodeで開く
  2. Pathを書き換える
     
     でどうにかしてください。

おすすめエディター拡張

lilAvatarUtils

参考にした解説記事
 アバターに使用されているテクスチャのVRAMとかを見れるようになる。昨今のVRChatはVRAMの最適化が重要なので必須

Lightbox Viewer

様々な環境下でアバターがどう表示されるのか確認できる。

CopyComponentsByRegex

アバターをBlenderなどで編集して更新したい際に。

Avatar 3.0 Emulator
VRC Gesture Manager

VRChatを起動しなくてもギミックの動作確認がある程度できます。

(QuestTools使うと高確率でアバターぶっ壊れるのはなんでだろう……)

おまけ

BlendShapeNormalsはImportにしよう

BlendShapeNormalsはImportにしよう!!!!!!!!!!!!!!!!!!!!!!!!!!!!

間違ってもNoneやCalculateにしてはいけません。顔がぐっちゃぐちゃになります。

Quest対応について

QuestTools使うと何故かアバターが高確率でぶっ壊れるので全手動でやってます。今のところ遭遇したQuestやPico4単機勢には見えると評判。

意識するのは

  1. 見える場所以外は全部削除
  2. サブディビをPCより一部低くして出力
  3. 顔周りはポリゴン多め、それ以外は少なめ
  4. 裏面表示・透過表示はできないので適宜厚み付け使ったり諦めたりする

です。

左がPC。右がQuest。

PCは大体58000Tris、Questは30000Trisちょい超えです。それでもQuestで表示されるのでまぁまぁ。
 ランクはPCがMedium、QuestがOverPoorです。

QuestでPCと同じ挙動はできないと思ってるので、そこら辺も意識して諦めてます。必要なのは諦めの心。

FaceEmo使うとQuestとPCで同じ表情を見せられるのはいいですね。便利な世の中だぜ。

モデルだけ差し替えたい。

何度かモデルをインポートし直さなきゃいけない場面が出てきます。ボーンの調整とか。
 その場合はUnityを閉じてプロジェクトフォルダをファイルエクスプローラーで開き、モデルのfbxだけ差し替えます。
 その後何かしらの理由でコンポーネントだけ移植したいときはCopyComponentsByRegexを使うとめちゃくちゃ楽です。これがないともうやってけないぜ……

参考にしたサイト