UhiyamaLAB個人開発者の創作備忘録

【VRChat】はじめてのアバター最適化!Mantis LOD EditorとMeshDeleterでポリゴン数を63%削減してVeryPoor脱出した手順

2024/12/222024/12/22日記VRChat

今回は「Mantis LOD Editor」と「MeshDeleterWithTexture」でポリゴンを削減し、VRChatアバターのパフォーマンスランクをVery PoorからPoorに改善することができたので方法を記録します。

最初に最適化前のモデルを御覧ください。188,784ポリゴンでパフォーマンスランクは「VeryPoor」です。

次に最適化後のモデルを御覧ください。69995ポリゴンでパフォーマンスランクは「Poor」です。見た目への影響を最小に抑えつつ、ポリゴン数を63%削減することができました。

下記の方法でポリゴンを効果的に削減することができました。おそらく今後自作モデルやアクセサリー制作をする上で重要なテクニックになってくるんだろうなと思います。順番に解説します。

  • 隠れている部分のパーツを削除 (服に隠れた肘パーツなど)
  • NDMF Mantis LOD Editorで各パーツのポリゴン数を削減
  • MeshDeleterWithTextureで服パーツ細分化+不要装飾のメッシュを削除

  1. 必要なもの
  2. 今回学んだ専門用語
  3. Mantis LOD Editorによる最適化
  4. Mantis LOD Editor使用時の問題
  5. MeshDeleterWithTexture betaによる最適化
  6. 応用: MeshDeleterWithTexture betaで服装を細分化する
  7. まとめ
  8. 参考情報

必要なもの

今回最適化に利用したのは下記のツールです。

Mantis LOD EditorはUnityの有料アセットです。様々な用途で綺麗にポリゴン削減をすることができます。アセット購入後、Unityプロジェクトを開いて、PackageManager「MyAssets」の項目から「Mantis LOD Editor」を選択してインポートします。

NDMF-Mantis LOD Editorは、Mantis LOD EditorをNDMF(なでもふ)で動くようにしたものです。ひつぶさんのBoothから無料でダウンロードできます。unitypackageを使ってインポートしてください。実際にパーツに適用するのは、この「NDMF Mantis LOD Editor」のスクリプトです。

MeshDeleterWithTexture betaは、テクスチャの箇所を指定することで、メッシュの対応した箇所を削除することができるEditor拡張です。がとーしょこらさんのBoothから無料でダウンロードできます。Mantisのポリゴン削減だけで70000ポリゴン以内に収められない場合、このツールを使って服装の装飾を一部削除することでポリゴンを大幅に削減できます。Mantisと組み合わせて使うと強力です。※削除といっても、新規メッシュを作成して割り当てているだけなので、処理前のメッシュにいつでも戻すことができます。

anatawa12’s gists packは、現在のポリゴン数を確認するための「Actual Performance」タブの表示に必要です。後述するMantisやMeshDeleterの削減をしたら、UnityをPlayModeにしてください。ActualPerformanceが更新されて、最新のポリゴン数が確認できます。この数値が70000以下になればPoorランクに切り替わります。

ActualPerformanceでパフォーマンスランクの詳細を確認できます。この改変モデルは現在188,784ポリゴンで、Poorランク規定の70,000ポリゴンを超過しているため、パフォーマンスランクは「VeryPoor」となっています。

今回学んだ専門用語

今回のアバター最適化に際して自分が学んだ専門用語を記録しておきます。

  • 非破壊的
    3DCGにおける「非破壊的」とは、元データやメッシュそのものを直接書き換えずに編集・加工し、いつでも元に戻せるような手法のことをいいます。
    例えば、今回利用するNDMF-Mantis LOD Editorでは、スライダーを使って対象パーツのポリゴンを削減しますが、スクリプトを取り除けばいつでも最初のメッシュ状態に戻すことができます。また、MeshDeleterWithTextureについても、元のメッシュを残したまま、一部分を削除した新規メッシュを作成しているわけなので、メッシュの指定を変えていつでも初期の状態に戻せます。
  • NDMF(なでもふ)
    Non-Destructive Mesh Formatの略称です。3Dモデルを非破壊的に扱うための中間フォーマットです。これによりVRChatアバターを安全に最適化することができます。

Mantis LOD Editorによる最適化

まずはどのパーツを最適化すべきなのか特定しましょう。

VRChatSDKの画面からBuilder項目を開き、Validationのなかからポリゴンに関する警告文を見つけてください。その隣に書いてある「Select」を押すと、今回最適化すべきパーツがハイライトされます。それに「NDMF Mantis LOD Editor」スクリプトをアタッチして、見た目が破綻しない程度にQualityの数値を調整していくのが主な作業になります。

ここからの作業はShaded Wireframeにしたほうがわかりやすいので、適宜Shadedと切り替えつつ作業を進めてください。

パーツにスクリプトをアタッチし、数値を調整するだけなので非常に簡単です。

使わないパーツは削除しよう

このモデルはマヌカちゃんベースの改変モデルなのですが、もともとのマヌカちゃんのエプロンパーツなどをヒエラルキーに残したままでした。これを削除したところ、ポリゴン数が16000ほど削減できました。

「一応残しておくか」とパーツを消さずにいましたが、見えてないのにポリゴン数にカウントされると正確なパフォーマンス計測が出来ないですし、もし必要になったら元データを再度インポートすれば良いだけなので削除するのが無難なようです。

(参考) UnityだけでVRChatアバターのVeryPoorを脱出する方法|こはだ

顔と身体「以外」のパーツを削減しよう

Mantisでポリゴン削減するのは楽しいですが、「顔」や「体」パーツはそのままにしておくのが無難です。Shaded Wireframeにすると、表情は非常に細かいメッシュで構成されていることがわかります。

ここで「よし!削減しよう!」と安易に思わないでください。

例えば、口周辺は特にメッシュが細かいですが、これは様々な口の変形に対応するために細かく別れているのです。これをMantisで削減してしまうと、メッシュが不足して、喋るたびに口が裂けたり、顔面崩壊する可能性が高くなります。また、体の関節部分なども安易な削減は事故のもとなので、他のパーツでポリゴンを削減していきましょう。

時にはデザイン的な妥協が必要

最適化を進めるうえで、一定のデザイン的な妥協が必要になります。

上記の尻尾は最初2756→1200前後までポリゴン削減していたのですが、Poorランクの70000ポリゴンに収めるために最終的に削除しました。

Mantis LOD Editor使用時の問題

実際にMantisによる最適化を進める中で下記のような問題が起きました。

  • インナーとアウターが一緒になっている服オブジェクトをMantisで最適化しようとすると、インナーが先に破綻してしまい、アウターのポリゴンが上手く削減されない。服を分離して個別に削減したい。
  • お腹パーツのメッシュが服の下で残り続けている。肘や前腕のように削除ができない。
  • 服の装飾を削らないとポリゴン数を減らすのに限界がある。メッシュを部分的に削りたい。

これらはMantisの問題というより、メッシュ構造の問題です。

今回の最適化をする前に、服で隠れた体パーツ(肘や前腕)は消しておいたのですが、なぜかお腹パーツだけが残っていることに気づきました。

テックウェアを外してみました。腹部パーツが不自然に残ってしまっています。見えてないパーツなので、この部分は削除したいです。調べてみたところ、がとーしょこらさんのMeshDeleterWithTexture betaというツールを発見しました。

MeshDeleterWithTexture betaによる最適化

MeshDeleterWithTextureの使い方は非常にシンプルです。

まず、がとーしょこらさんのBoothからunitypackageをダウンロードして現在のプロジェクトにインポートします。するとメニューバーにGotoToolsという項目が追加されるので、「MeshDeleter with Texture」を選択して拡張エディタ画面を開きます。

画面上のRendererの部分に削除したいメッシュが含まれるオブジェクトをD&Dします。対応するテクスチャ(今回の場合はManuka_body)が表示されるので、画面右のDrawTypeから「PEN」を選んで、非表示にしたい腹部を黒く塗りつぶし、「DeleteMesh」を押すだけです。

テクスチャを塗りつぶすとリアルタイムで指定範囲がモデルに反映されます。腹部がしっかり指定されていることを確認したので「DeleteMesh」を押します。

実際には削除ではなく、塗りつぶした部分以外でMeshを生成して再設定しているだけです。オリジナルのメッシュも残っているので、指定し直すだけで形状を元に戻すことができます。便利ですね。

腹部を消したことで、ポリゴン数を1000ほど削減できました。残った部分にMantisを使って更に軽量化します。

応用: MeshDeleterWithTexture betaで服装を細分化する

このテックウェアは最初のアバター導入時に購入したお気に入りのアセットなのですが、単体で60544ポリゴンほどあり、コート部分と上半身のインナーが同一オブジェクトとしてまとめられているため、Mantisで最適化しようとしたときに、インナーが先に破綻してしまい、アウターのポリゴンが上手く削減出来ないという問題が発生していました。

「インナーとアウターを分けたい」

そう考えたとき、MeshDeleterを応用的に使えばパーツを分離できることに気が付きました。

まず、現在のテックウェアをコピーします。次にそれぞれのオブジェクトをMeshDeleterのRendererに設定してテクスチャ編集画面で、インナーの場合はアウターを、アウターの場合はインナーの部分のテクスチャを塗りつぶして削除してしまいます。

インナー用のオブジェクトなので、コート部分をまとめて塗りつぶしてしまいます。この状態で「DeleteMesh」を実行します。

うまくインナー部分だけのMeshに変換することができました。Blenderを使わず、Unity上でこうしたMeshの再設計ができるのはとても便利ですね。今度は反対にアウター用のオブジェクトを作成します。

先ほどとは逆にインナー部分を塗りつぶして「DeleteMesh」をしたところ、上手く機能しました。

オブジェクトが分離したことで、Mantisでポリゴンを個別に削減することができるようになりました。

まとめ

以上の方法を用いた結果、最初に18万ポリゴンあったVeryPoorモデルを、69995ポリゴンのPoorランクに改善することができました。

もともとの装飾や側面ポケットをMeshDeleterで削除+コートが破綻するギリギリのレベルに削減して、69995ポリゴンに収まりました。ポリゴン削減の非常に良い練習ができたと思います。

装飾を取り除くのは非常にもったいない感じがしますが、MantisにしてもMeshDeleterにしても、非破壊的なので、「戻そうと思えばいつでも戻せる」というのが良いですね。

Mantisの凄さはVRChat上で聞いていましたが、今回はMeshDeleterの柔軟さに驚かされました。テクスチャを塗りつぶしてMeshを手軽に消せるのは非常に魅力的だなと思います。

まだ他項目の最適化は未着手ですが、ポリゴン削減については、今回の記事が何かしら参考になれば幸いです。

参考情報

下記は今回の最適化のなかで参考にした情報の一覧です。とても詳しく解説されているので併せて参考にしてみてください。

この記事をシェアする