自作3DアバターをVRChatにアップロードしたときの備忘録

VRChat

これはいわゆるメモです。

内容について責任は持てませんし、バージョンが変われば直ることもあれば悪化することもあるかもしれません。
が、誰かの役に立ったら嬉しいな。

使用環境:Blender 3.6 (LTS)、Unity 2022.3.6f1、VRChat Creator Companion 2.2.4

※たまに更新されます

FBXをHumanoidの設定でUnityにインポートしたのに、VRChatにアップロードすると非Humanoidとして扱われる

  • FBXをインポートしたとき、Rigの設定で警告出てない?
  • ボーンの設定がおかしいとか、ボーンが足りないとかあるのでBlender側でなんとかする
  • アップロードするよりも前に、VRC Avatar Descriptorにnon Humanoidみたいな表示が出ていた気がするので、その時点でやり直すべきだと思うの

アバターをアップロードしようとしたらボーンが足りないみたいなこと言われた

  • 足りないって言われてるならそれはつまり足りないってことですよね
  • Unity的にはHumanoidのRigでOptionalとなっていても、VRChat的には必須とされているボーンがある。Neckとか…
  • ウワサによると、VRChatでは以下のボーンが必須
    • Head (あたま)
    • Neck (くび)
    • Chest (むね (バストではない))
    • Shoulder (L/R) (かた)
    • Upper Arm (L/R) (じょうわん)
    • Lower Arm (L/R) (ぜんわん)
    • Hand (L/R) (て)
    • Spine (せぼね)
    • Hips (しり)
    • Upper Leg (L/R) (ふともも)
    • Lower Leg (L/R) (すね)
    • Foot (L/R) (あし)
  • 実はボーンが存在してちゃんと接続されていればOKのようなので、使わない部位はウェイトを持たせないようにすれば、腕や脚が見た目上存在しないモデルも作れるはず (実際にHandは存在しているけど使ってないモデルを作った)
  • でもHandやFootはオブジェクトを触るときや床に乗るときの基準になりそうなので、ちゃんとしたところにつけておいた方が無難

ボーンが足りない箇所にボーンを追加したいけどどうやれば…

  • すでにボーンがあるならば、ボーンを選択して細分化すれば分割できる
  • ボーンの名称や、頂点グループが設定されているのなら、その再設定を忘れずに
  • ちゃんと動くかポーズモードで確認するとよい

Blenderではちゃんと描画されているのに、UnityやVRChat上ではきちんと描画されないメッシュがある

  • もしかしてメッシュが裏返ってない?
  • Blenderでオーバーレイメニューから「面の向き」にチェックを入れると、表向きは青、裏向きは赤で表示されるので、そこで確認できる
  • 該当のメッシュが赤くなっている場合は、編集モードで該当のメッシュを選択し、「メッシュ」→「ノーマル」→「反転」を選ぶと直せる

ウェイトの指定が抜けてるぞみたいなこと言われた

  • どういう条件か分からないけど、ウェイトが乗っているべきメッシュにウェイトが乗っていないと怒ってくれるみたい
  • 腕とかいろんな部位を動かしたとき、頂点グループが設定されていないと、そこだけその場に置いていかれるので崩れてしまう
  • 自分の場合だと、頂点グループを設定するとき、透過表示にするのを忘れて範囲選択したときなどに起こりがち
  • Blenderでポーズモードにして、警告のあった部位を動かしてみて、動いてない部位がないか確認して、正しい頂点グループを設定してあげればよい
  • それでもどこなのかわからなければ、いちどアップロードしてみて、自分で動いてみるといいかも

アバターをVRChatにアップロードしたら、身長の表示は正しいのに、東京スカイツリーみたいな天まで届く描画がされてしまう

  • たぶんスケールがおかしい
  • BlenderでFBXをエクスポートする際、”トランスフォーム”→”スケールを適用”を「すべてFBX」にすると解決する
  • BlenderからFBXをエクスポートする手順を載せているサイト/ブログによって、この辺の項目が異なっていたりすることがあるので、できる限り最新または自分の環境に合っている情報を採用しよう

アバターをVRChatにアップロードしたら、顔が真上を向いていたりと身体の方向があちこちおかしい

  • どうやらBlenderとUnityで座標軸の扱いが違う事から発生する互換性の問題らしい
  • Unity側でメッシュを選択した際に、回転に90に近い数値が入っていたら影響を受けている
  • BlenderでFBXをエクスポートする際、”トランスフォーム”→”トランスフォームを適用”をオンにすると解決する
  • ただし、”トランスフォームを適用”は実験的な機能のため、アーマチュアやアニメーションが壊れることがあるらしい。そうなってしまった場合は”トランスフォームを適用”をせず、あらかじめBlender内でモデルを回転させておくといいらしい。手順はよそのサイト見てね

アバターをVRChat (VRモード) で見たときに、腕の方向が実際に伸ばしている方向と違う/前ならえしてるみたいになってしまう

  • View Positionの設定がおかしいと思われる
  • VRChatは腕の長さから相対的に視点の位置を推定しているらしく、そこからズレた位置にView Positionがあると、腕(というか肩?)の位置がその分だけズレてしまうというウワサがある。そのズレた位置からコントローラーの位置で腕のポーズを推定するため、前ならえしてるみたいになってしまうみたい
  • なので多分、前後位置が合っているけど高すぎる/低すぎる場合はバンザイになったり気をつけになったりしそう。もし前ならえに角度がついているのなら、その分だけView Posotionの高さも気にした方がよさそう
  • View Positionは目と目の間に設定するのが望ましいらしいが、それは人間アバターだけのおはなし。手足が短い、頭でっかちのマスコットや動物などのアバターでは、顔の内側や口の奥あたりに設定するとうまくいくケースが多いみたい。「手の長さに対して、標準的な人間だったらどこに顔があるかな?」を想像しながら置いてみるといいかも
  • Face Mirrorや表情加工のワールドギミックはまともに使えなくなるのであきらめよう

View Positionを頭の中に設定したら、頭の中に仕込んでいる口とか表情とかが見えてしまう

  • 頭に位置する箇所のボーンの名称が「Head」以外だと発生するらしい
  • VRChatは、視界の妨げにならないように、自分自身のHeadボーンと、そこにぶら下がっているGame Objectのサイズが、自分からの視点だけゼロになる仕様がある。
    けれど、名前が「Head」以外だとその仕様がうまく効かずに頭とその下にぶら下がる要素が見えてしまう

なんかうまくリップシンクしてくれない

  • リップシンクに使用しているAnimation、もしかしてハンドジェスチャで変わる表情でも使用してない?
  • リップシンクで使用するAnimationは、ハンドジェスチャ等に流用すると、リップシンクが動かなくなる仕様がある。
  • ハンドジェスチャにリップシンクと同じシェイプキーを使用したい場合は、リップシンクで使用しているAnimationを複製して、それを使うようにすればいい
  • 間違えないように、リップシンク用のAnimationはそうだとわかる名称にしておくといいね

Phys Boneを設定したマントやらスカートやらが貫通しちゃうよ~

  • 貫通してしまう相手にPhys Bone Colliderをつけるとよい
  • Phys Bone Colliderをつけてもうまくいかないときは、Phys Bone Colliderの形をSphere以外の形にする (CapsuleとかPlaneとか) にしてみるとか、Phys BoneのほうのRadiusを少し増やしてみるとかするといいみたい

Phys Boneの動作確認は毎回VRChatにアップロードしなくちゃいけないの?

  • Unityで再生ボタンを押し、Scene画面でアバターのルートを選び、表示される三色の矢印を動かしたり青い四角を掴んでぶんぶんすれば確かめられる。特にマントやスカートが貫通しないかどうか確かめるのに便利。
  • 再生ボタンを押すと自動的にGame画面になってしまうので、その都度Scene画面に戻して試そう
  • 終わったら再生ボタンをもう一度押すと元のモードに戻る。その際、動かしたモデルも最初の位置に戻るので、遠慮無く振り回して動作を確認しよう

Androidでも揺れものを設定したいけど、PhysBoneは4つまでってキツくない?

  • PhysBoneは揺らしたい場所の根元のボーンに設定するものなので、揺らしたいものが複数あるのなら、共通の親を追加して、そいつにPhysBoneを設定すると節約できる
  • でも子が多すぎるとそれはそれで別の制限があるので、あまりたくさんボーンを置かないのが吉

小物を持たせたいけど、Androidだと2つ持たせただけで、問答無用でPoorになってしまう

  • メッシュが別 (マテリアルが別) のオブジェクトが複数あると、すぐにMediumとかPoorとかになってしまう
  • 別のメッシュ(オブジェクト)ではなく、シェイプキーでアイテムのメッシュを拡大縮小して、まるで物を持っているように見せかける手法がとても有効 (マテリアルを統合したりする必要があるのでわりと面倒だけど)

アップロードしたアバターがどうなっているのか、いろんな視点や動きでテストがしたい

  • 協力してくれるフレンドがいるなら頼んでみるべし
  • アバターテスト用ワールドを使うのもアリ。自分はAvatar Testing Chamberを使用している。身長計、前後左右のカメラ、照明、落下モーション、ゴースト(?)、ダンスなどひととおり揃ってる。

アバターをFallback対応にしたいなぁ

  • Fallback対応にするには、Androidから見たときに、アバターのパフォーマンスランクが「Excellent」あるいは「Good」である必要がある
  • 詳しい条件は調べてみてほしいけれど、Goodになる条件はおおむね以下のような感じ
    • ポリゴン数:10,000以下
    • Skinned Mesh / Basic Mesh / Materials / Animators:1
    • ボーン:90以下
    • Phys Bone:4以下
    • Phys Bone Transform:16以下
    • Phys Bone Collider:4以下
    • Phys Bone Collision Check Count:16以下
  • 雑に言えば、ポリゴン数少なめで、別オブジェクトなし、複数マテリアルもなし、ボーンも余計なものを入れず、揺れ物も最低限にしましょうねって感じ。けっこうきびしめ。ギミックを仕込もうとか考えない方がいい…。

おしまい

コメント

タイトルとURLをコピーしました