VRChatアバターのドローコールはどんなもん?

VRChat用アバターの最適化をしようと調べていると、「パフォーマンスに影響しないようにドローコールを減らそう」という話を見かけたことがあるかもしれません。GPUに対してオブジェクトを描画してくれ~とCPUが要求するやつというざっくりしとした認識しか持っていませんが、これが多いとパフォーマンスが下がってしまうわけです。

ドローコールの最適化 - Unity マニュアル
画面にジオメトリを描画するために、Unity はグラフィックス API に対してドローコール (draw call、描画呼び出し) を送信します。ドローコールはグラフィックス API に対して、何をどのように描画するかを指示します。各ドロー...

巨大なテクスチャや大量のPhysBone、そして煌びやかに発光するライトのが多分大きな影響がありそうな気がしますが、そちらはひとまず置いておくことにします。ドローコールを削減する方法は割愛しますが、具体的にどれぐらいまで減らしてあればいいのかよく分からないので、適当に眺めてみることにしました。

※Unityに関する知識が乏しく、いくらか正確さを欠いていると思います。予めご了承ください。

使用するアバターなど

軽いアバター代表としてシヴィーちゃん(プロトタイプ版)を用意しました。パフォーマンスランクはGoodです。スキンメッシュは1つで、PhysBoneなどの揺れものも一切ないので、相当軽い部類かと思われます。

VR用3Dモデル「2A-7/VVVV シヴィー(プロトタイプ版)」 - 拾い部屋 - BOOTH
後程本仕様版を配布、販売予定です。 テクスチャの描きこみやパーツが最低限しかないため、プロトタイプとさせていただきます。 3Dのキャラ素材としてご使用ください。 ――――――――――――――――――――――――――― 規約としては基本的に他...

比較対象として大人気アバターのマヌカちゃんも使用します。パフォーマンスランクはVery Poorです。

オリジナル3Dモデル「マヌカ」ver1.02 - STUDIO JINGO - BOOTH
オリジナル3Dモデル「マヌカ」 製作者: 진권/ジンゴ このモデルはBlender 2.83で製作されました。 他のプログラムでの互換性は保障いたしません。

また、改変した場合にどうなるかの比較として、マヌカちゃん用に断罪セーラーを使用します。

2024年第1弾『断罪セーラー』Danzai Sailor 💜 - EXTENSION CLOTHING - BOOTH
EXTENSION CLOTHING 2024年最初の作品はセクシーキュートなメンヘラハーネスセーラー『断罪セーラー』です!!! 2024年もEXTENSION CLOTHINGをよろしくお願いいたします💜 ――――――――――――――――...

内訳は端折りますが、普段使っているライムちゃん(色々と改変済み)も使用します。

『ライム』-Lime-【オリジナル3Dモデル】 - あまとうさぎ - BOOTH
本モデルはUnityのHumanoid形式に対応した オリジナルモデル『ライム』です。 主にVRChatでの使用を想定したモデルです。 利用規約の範囲内でご利用いただけます。

Unityシーン上には何も設置しません。Skyboxがほったらかしですが、とりあえずDirectional Lightの影だけ切りました。最適化ユーティリティとしてAAO: Avatar Optimizerも使用します。

Introduction

比較してみる

デフォルトの状態を確認する

シヴィーちゃんを設置してプレイモードにしてみました。BatchesとSetPass callsは7です。PC版のマテリアル数は5つでQuest版は1つとなりますので、Quest版だと1回で済むのかなと。

次にデフォルトのマヌカちゃんを確認してみます。Batchesが43でSetPass callsは11となりました。マテリアル数は同じく5つですが、スキンメッシュが22もあるのでドローコールの差が出ています。

AAOのTrace And Optimizeを試してみる

VRChat用アバターのドローコールなどを減らす手っ取り早い手段として、AAOのTrace And Optimizeを使用する方法があります。スキンメッシュが減ればBatchesの回数も減り、マテリアルが減ればSetPass callsの回数も減って描画負荷が小さくなるはずです。(多分……。)

AAOのTrace And Optimizeによる自動最適化でスキンメッシュが2つぐらい減ったので、Batchesは43から39に減らせました。ちなみに手動で大胆に1メッシュに結合すると、Batchesが11に減ります。

改変するとどうなる?断罪セーラーを着せてみる

リッチ(?)な衣装ということで、マヌカちゃんをEXTENSION CLOTHINGの断罪セーラーに着せ替えてみました。11万ポリゴンだったマヌカちゃんが20万ポリゴンになり、スキンメッシュの数が27まで増えています。ドローコールはというと、Batches 71のSetPass calls 25に爆増しています。

この状態でAAOを使うといくらかスキンメッシュが結合されて、Batchesが71から37に減りました。SetPass callsの方はマテリアル数が増えてるのが影響してそうですね。

さて、グラフにして眺めてみると10回ぐらいまで減らすのはだるそうですが、20~30の範囲内であれば大丈夫そうかなぁという感じがします。

普段使ってる改変済みアバターと比べてみる

VRChatのパフォーマンスランク「Medium~Poor」ぐらいになるようにした改変済みライムちゃんも含めて比較してみます。フレームタイム順に並び替えてみましたが、マニュアルベイクせずに比べたので裏で色々動いてたりと色々条件が違うのであんまりあてにはならないです。(ポリゴン数やテクスチャ、PhysBoneなどの差もあるしね。)

こうしてみると、20回ぐらいに抑えてあればまぁまぁなんじゃないかと思いました。(※デフォルトで置いてあるDirectional Lightの影をオフにした状態の比較です。)

少なくとも何も最適化せずに70とか行くのは避けたいですね。やる気と根気があれば、大人数の集会用にシヴィーちゃん並に軽いアバターを目指してみると助かる人が居るかもしれません。

無理のない範囲として、20~30回ぐらいならよさそう?

数人のフレンドと会うぐらいであれば、20~30回程度にしておくとそれなりに減らせている部類に入るのかなと思います。パフォーマンスランクを下げようとすれば自然とこのぐらいになりそうな気もしますが、参考程度にお願いします。

今回はPhysBoneのことを一切考慮していませんので、しっかりと軽量化するならそちらも気をつけなければいけません。Very Poorを脱却しようと思うとポリゴン数やPhysBoneが真っ先に引っ掛かるのですが、スキンメッシュやマテリアルの数も気に掛けておきたいですね。

ちなみに、Vketの入稿ルールでは1スペースの上限として、SetPass calls 20のBatches 30までとなってました。

描画負荷(SetPassCalls/Batches)削減ノウハウ | バーチャルマーケット2021
2021年12月4日から、同12月19日まで開催するバーチャルマーケット2021(Vket2021)の公式Webサイトです。
タイトルとURLをコピーしました