🍣

2024年5月時点 VRChat Avatar Upload環境memo

2024/05/04に公開

Zenn 執筆環境構築のテスト記事も兼ねてアバター導入環境について言及。多分もっと丁寧な記事があると思うので備忘録程度。

必要な環境とその手順

  • VRChat アカウント
    • VRChat には Trust Rank という概念があり、作りたてのアカウントでは Visitor となっている
    • やり込んでRankを上げるか、課金することで New User以上の権限を持つアカウントになることでUpload可能

      The transition between “Visitor” and “New User” is a special one — when a Visitor becomes a New User, they gain the ability to upload content to VRChat as long as they’re using a VRChat account. Users receive a notification when they have passed this rank, and are directed to the VRChat documentation page to get started with creating content.

  • Unity Hub
    • Unityは複数バージョンを共存させることがあり、これの管理に(?)Unity Hubを使用する
    • Unity.com からDLしてセットアップしておく、また起動後アカウントやライセンス認証を求められる場合はUnityのアカウントも取得しておく
  • Unity 2022.3.6f1
    • VRChat公式によるとこのバージョンが推奨のため、 Unity Hub導入後にVRChatの現時点での最新バージョンをいれる
    • (筆者は2019を使ったことあるが2022が初なのでせっかくなので本記事を書き残す)

      The current Unity version used by VRChat is 2022.3.6f1.
      If you have Unity Hub installed, you can click this link to install the correct version of Unity. 2022.3.6f1 is also available in the Unity editor release archive.

  • VRChat Creator Companion (VCC)
    • VRChat が Unity 向けに提供しているAvatar, World向けのSDKなどを手軽に導入・管理(?)するためのツール
    • VRChatアカウント取得後なら https://vrchat.com/home/download からDLできる
  • (VCC 代替) ALCOM
    • anatawa12 さんが作成しているVCC互換ツール。 vrc-get/vrc-get - GitHub のGUI FrontEnd
    • 使ってみた感じ本家よりかなり高速で快適に使用できているので、オススメしたい。以後の説明でVCCを使い箇所はALCOMで読み替え可
    • https://vrc-get.anatawa12.com/alcom/ からDL可能
  • 何らかの画像エディタ
    • アバターの改変用。筆者はクリスタ常用 (だが、どちらかといえばPSD同梱してくださる方が多い印象)

Avatar Projectで毎回使っているライブラリ群

VRChat公式が用意しているSDKの他に、Shaderを始め付随して使用することで改変がやりやすくなったりリッチな見た目にできたりというものがある。
2024年現在ではBoothで販売されている多くのアセットも依存関係を持っており、以下ツールはほぼ必須と考えている。(開発ありがとうございます)

ライブラリの導入にはUnity Package形式(.unitypackage)をプロジェクトに展開してインストールする方法と、VCCにライブラリのURL (VPM) を事前登録しておいて都度最新を取得する方法がある。
後者の手順が提供されている場合、基本そちらを利用する方を強く推奨する。
アップデートが容易に行える、依存関係のあるバージョン解決などVCCを使ったプロジェクト管理をある程度やったときにメリットが見えてくると思われる。

Boothで提供される有償アセットなどはどうしても前者になってしまうがこれは仕方ない。
注意としてVCCを使って導入したライブラリ群をUnity Packageで再度導入しない方が良い。 UnityPackageを開いたときに新規追加・変更されるファイル一覧が出る時に確認した方が良い。

  • lilToon
    • アバター向けのシェーダー。他にもいくつかあるが使いやすく最近はこれを前提にしているものが多い。 VCCのボタンから追加できる
  • lilAvatarUtils
    • lilToon作者の lilxyzw さんが提供されているUtility。アバターに使用している画像一覧とそのサイズを表示したり、Fallback(軽量表示時)の見た目を確認したりできる
    • lilToon導入時に lilxyzw さんの VPM repoを登録済なら VCCから導入可
  • MA: Modular Avatar
    • 改変したことがないとピンとこないかもしれないが、髪型・衣装などの変更を簡単に行うことができるツール
MA以前は?
  • (専門ではないのでざっくりした説明になるが) アバターの各部位や衣装などのメッシュをボーンに追従して動かすためには、メッシュの各頂点がどのボーンに対しどの程度連動して動くか、という情報を持っている
    • アバター自作などでよく聞くウェイトペイント (のうち、Humanoid Boneへの追従を塗る場合) がこの設定であり、ウェイト=0 無関係、ウェイト=1 完全追従 といった具合
  • 厄介なのが、アバターの素体も衣装も同じHumanoid のBone構成に追従して動くが、もとのアバターのウェイト追従先Boneと改変用の衣装のウェイト追従先Boneが異なるObjectになっている
    • 衣装製作者がアバター自体の素体を同梱しないと回避不能で、この手順は販売観点では難しそう (他人が作成された有償アセットの一部ないし全部を自身のアセットに組み込むことになる)
  • Modular AvatarはUnity上でPlay時、Upload時にこの同じBone構成になっているObject同士を合成してくれるので、着せたり脱がせたりが容易にできるようになる
    • もとのアバターのBone構造の各Objectの直下に、着せたい衣装などのBone Objectを突っ込む(Objectが親子になっていれば親追従)ことで解決していた様子
      • この方式では特に着せた衣装を剥がすのが大変になる。Prefab Variant使いこなしていればうまいことできる気もするが筆者は余り実績なし
      • 別案としてはBlenderでやる方法など。Unity外なのでBlender自身をある程度使える状態でないと敷居は高いかも
    • Modular AvatarはBone構造の合成以外にも便利機能を用意している。また、Play/Upload時の処理フローを Non-Destructive Modular Framework で提供しており、ツール間の干渉も考慮して設計されていて大変ありがたい
  • 上記の説明ではSkinned Mesh RendererとBoneの関係性に触れたが、AnimationやExpressionParameterなども同様にアバターと改変衣装の合成が必要。ますます剥がすのが大変になる...
  • AAO: Avatar Optimizer
    • アバター軽量化のためのUtility群。Unity上で頂点を消したりオブジェクトを合成したりなどはできないことはないが非破壊で行えるというのはかなり魅力的
      • 服で見えなくなる頂点を消す、使われていないBoneを消す、不要なBlendShapeを消す、PBをまとめる...など
      • 手軽で非破壊なのでとても使いやすい。特に Trace And Optimize, Remove Mesh By BlendShape はよくお世話になっています
軽量化は必要?
  • やらなくても動きはするが、同じワールドにいる人にリソースを多く消費させることになるので、可能なら軽量化対策はやった方が良さそう
    • もし軽量化が難しいのであれば、大勢が集まるイベントをはじめとした環境には余り持ち出さないなどを検討した方が良い
    • もちろん重たいアバターを非表示にするような自衛する仕組みはあるが、全員が使いこなせているとは限らないので
  • anatawa12's gist pack for Unity
    • AAO作者のanatawa12さんが公開されているツール群。
    • MA,AAO実行後のPerformance Rank確認のために Actual Performance Window を使用している
      • VRChat SDK公式はMA,AAOなどを実行前の状態でパフォーマンスランクを計算している様子
  • FaceEmo
    • アバターの表情を簡単に作成できるツール。表情はBlendShapeを変更するAnimationClipを作り再生するという手順を何らかのトリガ(e.g. ハンドサイン)で行うという地味に手順が多い
    • FaceEmoではトリガの設定、表情のプレビュー、撮影用に表情を固定するなど、Unity特有の部分を隠蔽してくれる
  • VRChat Gesture Manager
    • Unity上でアバターの見た目や挙動を確認するツール。表情やアニメーションなどの動作確認のために毎回VRChatを起動しなくて良くなる

Project作成からUploadまで

細かいコンポーネントの使い方は先述の公式documentにまとめてくださっているのでそちらを見るか、他記事などを参照すると良さそう。

  • VCC起動してProject作成
  • 使用するライブラリをVCCから追加
    • VRChat SDK - Base
    • VRChat SDK - Avatars
    • 先述のライブラリ
  • Unityで開く
  • Unityで購入したアバター、衣装などのUnity Package群
    • VCCで導入したものは飛ばすこと。よくある例としてはShaderが同梱されるケースが有る
  • 以後はアバターや衣装の導入手順に従う。以下は例
    • 素体Prefabか衣装を着ているdefault PrefabをScene上に配置
    • 毎回最初にやっている
      • Tools > Gesture Manager EmulatorでPlay時にGesture Managerを使えるようにする(Scene中にObject追加され、そこで操作可能)
      • AAO Trace and OptimizeをObject Rootに追加
        • 軽量化目的
      • MA Mesh SettingsをObject Rootに追加、両方のTargetをHipsに設定
        • Anchor Override, Bounds設定用
        • 明るさの計算位置を統一、またCulling (視界外と判定して描画Skipする)範囲を統一
          • 既存のMesh ObjectがどこにAnchor Overrideを向けているかで変えることもある
      • Tools > anatawa12's gist selectorでActualPerformanceWindowを追加
        • Play時に (MA, AAO実行後状態の) Performance Rankが表示されるようになる
    • 衣装を着せる
      • 衣装PrefabをScene上に配置
      • 衣装PrefabのObjectを素体PrefabのObject直下にいれる
      • 右クリック Modular Avatar > Setup Outfit
        • MA Mesh Settings設定は、"毎回やっている" のMesh settingが追加済なら継承。そうでないならHipsあたりに
      • 素体Object、衣装Objectが重なって見えなくなる部分をAAO Remove Mesh by XXX (よく使うのはBlendShape)で消えるように設定
    • 髪型を変える
      • 元の髪型がある場合、LayerをEditor Only、IsActive=false (上部チェックボックスを外して非表示にする)
        • Scene上の非表示≠Avatarに同梱しない、となっている (Animationから表示非表示切り替えられる)ため、Editor Only指定で生成物から除外
        • もしくは金輪際使わないMeshであればScene上から削除する (Unpackされていないと無理かも? 余りやらないので詳細不明)
      • 着せ替えたい髪のPrefabをSceneに追加。素体Prefab直下に移動、髪のObjectを選択肢Add Componentで MA Bone Proxy, MA Mesh Settingを追加
      • MA Bone ProxyでターゲットをHeadに(Play時に頭直下に追従させる)、Mesh settingのAnchor Override, Boundsを継承、もしくはHipsあたりに合わせる
    • 色改変等
      • Avatarに使われているMeshのMaterial上でパラメータ調整、もしくは元画像を編集するか
    • 毎回最後にやっている
      • Window > _lil > AvatarUtils から lilAvatarUtilsを表示
      • Texturesで使われているテクスチャ一覧で色改変前後がダブっていそうなものや、不用意に解像度が高いものを調整
      • Lightingで明るさ表示が変になっていないものがないか確認、またSafety Onにして表示が変にならないことを確認
        • 変になっている場合、Materialsから使われているMaterialを順に確認し、基本設定 > VRChat > Custom Safety Fallbackを設定
          • 負荷対策などでShaderをデフォルトに戻された場合の表示結果。ある程度パラメータを明示できる
          • 自分の好みは、 顔・体・衣装などは Unlit Opaque、無理に表示しなくて良いものはHiddenに設定
            • 改変したのに色がもとに戻る場合、Shaderのパラメータでのみ色変更されているなどが考えられる
              • 気になるなら焼き込みしてテクスチャとして色が変わった状態の画像を参照する状態にしておく
    • Upload
      • VRChat SDK > Show Control PanelでUpload用のツールを表示。ログイン画面ではログインしておく
      • Avatar Infoで名前や説明を記載、 Visibilityはアバターによるが、基本有償アセットであればPrivateに設定
      • Thumbnailはどんなアバターなのか分かる写真を取っておく。今のScene表示をそのまま撮影できる
      • Build & TestでUpload前にローカルテストできる。VRChat起動後Avatar一覧のOtherにいる(おそらく他人には見えない)
      • 問題なければOnline Publishingのチェックを入れて同意後、Upload
    • その他
      • Avatar Projectをgit管理する場合、以下考慮したほうが良い
        • .gitignoreで中間生成物を始め不要なものをstagingしないようにする
        • 有償アセットを公開しないようにすること(repoがPublicだと公開されてしまう)
        • でかいファイルをそのままstagingするとpushできなくなるので対策もしくは追加対象から除外する
          • 改変用PSDがとても大きなファイルだったりする

だいぶ走り書きしたが、だいたいこんな感じでうまくいくと思われる。

GitHubで編集を提案

Discussion