Quest/iOS対応までやってみるVRChatアバター改変
Unityと仲良くなるためのおまじない・Quest,iOS対応をしてやさしいせかいにする
目次
はじめに
- 書いた人:(u_)たかなし(@u_takanashi_VRC
- お問い合わせはわかる範囲で回答します
- ツールごとのくわしい使い方は配布サイトなどを参照(ここで適当なことを言ってもいけないので)
- 主にQuest対応時の気をつける場所がメイン
前提条件
環境
- Unityと和解しようとする心
- Macbook Pro (M1Pro 2021)
- Harmony Patches for Apple Silicon native & Rosettaのインポートと備考に記載のコトを読み飛ばせばWindowsでも対応できます。
- ALCOM + Unity 2022.3.22f1
- UnityにはWindows・Android・iOS build環境を組んでおく
- 自環境のWindows版Unity Hubからだと2022.3.22f1用のiOSビルド環境が組めなかったので下記ページのComponent installers→Windowsを開き、iOS Build Supportをダウンロードしてインストールした
- https://unity.com/releases/editor/whats-new/2022.3.22f1#installers
- そうしないとiOS対応までできない、後述しますが改変目的の人はiOS対応までユーザー側でしてあげると「やさしいせかい」になります
- 自環境のWindows版Unity Hubからだと2022.3.22f1用のiOSビルド環境が組めなかったので下記ページのComponent installers→Windowsを開き、iOS Build Supportをダウンロードしてインストールした
- UnityにはWindows・Android・iOS build環境を組んでおく
プロジェクトに入れるもの(ALCOMのパッケージ管理もしくはUnityにImportする)
| 概要 | パッケージ | 備考 | 場所 |
|---|---|---|---|
| Apple silicon Macで作業するなら前提 | Harmony Patches for Apple Silicon native & Rosetta | (無いとMetal環境でHarmonyがうごかん、これで動くけど一部シェーダーはマテリアルエラーになる(アップロードすると戻るので作業中は我慢)) | ALCOMへプリロード済 |
| シェーダー | liltoon | アバター・各種アセットに応じて、ここではしなのちゃん必須のもの | https://lilxyzw.github.io/lilToon/ |
| モジュール支援 | Modular Avatar | 対応アバター&アセットならポン付けでいい感じに動かしてくれるスグレモノ | https://modular-avatar.nadena.dev/ja |
| Quest対応支援 | VRCQuestTools | Windows向けだけなら要らないけどどうせならQuest対応しましょ | https://kurotu.github.io/VRCQuestTools/ja/ |
| Quest対応支援 | AAO: Avatar Optimizer | 同上 | https://vpm.anatawa12.com/avatar-optimizer/ja/ |
| Quest対応支援 | lilAvatarUtils | これ基本的には不要かも、入れてても悪さはしませんので必要に応じて | liltoonに内包 |
| 動作確認支援 | gesture manager | ジェスチャーなどのVRC動作をUnity上で再現するためのツール(UnityのPlay機能の上位互換) | ALCOMへプリロード済 |
| PC向け非破壊軽量化 | LAC Texture Compressor | PC版はこれで気持ち軽くしておいた方がいいと思う | https://lac.limitex.dev/ja/docs/installation/ |
| メッシュ軽量化 | Meshia Mesh Simplification | モバイル対応で無理やりPoorなどにする場合の最終手段なので基本なくていい、手順も割愛 | https://ramtype0.github.io/Meshia.MeshSimplification/index.html |
Windows向け手順
- ALCOMで「プロジェクトを作成」を押下して新規作成
- パッケージ管理画面が表示されるのでプロジェクトに入れるもの(ALCOMのパッケージ管理もしくはUnityにImportする) を参考に最新版をインストールする
- LAC Texture Compressorはパッケージ追加時点だと「Avatar Compressor」という名前になっているはず、URLがlimitex.devになっているもの
- Unityを開く
-
アバターのunitypackageをダブルクリックで開いてUnityへImport
- Assetsからアバターのprefabを選らんでhierarchyにドラッグ&ドロップ
- Cmd+S(Win:Control+S)を押下してシーンを保存しておく
- 改変するところは改変する(改変方法は販売ページや他参照)
- LAC Texture Compressorをアバター本体にコンポーネント追加して設定(クソ重い以外はHigh qualityでいい)
- メニューのVRChat SDKからShow Control Panelを押下してWindows向けアップロード
Quest・iOS対応手順
- Windows向け手順で作成した完成版のプロジェクトをALCOM上で複製
- ファイル名はWindows向けの後ろに「_Quest」とかを付けるといいかんじ
- 軽い改変であれば非破壊で変換できるので複製する必要はないが、Quest対応で破壊作業や一部削ったりする必要が出てくる可能性があるので安全のためWindows向けとは別のプロジェクトで管理した方が無難
- 前提条件のQuest対応支援パッケージをプロジェクトへ追加していない場合はここで追加
- Unityを開く
- AAO Trace And Optimizeをアバター本体にコンポーネント追加して設定
- 入れるだけで勝手に動いてくれます
- LAC Texture Compressorはここで消しておく
- Unityのメニューバーからツール→VRCQuestTools→Convert Avatar for Androidを起動
- 起動してコンバーターの設定を開こうとすると警告がでます
- 英語表示になっている場合はLanguageで日本語にすると見やすい
- マテリアル変換設定から最大テクスチャサイズをとりあえず512へ
- 容量オーバーしてしまう場合はマテリアル変換設定から圧縮形式を ASTC8×8へ
- Avater DinamicsはPhysBones欄の全てを一旦選択解除し、最大8個の制限内で選択しなおす。
- 個人的最適解(ご参考までに)
- デフォしなのちゃんの場合のたかなし流設定
- 非破壊的に変換するを押下
- VRChatSDKを開いてくださいと言われるので従う
- VRChatSDKのアップローダーでbuildをAndroidへ変更し、Unityにビルド準備してもらう
- ここではbuild設定の変更のみ!アップロードはもう少しあとで
- NoriBlockerをboothから導入、インポートしてアバターの一番下へ挿入
- せっかくのお気に入り子をQuest/iOSからも綺麗に見れるようになるので絶対やった方がいい…
- メガネなどレンズ系でシェーダーが別途使われている場合はそのシェーダーをVRChat/Mobile/Particles/Multiplyへ修正
- アクセサリーなど金属表現のシェーダーが別途使われてる場合はそのシェーダーをVRChat/Mobile/Standard Liteへ修正
- gesture managerから動作確認(主に8で対策した表情・9および10で変更したシェーダーの部分)
-
動作確認時の操作イメージ
赤くなる海苔現象解消っぽい、やったー pic.twitter.com/u3et4PX9Mt
— (u_)たかなし (@u_takanashi_VRC) February 22, 2026
-
- とりあえずVRCQuestTools経由でAndroid向けにアップロードしてみる
- 上記9の手順がうまく行ったらVRChatSDKのアップローダーでbuildをiOSへ変更し、ビルド準備してもらった上でアップロード
-
Android向けアップロードでiOSへ自動変換が機能することを確認した。
が、どうやら自動変換は意図しない見た目・挙動になる気がするので余裕があればiOSビルドも行った方がいい。
-
参考
- パフォーマンスランクの基準(公式ドキュメント)
- レンダーキューについて
Blueprint IDについて
- ベースのモデル(ギミックだけ入れたテンプレートなど)を作成し、プロジェクトコピーで作業する場合はBlueprint IDの新規発行が必要
- そうしないとベースモデルで1回でもアップロードしていた場合、そいつが上書きされちゃう
- アバター本体のinspectorにPipeline ManagerがあるのでそこのBlueprint IDにIDが入っていればDetach (Optional)を押下してデタッチしてやる
- 逆にQuest対応とかで紐付けが必要な場合はAttach(Optional)をする必要がある
- プロジェクト複製のやり方なら紐付けは維持されているはずなので考えなくていいと思う
- 逆にQuest対応とかで紐付けが必要な場合はAttach(Optional)をする必要がある