k.KOUTAROU
SUKAMOTO
← ALL WORKS

CASE STUDY 03 / Unityツール

形・表情・制作手順を考えた、アバター最適化。

開発中・未公開QEMメッシュ最適化UVBlendShapeVRChat

00 / OVERVIEW

この作品について

VRChatアバターをQuest向けに軽量化するUnity Editorツールを開発しています。ポリゴンを減らすだけでなく、メッシュの統合、テクスチャの変換、揺れものの整理まで、一つの流れで進められるようにしています。

僕が大切にしているのは、軽くした後もそのアバターらしい形や表情を残すことです。UVの継ぎ目や輪郭を保護しながら頂点を削減し、ボーンウェイトとBlendShapeも作り直します。まだ未公開ですが、ここでは現在の実装を紹介します。

PROCESS / MESH
01元のメッシュ→
02QEMで評価→
03輪郭を保護→
04頂点を統合→
05属性を再構築

処理の流れをまとめた図です。ボタンで順番に確認できます。

01 / DESIGN NOTES

形の変化を計算して、削減する辺を選ぶ

削減にはQEMを使っています。三角形の平面から誤差行列を作り、辺を一つにまとめると形がどれだけ変わるかを計算します。面積も重みに含め、誤差が小さくなる位置に加えて、辺の両端と中点も比較しています。

誤差の小さい辺から処理し、一回の処理で同じ頂点を何度も動かさないようにしています。境界や隣接面の角度から特徴のある辺を見つけ、輪郭が潰れにくくなる処理も入れました。通常モードでは面の裏返りを調べ、UVの継ぎ目を含む辺は削減を避けています。

削減率は、元の三角形数に対して何割を残すかで指定します。形を守る条件があるため、設定した数まで必ず減らすのではなく、削減できる候補を繰り返し探す方法にしています。

02 / DESIGN NOTES

テクスチャと表情も、頂点に合わせて作り直す

頂点を動かすと、表面のテクスチャもずれます。そこで三角形上でUとVがどの方向に変化するかを求め、移動量に応じてUVを補正しています。同じ位置にある頂点を関連付けつつ、UVや法線が異なる箇所は再構築時に分けて扱います。

統合する頂点のボーンウェイトは、同じボーンへの重みをまとめてから、上位四つを正規化します。BlendShapeも位置・法線・接線の差分を補間して、削減後の頂点へ対応付けます。見た目が静止画として残るだけでなく、動きや表情も引き継げるようにするための処理です。

03 / DESIGN NOTES

メッシュをまとめた後のアニメーションまで扱う

SkinnedMeshを統合するときは、各パーツをアバタールートの座標に揃え、ボーン参照とウェイトのインデックスを組み直します。同じマテリアルのサブメッシュや、同名のBlendShapeもまとめています。ただし、マテリアルが複数残れば描画単位も残るので、Rendererの数だけで軽量化の結果を判断しないようにしています。

メッシュの場所が変わると、それを参照するアニメーションも直す必要があります。Controllerを複製し、StateMachineとBlendTreeを再帰的にたどって、クリップの曲線を統合後のメッシュへ向け直します。共有クリップは再利用し、同じ変換を何度も行わないようにしています。

04 / DESIGN NOTES

隠れる面と、残したい揺れを整理する

衣服で隠れる面は、現在の姿勢のメッシュを使って調べます。頂点の法線周辺へ複数のRayを飛ばし、遮蔽率が設定値を超え、三角形の三頂点すべてが隠れる場合に削除候補にします。Rayの本数と保護するメッシュを選び、精度と処理時間を調整できます。

PhysBoneとColliderは、名前、左右のまとまり、長さ、Transform数などから優先度を付けます。SceneViewで骨や衝突判定を表示し、選択した箇所をハイライトする機能も用意しました。どの揺れを残すかを、実際のアバターを見ながら判断できるようにしています。

05 / DESIGN NOTES

軽量化の工程を、一つの画面で進める

形状の確認、パーツごとの例外、統合、テクスチャ調整、揺れもの、クリーニングをウィザード形式で進めます。顔や髪などは個別に保護でき、アバターごとの設定を保存できます。三角形数、Renderer数、テクスチャメモリを比較して、何が変わったかも確認できるようにしています。

まだ開発中なので、削減後の形や表情、着替え、アニメーションの確認が必要です。実機での性能はこの記事の数値だけでは判断できません。アバターごとの違いを扱えるツールとして、引き続き仕上げていきます。

REFERENCE

関連リンク・公開情報

開発中の作品です。公開パッケージはありません。

NEXT CASE STUDY

AI VTuber Mira ↗