VRCQuestToolsによるアバターのQuest対応 2025年01月
幸いなことに拙作VRCQuestToolsを各所で紹介いただくことがあるわけですが、どうしても典型的な手順の説明のみであることが多く(仕方のないことですが…)、具体的なアバター改変でどのように使われているか、他ツールとの相互運用性はあるのか、といったところまで踏み込んで説明されることはあまりありません。
これはVRCQuestToolsのドキュメントであっても、むしろツール単体のドキュメントであるがゆえに特に触れていない部分です。
結果的に、本来うまくいくはずのものがうまくいっていなかったり、無駄な手順が増えているような事例を見かけることがあります。
今回は、アバター改変の具体例と共にVRCQuestToolsによるQuest対応(Very Poor)の事例紹介をしてみたいと思います。
ベースとなるアバター
今回は説明用ということで、改変済みかつ、ある程度複雑度の高いアバターでQuest対応をします。
このアバターはPrefab Variant化されており、Assetsフォルダからシーンにドラッグ&ドロップで放り込むだけで改変の開始地点としてすぐに利用できるようになっています。
ちなみに、Prefab Variantを使用したアバター改変プロジェクトの運用については過去に記事を書いているので、興味があればそちらを参照してみてください。
基本構成
以下のモデルのキメラアバターです。
Prefab VariantおよびMaterial Variantを使用することで元データを活かしつつ、MAにより非破壊で組み立てます。キメラとは書きましたが、やっていることは髪型移植なのでそれほどでもないですね。
また、MA Merge Animator等を使用し、髪のロング/ショートを切り替えられるように髪Prefab Variantに対して機能追加をしてあります。
改変手順の詳細はこの記事の本題ではないため割愛します。
使用ツール
MAの他、表に見えない機能として以下の非破壊ツールを使用しています。
表情改変: FaceEmo
シェイプキー追加: MMDSetup (Make It MMDでもよい)
明るさ調整など: Light Limit Changer for MA v2
Unity Constraintsの自動変換: MA Convert Constraints
自動最適化: Avatar Optimizer (AAO Trace And Optimize)
改変の内容
先月は年末でしたから、例年通り振袖改変をしました。
ベースアバターと同じく改変手順そのものは割愛しますが、改変にあたり以下の非破壊コンポーネントを追加しています。
素体メッシュのはみ出し部分の削除: AAO Remove Mesh By Mask
下駄の分の高さ調整: Floor Adjuster
既存Expression Parameterのデフォルト値の上書き: MA Parameters
さて、ここまでが前置きです。この改変アバターをQuest対応(Very Poor)にしていきます。
Quest対応の設定
手順の説明はすでにたくさんに記事があるので省略し、この記事では要点のみ説明します。
PhysBoneの設定
PBは8個までしか使用できないので、大量のPBから減らすものを選ぶのは非常に困難です。一度すべて解除し、絶対に必要なものだけに絞って選ぶと決めやすいです。
いわゆる海苔の対策
顔のメッシュであるGameObjectにAAO Remove Mesh By BlendShapeを追加し、頬染め用や青ざめ用のシェイプキーで動くメッシュを削除します。
この方法であればPCとQuestで同じ表情アニメーションを使用できるためアニメーションの管理の手間が減り、FaceEmoの設定をPCとQuestで共用できます。
ただし、このままではPC向けにアップロードしたときにもメッシュが削除されて表現力が下がってしまいます。
そこで、さらに顔メッシュにVQT Platform Component Removerを追加し「Remove Mesh By Blend Shape - PC」のチェックを外します。
これによって、PCビルドではRemove Mesh By BlendShapeが消去され、Androidビルドのときにだけメッシュ削除が行われるようになります。
要するにこの記事でやっていることです。
説明の都合上このセクションで設定をしましたが、実際にはベースアバターの時点でコンポーネントを追加してPrefab Variantに組み込んであり、毎回設定する手間を省いています。
Questで使用しない機能の削除
ショールにはlilToonのファー機能が使われており、Questでの再現はできません。また、通常のシェーダーでは構造が破綻してしまうので、なくすことにします。
そこで、ショールにVQT Platform GameObject Removerを使い、Androidビルドではオブジェクト自体を削除してしまいます。ついでに、パーティクルも使用しないのでこれもVQT Platform GameObject Removerで消します。
なおオブジェクトは削除しますが、表示/非表示のギミックを作動させるためのコンポーネントやExpression Parameterを削除してはいけません。同期ずれを引き起こします。
また、可能な限りPCとQuestでアバターの構成は一致させるようにしましょう。Quest向けにはギミックや着替えを外して軽くしようなどと欲をかいてテキトーにいじると失敗します。
ポリゴン数の削減
しません。
もちろん、PC基準で見ても非常識なポリゴン数であれば(PCでも)ポリゴン数を削減しましょう。
Poor(2万ポリゴン以内)に収まらないのであれば、多少ポリゴンを削ったところで誤差ですし、機能的なメリットも特にありません。(減らした分だけ負荷が減るのは間違いないので無駄とまでは言いませんが…)
もし描画負荷を気にするのであれば、メッシュ結合やマテリアル結合によるドローコール削減を先に気にするべきです。今やAAOとTTT AtlasTextureのおかげで非常に簡単になりました。
動作テスト
一通りQuest向けの設定が済んだので、動作確認をします。
非破壊的な変換とローカルテスト
今回はMAをはじめ多数の非破壊ツールを使用しました。これらはNDMFという共通基盤の上に成立しており、VRCQuestToolsも対応しています。
非破壊的に変換をすることで他のツールと適用順を自動調整することができるので、複雑な機構もそのままQuest向けに変換しやすくなっています。
また、シーン上には変換前のアバターだけを置けばよくなるのでシーン管理がしやすくなります。
手順自体はドキュメントに記載しているため省略しますが、ローカルテストを使用することでQuest実機でのテストを省いています。
アップロード
動作テストが完了したら、Unityのプラットフォーム設定をAndroidに切り替えて非破壊でアップロードします。手順は動作テストと同じくドキュメントを参照してください。
アバターのダウンロードサイズが10MBを超えてしまいました。アップロードを成功させるために、今度はこれを減らしていきます。
アバター容量の削減
アバターの容量(サイズ)に関してテクスチャサイズが大きく影響することはよく知られていますが、実のところメッシュ自体もかなり影響があります。むしろメッシュの方が影響が大きいかもしれません。
特にシェイプキーの多いメッシュで顕著で、これだけで何MBもの非圧縮サイズを使用します。非圧縮サイズ40MB/ダウンロードサイズ10MBの制限があるQuestアバターでは無視できない大きさです。
アバターの容量を減らすと言うととにかくテクスチャの解像度を減らせと言われがちですが、テクスチャの解像度はアバターの見映えに直結するので、テクスチャの解像度を減らすのは最終手段とします。使わないシェイプキーのように他に削れるものがないかを先に検討しましょう。
今回はAAO Trace And Optimizeを導入済みのため、メッシュに由来するアバター容量の無駄は概ね削減されていると仮定することができます。
ということは、テクスチャ容量の削減に手を出すしかありません。
テクスチャ容量の削減
VQT Avatar Converter Settingsではマテリアル変換時のテクスチャ解像度を指定できますが、基本的には一括で解像度が変更されます。しかし今回はあと0.75MB削ればよいだけなのに、すべての解像度を半分にしてしまうのはやりすぎです。特に今回は着物の改変で柄が大事ですから、これ以上解像度を下げるのは避けたいです。
どうにか全体的な解像度を保ったまま容量を減らせないでしょうか?
そこでTexTransToolのTTT AtlasTextureを使用することにします。多少解像度を下げても問題ないテクスチャをひとまとめにして解像度を下げることで、全体的な解像度を下げずに容量を削減します。
概ね以下の基準で結合するマテリアルを選定していきます。
足元(注視する機会が少ない):下駄、足袋
面積が少ない部分:フリル、ハンドバッグ
RGBA Compressed ASTC 6x6では1024x1024のテクスチャ1枚で非圧縮サイズが0.6MBあります。今回は1024x1024のテクスチャ4枚を結合して解像度を1024x1024にしていますから、テクスチャ3枚分:1.8MBの非圧縮サイズが削減されます。これだけ減らせばダウンロードサイズも0.75MB以上減ることが期待できます。
以上がQuest対応までの一連の作業内容でした。PC向けにはフル機能を搭載し、Quest向けには機能を縮小した改変アバターを作成できました。
おわりに
この記事では具体的な改変アバターを題材にして、VRCQuestToolsによるQuest対応の一連の作業例を紹介しました。
NDMFを使った非破壊的な変換により、他の非破壊ツールとの組み合わせを考慮した上で変換をすることができるようになっています。また、工程内でマニュアルベイクを挟まないのでシーン内に置かれるアバターは一つのみになり、管理がしやすくなっています。
あくまでも一例にすぎませんが、何らか参考になれば幸いです。