基本的な使い方

基本的な使い方 #

自動最適化を使用する #

アバターには自動的に行える最適化がいくつかあります。

  • 使用していないBlendShape(シェイプキー)1の除去
    • BlendShapeの値が0以外のときは処理負荷が発生するため、値をアニメーション等で変更しないBlendShapeは固定すると負荷が軽くなります。
    • 値が常に0である場合でも、固定することでアバターの容量を削減することができます。
  • 使われていないPhysBone等の削除
    • 揺らす対象として存在するメッシュ2が常に無効になっているPhysBoneなどのように、揺らす必要のないPhysBoneが有効になっている場合は計算負荷が余分に発生してしまいます。
  • アニメーションしたりPhysBoneで揺らしたりすることのないボーンの統合
    • 服のボーンを素体のボーンに入れ子状にして着せるような場合には、それ自身を動かすことがないボーンが多く発生します。そのようなボーンは余分な負荷を発生させてしまいます。
  • 一緒に切り替えていたり、切り替えることがなかったりするメッシュ同士の統合
    • アバターに服が1着しかない場合、体、髪、服などを別々のメッシュにしておく必要はないかもしれません。
    • 切り替え可能な複数の服がある場合でも、体、髪、下着などを別々のメッシュにしておく必要はないかもしれません。

AvatarOptimizerでは、アバターのルートにAAO Trace And Optimizeコンポーネントを追加するだけで、これらの最適化を自動で行うことができます!

add-trace-and-optimize.png

アバターをアップロードする #

AAO Trace and Optimizeコンポーネントを付けた状態で、試しにアバターをアップロードしてみましょう! AAO: Avatar Optimizerは非破壊改変ツールであり、Playモードに入るときかアバターをビルドするときに処理が行われるため、アップロードを行うのに特別な手順は必要ありません。 通常と同じように、VRCSDKのControl Panelからアバターをアップロードしてください。

ただし、Android(Quest)向けアップロードを行う場合などにおいて、Avatar Optimizerの最適化等によって制限の範囲内に収まるにも関わらず、 VRCSDKのビルド前チェックの時点で制限を超過していてアップロードボタンが押せない場合があります。
ビルド前チェックをスキップする方法はいくつかあります。詳しくはよくある質問を参照してください。

UploadせずにPerformance Rankを見る方法 #

非破壊改変ツールを使用した改変では、VRCSDKのControl Panel上のPerformance Rankはあてにならなくなります。

その代わりとして、Playモードに入った際のPerformance Rankをanatawa12’s Gist PackのActual Performance Windowを使用して確認することができます。 詳しくはanatawa12’s Gist Packの使い方およびActual Performance Windowのドキュメントを参照してください。

貫通防止用BlendShapeを利用してポリゴンを減らす #

服で隠れていたりして見えないような部分のメッシュを削除すると、見た目に影響させずに描画負荷やBlendShapeの処理負荷などを減らして軽量化することができます。 これを簡単に実現するために、AvatarOptimizerでは多くの素体に含まれている貫通防止用のBlendShapeを利用してメッシュを削除することができます!

素体のメッシュにAAO Remove Mesh By BlendShapeコンポーネントを追加しましょう!

想定外の部位が削除されてしまわないかを確認するためにプレビューのために切り替えたBlendShapeの値を自動的に変更するにチェックし、 削除したい部位の貫通防止用BlendShapeを下の一覧から選択しましょう!

消えて欲しい箇所が消えない場合や、消えて欲しくない箇所が消えてしまう場合には、許容差の値を調整する必要があります! 許容差は、頂点がBlendShapeによってどのぐらい動けば削除するかを決定するものです。 前者の場合は値を少し大きく、後者の場合は値を少し小さくしましょう!

remove mesh by BlendShape


  1. BlendShapeはUnity上のモーフィングの名前です。MayaではTarget Shape、BlenderではShape Key、MetasequoiaやMMDではモーフと呼ばれます。 ↩︎

  2. この記事でのメッシュは、UnityのMesh assetではなく、SkinnedMeshRendererやMeshRendererを意味しています。 ↩︎