VRChatのworldをquest対応
quest対応world
VRChatはパソコンとoculus questの二種類の機材で遊ぶことができます。ハードウェア性能の違いで、quest対応のワールドやアバターは見映えでどうしてもPC向けのものに及ばなくなりがちなのですが……最近はquest対応していても見映えする3Dモデルが増えてきました。そしてこんなイベントも。
参加して先達の話を聞いてきました。
というわけで次は実践です。
できました! 『人形工房 Malion et Atelier』のquest版。
以下、作業した際の雑感を。
quest対応とは?
quest対応ワールドは制限が厳しいです。
- 容量100MB未満(必須)
- 推奨シェーダーがごく少数
- 容量や推奨シェーダー対応だけだと大抵とても重い
必須の対応は「1」のみですが、「2」「3」にも配慮しないと(よほどシンプルなワールドでもない限り)まともに遊べません。例えば「2」ですが推奨を無視すると、
- PC用シェーダーをそのまま使っても動くが、とても重くなりがち。
- 自作・カスタムシェーダーも(見た目を追求するので)大抵重い。
- 透過・半透過も公式非推奨。割と重い。
「2」の対応は比較的簡単です。シェーダーをただVRChat mobile対応シェーダーに替えるだけ。ほとんどの市販アセット(部品)はStandardシェーダーが指定されていますがそれをStandard Liteに置き換えてしまえば動きます。一応。
問題は「3」。リアルタイム3DCGとして軽快に動作するよう調整が必要です。具体的には、
- オブジェクト数(メッシュ数)をできるだけ少なく。
- マテリアル数をできるだけ少なく。
- 「2」に伴いテクスチャもできるだけひとまとめに。
「そんなこと言われても……」ってなりますよね。blender等のモデリングソフトで全部自作しているなら最初からこの三つを満たすようモデリングすればいいし難しいことではないですが、市販アセットを組み合わせたプロジェクトでの対応となると「どうすりゃいいの?」となります。
そこで定番ツール『MeshBaker』です。
MeshBaker
具体的な使い方は下のような記事が参考になりました。どれもほぼ同じ内容でした。
- UnityのMeshBakerを使ってドローコールを削減する | 3DCG school (3dcg-school.pro)
- 『VR空間のCGオブジェクトを軽くする方法 ~MeshBakerを利用したCGリダクション』 VRプロフェッショナルアカデミー/No1.VR/AR専門プロフェッショナルスクール (vracademy.jp)
- マテリアル・テクスチャ・メッシュをまとめて軽くする「MeshBaker」の使い方|よーへん(バーチャル学芸員・バーチャルライブコーダ)|note
以下はMeshBaker全体像を把握するための話です。
MeshBakerはunity向けの「テクスチャのアトラス化とメッシュ・マテリアルの結合ツール」です。定価は$90弱ですが、unity asset storeでは年に数度のセールで半額だったり70%オフになったりします。無料版もありますが結合可能マテリアル数が少なくてあまり実用的ではなさそうです。
- オブジェクト数が少ない方が表示負荷が少ない→メッシュ結合
- マテリアル数が少ない方が表示負荷が少ない→マテリアルを結合し、テクスチャも結合(アトラス化)
という3D負荷を減らすためのツール。便利! ただし難も多いです。
- 負荷軽減のための大雑把な知識が必要。
- 作業の見通しが悪く手順がわかりづらい。
- 結果が予測・制御しづらい。
特に最後の「結果が予測しづらい」のは苦しいです。UVが壊れたように見えたり、テクスチャアトラスが不本意な状態になったり。オブジェクト内部の問題でそんなトラブルが起きるようなのですが対処が困難です。(アセットの中身をblenderに戻して設定し直さないといけなさそう)
また一番目の「知識」の必要性も痛感させられます。MeshBaker作業を始めてから「ああ、動的要素とスタティックなものをあらかじめ分類しとけば良かった」って思うはず。一通り作業してから身に染みる手順が発生します。MeshBakerで得られる利点が「作業の見通しの悪さ」という難点の先にあるので「お勧め?」と訊ねられても「う~ん」と言葉が濁ります。
でも数百あるオブジェクトを数個にまとめるような作業だとMeshBakerは便利です。元のデータを破壊するようなツールではないので安心して試行錯誤できます。
対応の結果
quest化作業の実際はというと。(例は人形工房・初代questにて)
- buildのみquest用→メモリ不足で落ちたり一桁fps以下
- シェーダのみquest推奨に→10fps以下
- オブジェクトを(オクルージョンカリングを意識しつつ)統合。シェーダはPC用。→10fpsくらい
- (ガラス以外)推奨シェーダー化+オブジェクト統合→25fps
といった感じでした。アニメーションさせる人形モデルはボーンが入ったままだったりするので人形展示エリアは最低の25fps程度、スポーン部屋は40~50fpsとなります。部屋の仕切りでオクルージョンカリングも効果あるみたい。
quest対応のツボ
シェーダー:Lightmapped
シンプルなdiffuseとライトマップの組み合わせですがstatic部分はこれでPC版に近くなります。テクスチャ主力ワールドのquest対応では一番頼りになるシェーダーです。
シェーダー:透過
quest推奨シェーダーには透過/半透過がありません。ガラスのような表現がどうしても欲しい場合には、負荷に妥協して非推奨の"Standard"のtransparentが無難です。ガラス専用シェーダーの類は比較にならないくらい重いです。questでもReflection Probeは機能します。
シェーダー:dynamicオブジェクト
インタラクトできたりアニメーションしたりするオブジェクトのシェーダー選択肢はStandard Liteが筆頭、ツヤテカさせたいものはBumped Diffuse Specularを。ただしquest推奨シェーダーはReflection Probeに反応しないようです。どうしても映り込みが欲しいオブジェクトはPC版向けのStandardシェーダーでSmoothnessを1へ。
シェーダー:頂点カラー
quest推奨シェーダーはLightmapped以外だと「Albedoに頂点カラーを乗算」する仕様です。意図せず頂点カラーが設定されていると色がおかしくなります。また、逆にテクスチャを使用せず頂点カラーで彩色することもできます。人形工房ワールドでは作業机の上の顔料ビンの中身をテクスチャなしの頂点カラーで色づけしてあります。(メリットはあまりなさそう)
オクルージョンカリング
公式マニュアルのオクルージョンカリングの項を読むべきです。MeshBakerでオブジェクトをまとめる際にも「まとめ過ぎるとオクルージョンカリングが効かなくなって負荷が減らない」事態が起こり得ます。どの程度オブジェクトをまとめるかはバランスポイントを探して手探りになると思います。例えば「ワールド全体に散らばってる小物」はひとまとめにせずに、中程度に領域別にまとめた方が無難なはず……。
MeshBakerでテクスチャ容量が増えた!
テクスチャのアトラス化をすると使っていない部分が出るので容量的な効率は少し落ちます。が、それだけでなく、アトラス化テクスチャ外の個別のテクスチャもリンク、アップロードされてしまいワールド容量が倍増してしまうことがあります。そんな時はhierarchyからTextureBaker(0)以下を削除。
ギミック
アバターと違いワールドで利用できるスクリプトはPC版と同じです。ドアの開閉のようなアニメーション、時計の針を現在時刻に動かす、操れるマリオネット、パーティクル、青空文庫システムなどのギミック類はPC版ワールドと同様に遜色なく機能しています。
まとめ
わからないことがあった時に一番頼りになるのはunity公式の日本語マニュアルです。
マニュアルはとてもよく整備されていてわかりやすいです。quest対応のための軽量化は、ゲームを前提としたunityの基本のようです。(questに採用されてるチップはスマホ用でスマホはunityゲームの一大市場です)
| 固定リンク