ModularAvatarとAvatarOptimizerを使ったアバター編集
追記(2024/03/07)
この記事を投稿してから約1年が経過しました。当時に比べて非破壊改変ツールの便利さ、使用方法は十分に知られるようになりました。各ツールの公式ドキュメントが十分に整備されました。ツールそのものも頻繁にアップデートされているため、この記事の内容のいくつかはもう古く参考に値しないと思います。ツール名で検索していただいた方が最新の情報を拾えると思いますので、そうされることをお勧めします。
序論
まずは次の二枚の画像をご覧ください.
みなさんご存じ,VRCにおける超大人気アバターGrusちゃんです.どちらも全く同じ衣装を着せたものですが,パフォーマンスランクに違いがあります.一枚目はキセテネというツールを使って着せ替えを行ったもので,パフォーマンスランクはMediumです.二枚目は本記事で紹介する二つのツール,ModularAvatarとAvatarOptimizerを使ったもので,パフォーマンスランクはGoodと,一枚目と比べて一段階高く?なっています.このように,同じ構成のアバターであっても,その導入のやり方によってはパフォーマンスランクに差が出る場合があります.
本記事では,ModularAvatarとAvatarOptimizerという二つのツールを使ったアバターの編集について説明します.読者としては,「キセテネなどを使った着せ替えを行い,アバターアップロードをした経験がある人」「ModularAvatarの名前は聞いたことあるけど何なのかわからない,しかし使ってみたい人」「Unityだけでアバターを軽量化したい人」「筆者より高度な知識を持っていない人」を想定しています.
取り扱わない内容
アバターや服装の購入,アバターアップロードの手順
先ほど説明した通り,すでにアバターをアップロードしたことがあることを前提とした説明を行います.Unityの基本的な操作,用語については解説しません.また,今回扱うツールが非VCC(Creator Companion)環境で動作するかを筆者は確認していません.したがってVCC の導入を前提としますが,VCCに関しても説明は行いません.頂点数の削減
この記事ではアバターを軽量化するために主にボーン数とメッシュ数を削減します.Blenderを使ったポリゴン数の削減については特に触れません.「Unityだけでアバターを軽量化したい人」という読者を想定しているためです.本当は筆者にBlenderを使った経験が特にないからです.
ツールの説明とインストール
2023/05/11 追記
この章では二つのツールをunitypackageを使って導入するよう説明しておりましたが,現在のVCC環境下ではより便利なインストール方法が整備されています.別に記事を書きましたので,こちらを参考にしてください.記事タイトルではLiltoonとしていますが,同様の方法でModularAvatarとAvatarOptimizerがインストールできます(記事の最後にリンクがあります).
ModularAvatar
引用してきた説明の通り,衣装やギミックを導入するためのツールです.「非破壊的」とあるように,可逆的な着せ替えを可能にしてくれる画期的なツールです.単なる着せ替えツールというだけのものではないので,一度公式ドキュメントを読んでみることをお勧めします(日本語です).下記サイト中央にある「ダウンロード」ボタンを押した先にあるunitypackageをダウンロードして,VCCで作成したプロジェクトにインポートしてください.
AvatarOptimizer
アバターを最適化するための12の複数の機能を備えたツールです.その機能群の中で,今回はMerge Skinned Meshというものを主に扱います.これはメッシュを結合するための機能です.今回はこれを使ってFace以外のメッシュは全て結合してしまおうと思います.下記サイト中央にある「here」をクリックするとunitypackageがダウンロードされます.それをVCCで作成したプロジェクトにインポートしてください.
実際の手順
それでは実際に導入の手順を見ていきましょう.今回は記事冒頭で見せた超カワイイGrusちゃんを例として紹介します.
まずは使うアイテムのプレハブをヒエラルキー上にドラッグアンドドロップしていきましょう.今回は衣装(靴を含む)と,髪の二つのアイテムを着せることにしました.それができたら,衣装と髪をヒエラルキー上の素体へとドラッグアンドドロップし,アバター直下に配置します.下の画像のようになってたらOKです.
次に衣装を右クリックして,「[ModularAvatar]Setup Outfit」を選択します.これで衣装は着せ終わりました.同じことを髪に対しても行います.簡単ですね.
補足
髪によっては,Armature直下にHairRootがある(=Hips,Spine…などのボーンがない)場合があります.こういった場合には「[ModularAvatar]Setup Outfit」を選択できません.下記の手順を試してください.
髪のプレハブを複製し,複製したものをヒエラルキー上にドラッグアンドドロップ
アバター直下に配置し,右クリックして「Open Prefab Asset」を選択
適当な位置で右クリックして「CreateEmpty」を選択してからオブジェクトを作成.Armatureの直下に配置して「Hips」にリネームし,Hipsを作成する.次にHipsの下にSpineを作成する.この操作を繰り返してArmatureとHairRootの間の構成を素体と揃える.アバターによってボーンの名前が違うかもしれないので注意.
最後に仕上げです.ヒエラルキー上で右クリックして「Create Empty」を選択して空オブジェクトを作成,これをアバター直下に配置してください.次に,このオブジェクトを選択した状態で画面右の「Add Component」ボタンをクリック,「Merge Skinned Mesh」を選択してください.
後は「Skinned Renderers」のelementに対して,顔以外のメッシュをドラッグアンドドロップしていきましょう.また,「Merge Materials」の「Merge」にチェックを入れておきましょう.重複しているマテリアルがあった場合にそれらを統合して,マテリアル数も削減してくれます.
以上で終了です.お疲れさまでした.
評価
最後にアップロードしたアバターとキセテネを使ってアップロードしたアバターの比較をしてみます.
きちんと今回アップロードしたアバターはメッシュ数が2になっていますね.また,今回の条件ではマテリアル数も一つ削減されています.うれしいね.
ボーン数も110→86と削減されていることが確認できます.
まとめ
今回はBoothにない2つのツールを用いたアバター導入のやり方について解説を行いました.どちらのツールも今回使用した機能はごく一部です.ぜひ使いこなして,あわよくば筆者に使い方を教えてください.
~~~ここから追記(2023/03/19)~~~
作業の中でFaceとそれ以外にメッシュを分類し,それ以外の方を結合することでメッシュ数を2へと削減しました.ここからは,なんで顔だけ分けたの?という疑問への回答と追加でやってほしい作業について書こうと思います.
顔だけメッシュを分けた根拠
以下はVRC公式ドキュメントの「Avatar Optimization Tips」のうちの一部を抜粋しDeepLで翻訳したものです.
要は「一つのメッシュが大量のシェイプキーを持つことは最適化の観点から望ましくない」ということだと思います.現在主流のアバターの大半ではFaceメッシュにシェイプキー数が集中しています.Faceとそれ以外を結合してしまうと大量のシェイプキーを持ったメッシュが誕生してしまうので,それを避けるためにFaceとそれ以外に分けたのでした.
追加でやってほしい作業
ここまで読んだあなたに追加でやってほしい作業,それは「不要なシェイプキーの固定」です.現在主流のアバターの大半には,体型を変更する目的や衣服の干渉を避ける目的でシェイプキーが搭載されています.Faceメッシュの表情用のシェイプキーと違い,このシェイプキーはVRC上で動かす必要はありません.そういったシェイプキーをアップロード時に固定してしまうことで,負荷の軽減を行いましょう.
手順は簡単です.BlendShapesを持つメッシュに対して「Add Component」から「FreezeBlendShapes」を追加し,不要なシェイプキーを指定してください.この作業を身体,衣服,髪などBlendShapeを持つメッシュ全てに対して実行しましょう.【訂正】「MergeSkinedMesh」を付けたGameObjectに対して「FreezeBlendShapes」をAddすれば,メッシュ結合後のBlendShapeを参照できるそうです.複数メッシュに対して実行する必要はありません.
表情用のシェイプキー(≒Animationで動かすシェイプキー)を指定した場合は,そこだけ動かなくなっちゃうので注意してください.逆に言えば,不要な表情用のシェイプキーを固定することで,Animationを変更することなくそのキーの影響を無くしてしまえます.Quest対応させた際に本来透過されていた部分が変に表示されてしまう問題への対処に有用だと思います.