Unityでできる cluster用 アバター(VRMモデル)の軽量化

「cluster」ではVRMモデルをアップロードすることで、ユーザーが思い思いのアバターを使用できるカスタムアバター機能があります。
本記事はカスタムアバターについての記事となります。

clusterにカスタムアバターをアップロードする時に基本的には制限について気にする必要はありませんが、場合によっては、アップロードができなくなってしまう場合があります。詳細は下記のリンクをご覧ください。

そんなときは、VRMモデルの軽量化をすることで解決するかもしれません。
VRMモデルの軽量化をする方法はいくつかありますが、本記事ではUnity上で行える調整について紹介します。

Unity上の調整はひとつのソフト内で完結でき、手順が少なくなることがメリットです。

ただし、調整できることが少ないというデメリットもあります。より細かな調整を行いたい場合はモデリングソフトで行う必要があります。
本記事で紹介する方法は、アップロードできなくて困った時にまず試してみることをおすすめします!

VRMモデルの読み込みと出力

VRMモデルを読み込む

まずは、VRMモデルをUnityに読み込みましょう。

読み込みには「UniVRM」というツールを使用します。
UniVRMって何?と気になる方は、公式サイトをご覧ください。

clusterでの推奨バージョンは「UniVRM v0.61.1」です!(使用するUnityのバージョンについてはこちらをご確認ください)

  • UniVRM-0.61.1」のページに進んだら、ページを下までスクロールしてAssets内にある「UniVRM-0.61.1_7c03.unitypackage」をダウンロードしてください。
  • ダウンロードしたらUnityの新規プロジェクトを立ち上げて、「UniVRM0.61.1_7c03.unitypackage」を「Unity」の「Project」ウィンドウにドラッグ&ドロップ、または「UniVRM0.61.1_7c03.unitypackage」をダブルクリックします。
  • 以下のようなウィンドウが表示されるので、右下の「import」を押します。

Unity上部メニューに「VRM」の表記があればUniVRMのインストールは完了です。

  • UniVRMがインストールされている状態でVRMモデルを「Project」ウィンドウにドラッグ&ドロップすることで、モデルデータが読み込まれます。
  • Projectウィンドウ内のモデルデータを「Hierarchy」または「Scene」にドラッグ&ドロップすることでSceneにモデルが表示されます。

これでUnity上でVRMモデルの調整が可能な状態となりました!

VRMモデルの出力

軽量化の前にVRMモデルの出力方法を紹介します!

  • まずは、Unity上のhierarchy内で出力したいモデルを選択します。
  • モデルを選択した状態で、Unityの上部メニューの「VRM」>「UniVRM-0.61.1」>「Export humanoid」より「VRM Exporter」ウィンドウを表示してください。

  • 最後にウィンドウ右下の「Export」ボタンを押すことで出力が完了します。

軽量化方法の紹介

ここからUnity上でできる軽量化の方法を紹介します!

ポリゴン数が多い場合

エラーメッセージとして、 「Polygonの数を32000以下にしてください」と表示される場合はモデルのポリゴン数がオーバーしています。

この場合は、Unityの hierarchy 内に存在する使われていないメッシュオブジェクトを削除することでモデルのポリゴン数を減らすことができます。

メッシュオブジェクトとは、Unity上のInspectorを確認した時に「Skinned Mesh Renderer」か「Mesh Render」というコンポーネントを持っているものです。

また、メッシュオブジェクトはScene上、またはhierarchyで選択するとアウトライン(画像内のオレンジ線)が出るのでこちらで確認するのも分かりやすいです。

メッシュオブジェクトを確認して、使われていないものがあったら削除していきましょう!

がとーしょこらのおみせ」さんの「MeshDeleterWithTexture beta」というエディタ拡張を使うことでもポリゴン数の削減ができます。

Unity上で削除したい箇所のテクスチャを塗ることで、指定のメッシュを削除できるツールです。直感的に削除ができて便利です。

マテリアル ・テクスチャの数が多い場合

アップロード時にエラーメッセージとして、「materialの数を8以下にしてください」。
または、 「imageの数を16以下にしてください」。
その両方が表示される場合、 マテリアル ・テクスチャの数が制限をオーバーしています。

その場合はマテリアルとテクスチャをまとめることで解決します。

clusterのオフィシャルアバターを例に進めていきます。
このアバターのもともとのマテリアルとテクスチャは以下の通りです。

マテリアル
テクスチャ

上記のマテリアル3つ、テクスチャ3枚をまとめると

このようにマテリアルを1つ、テクスチャを1枚にすることができます。

Unity上でこの工程を行う場合は、「遊び屋Books」さんの「Unityだけでテクスチャのアトラス化ができるすごい奴+複数のメッシュを一つに結合できるすごいやつ」というエディタ拡張が便利です。

メッシュの数(サブメッシュ数)が多い場合

エラーメッセージとして、「meshの数を16以下にしてください」と表示された場合はメッシュの数が、「primitiveの数を32以下にしてください」と表示された場合はサブメッシュの数がオーバーしています。

メッシュオブジェクトの数を減らすには、上記の「ポリゴン数が多い場合」でも書きましたが、Unityのhierarchy内のオブジェクトを削除する、またはメッシュオブジェクト同士を結合する必要があります。

Unity上でメッシュオブジェクトの結合を行う場合は「Mesh Baker」というAssetが便利です。

こちらのAssetではメッシュを統合しつつ、マテリアルとテクスチャもまとめることができます。

テクスチャの解像度が大きい場合

エラーメッセージとして、 「画像の解像度は2048×2048以下にしてください。」と表示される場合はテクスチャの解像度がオーバーしています。

clusterでのテクスチャの最大解像度は2048です。そのため、各テクスチャをこの解像度以下にすることで解決します。

テクスチャの解像度はUnity上でリサイズすることが可能です。

  • まず、Unityでモデルのテクスチャを選択してください。
    テクスチャは「モデル名.Textures」フォルダの中にあります。
  • テクスチャを選択するとinspectorは下記の画像のようになります。
  • inspectorの「Max Size」の値を変更し「Apply」を押すことにより、テクスチャのサイズを変更できます。

しかし、Unity上でテクスチャのサイズを小さくする場合、画像がぼやけてしまう場合があります。

テクスチャのサイズは、基本を「1024」にした上で、綺麗に見せたい部分は「2048」、目立たない部分を「512」など、必要に応じて設定を変える方法がおすすめです。
一律で変更するより元の見た目の印象をなるべく維持したまま削減できるかもしれません。

綺麗に仕上がらない場合はPhotoshopなどの画像編集ソフトでの圧縮をおすすめします。

joint数(Bone数)が多い場合

エラーメッセージとして、 「jointの数を128以下にしてください」と表示される場合はモデルの「joint(Bone)」数がオーバーしています。

「joint」はカスタムアバターの関節の動きや髪の毛、服の揺れなど、動きをつくるのに必要なものです。
この場合はjoint数(Bone数)を減らすことで解決します。

Unity上でもjoint(Bone)を削除することは可能です。

以下はスカートのモデルです。青い丸は「joint」を表しています。
※通常、joint(Bone)は可視化されていないので、「Bone Visualizer」というUnityAssetを使用して表示しています。

この青い丸を削除することでjointを減らすことができます。しかし、「ウェイト」といわれるメッシュとjoint(Bone)の関連性を保持している情報までも削除してしまい、下図のようにメッシュが大きく崩れてしまいます。

がとーしょこらのおみせ」さんの「ModelBoneDeleter」というエディタ拡張を使うと、上記のような状態にならずにjoint(Bone)の削減を行うことができます。

こちらのツールは、削除したいBoneを選択すると自動でウエイトを選択したBoneの親に移して変えてくれるので、簡単に削減が行えます。

ブレンドシェイプの数が多い場合

エラーメッセージとして、「MorphTargetの数を64以下にしてください」と表示される場合はブレンドシェイプの数がオーバーしています。

ブレンドシェイプはカスタムアバターの表情をつくるものです。
ブレンドシェイプがあることでバーチャル空間内でも豊かな感情表現が可能になります。

clusterでは、「Select BlendShapeClip」の「Neutral」「A」「I」「U」「E」「O」「Blink」「Joy」「Angry」「Sorrow」を使用します。そのため、それ以外のブレンドシェイプデータを削除することで解決します。

ブレンドシェイプの削減は簡単です。

  • VRMモデルの出力」で説明した、モデルデータをVRMモデルとしてUnityから出力する際に、以下の赤枠のチェックボックスを選択することで、「Blendshape Clip」に参照されていない(使われていない)ブレンドシェイプは除外してエクスポートすることができます。

上記の方法で解決しない場合は、ブレンドシェイプを1つずつ削除していく必要があります。

VRMモデルのブレンドシェイプは VRMモデルをインポートすると表示される「アバター名.BlendShape」フォルダーの中にあります。

基本的に「BlendShape」内の使わないデータを削除することで解決します。

しかし、名前のBlendShapeの後ろに「.〇〇」と付いていないものは、そのモデルのブレンドシェイプ全体の設定データのため、削除してしまうと再設定をすることになるので注意してください。

この方法で削除する場合は、上の画像の赤枠である「BlendShape」をクリックして、下記の画像のウィンドウで各表情が崩れていないかのチェックをしながら進める方法をおすすめします。


ファイルサイズが大きい場合

ファイルサイズを25MB以内にしてください。」と表示される場合は、上記で取り上げてきたモデルの各項目ではなく、VRMファイル自体のサイズがオーバーしている時に表示されます。

VRMのファイルサイズは以下の画像の赤枠の部分になります。

ファイルサイズの削減に関しては、ここまでに取り上げてきた軽量化の方法を行うことで、削減が可能です。

中でも、「ブレンドシェイプの削減」と「テクスチャのリサイズ」を行うだけで、かなりのファイルサイズを削減できます。

アバターアップロード時のエラーが「ファイルサイズ」のみの方は、ぜひ試してみてください。

以上がUnity上で行えるVRMモデルの軽量化になります。

本来はモデリングソフトで行う工程をUnity上で行うので、思った通りの仕上がりにならないこともあると思います。しかし、Unity単体で行えるのが本記事で紹介する方法のメリットです。
ぜひ試してみてください。

記事をシェアしてワールド制作を盛り上げよう!