見出し画像

10万ポリゴン超えアバターをQuest Medium対応するまで

※この記事は2023年1月現在の情報で書かれています。その後のアップデートにより情報が古くなっている可能性があります。

この記事を読んで作業したけどうまくいかない!とお困りの方はどうぞ気軽にまでご連絡ください。できる限りサポートします。

とりあえず

素晴らしき参考文献:
PC向けアバター 5000ポリまでダイエット - Quest Excellent を目指す本 -
とりあえずこの本を読みましょう。大体書いてあります。

この記事の最後に参考文献一覧を載せてあります。情報の集約を意図して関連する記事は大体載せてありますので、困ったら覗いてみると助けになると思います。

全体の流れ

PCVR向けのVRChat用アバターを軽量化してQuest Medium対応を目指します。基本的にはBlenderを用いて作業していきます。
全体の流れは、こんな感じです。

  1. ゴール地点を確認する

  2. 手法を確認する

  3. Blenderの準備

  4. ポリゴンを減らす前の作業

  5. ポリゴンを減らす作業

  6. メッシュ、マテリアルの結合

  7. Unityでアップロード

1.ゴール地点を確認する

まず、目的地を確認しましょう。Quest対応って何をすればいいのかはVRChat公式ドキュメントのAvatar Performance Ranking Systemページに書いてあります。

On Quest, the Minimum Displayed Performance Rank is set to Medium by default. (中略) You can set your Performance Rank Block level to Poor to allow the display of Poor avatars. However, you cannot set your Performance Rank Block level to "Very Poor".
Questでは、表示される最低のパフォーマンスランクはデフォルトでMediumに設定されています。(中略) パフォーマンスランクブロックレベルはPoorに設定してPoorアバターの表示を許可することができます。しかし、ブロックレベルをVery Poorに設定することはできません。(筆者翻訳)

https://docs.vrchat.com/docs/avatar-performance-ranking-system

基本的なところですが、アバターパフォーマンスランクには Excellent, Good, Medium, Poor, Very Poor の5種類があり、それぞれ指定された条件を1つでも満たさないと下位のランクの(パフォーマンスが悪い)アバターとして扱われます。その条件はPC版とQuest版でそれぞれ異なっていて、Quest版のほうがはるかに厳しい制限となっています。ここでは、Questの人にデフォルトで表示されるMedium以上にすることを目指します。さて、ここでQuest Mediumの基準を見てみましょう。

AvatarQuality Medium
Polygons    15,000
Skinned Meshes    2
Meshes       2
Material Slots     2
Bones        150
PB Components       6
PB Transforms         32

詳細な条件はリンク先を見てもらうとして、大事なのはこの辺です。まず、ポリゴン数が15000まで。メッシュが2つまで。マテリアルスロットが2つまで。このうち、メッシュとマテリアルの条件を満たすのは難しくありません。メインとなる作業はポリゴン数を15000以下まで減らしていく作業になります。
ちなみにメッシュというのはBlender画面でいうこれ(画像参照)のことです(BlenderではObjectと呼びます)。画像では、Body, Ear, Groveなどありますが、この数が2つまでという事になります。つまりQuest Mediumでは1つまでなら服などのONOFFが可能です。

メッシュ

また、ボーンに関しても制限があります。まずボーン数が150の制限があります。ロングヘアー+スカートのような揺れ物に多くのボーンが割り当てられているアバターの場合、ここの条件に抵触する場合があります。
その場合、Blender上でボーンを削除して減らす作業が必要になります。これはウェイトが絡むためunity上での削除ではたいていの場合うまくいかずに破綻します。
また、PhysBonesに関しても、Component数6、Transform数32という厳しい制限があります。Componentは同じ設定であれば1つに統合できるため、たいていの場合6もあれば対応できるかと思いますが、TransformはPBによって動くボーン数なので、揺らす箇所を減らすかボーン自体を減らす方法でしか対処できません。特にスカートの再現はTransform数32ではほぼ無理なのではないかと思います。

ロングヘアー+スカートのカリンちゃん

例として、私の改変カリンちゃんはロングヘア―+スカート(+リボンなどの揺れもの)で、総ボーン数251、PB Transformが151もあります。このようなボーンの多いアバターは対応難易度が高いです。PBだけなら、揺れを諦めることでパフォーマンスランクを改善できますが、ボーン数自体が超過している場合、ボーンを減らしてウェイトを調整する必要があります。

ボーンの減らし方については、そのうち(やる気が出たら)追記予定です。

この記事ではBlenderを用いた方法を解説しますが、各種アセットやプラグインを用いることで、Unityだけで作業することも可能なようです。なお、私はblenderを英語版で使っているため、操作説明も英語版に準拠したものになります。日本語化している場合は適宜読み替えて下さい。

2.手法を確認する

今回軽量化していくアバターはこちらのTETRAちゃんです。髪型差分3種を含めると100,669ポリゴン、髪型1種類でも8万ポリゴンオーバーあります。ざっくり計算すると18%程度のポリゴン数にまで減らさなければいけません。大変だ。

メイン作業であるポリゴン削減ですが、いくつか方法があります。

  • Blender標準機能のデシメートを使う

  • cats blender plugin のポリゴン削減機能を使う

  • Blenderで手動でポリゴンを削減する

  • Unityプラグインを使う

Unityプラグインを使う方法については、私はやっていないので詳しくは触れません。今回は、Blender標準機能のデシメートと手動削減を併用します。基本的には手動でポリゴン削減を行ったほうが仕上がりが綺麗になりますが、単純に時間がかかるのと、うっかりミスをしてよけいな手間が増えるリスクがあります。ご自身の求めるクオリティと手間を天秤にかけて、手法を選択してみてください。Unityを使った方法についてはこの辺の記事などを参考にしてみてください。また、記事の末尾に使えそうなツールのリンクを置いていますので、参考にしてみてください。

3.Blenderの準備

まず、Blenderが初めての人はZenさんのかぼちゃを作りましょう。これでだいたい基本操作は分かります。Blenderのダウンロードがまだの方はこちらから。この記事ではバージョン3.1.2を利用しています。古いバージョン(2.7.xなど)からはショートカットキーが変わっていたり一部機能の変更があるので、この記事の内容がそのまま使えない可能性があります。

Blenderのインストールが完了したら、アバターの .blend ファイルがある場合はそれを開き、ない場合は .fbx ファイルをBlenderにインポートしましょう。fbxのインポートは下記の画像のように、左上のメニューから、Files > Import > FBX を選択します。

このとき、改変済みのアバターを利用したい場合は、unityからfbxをエクスポートしてもうまくいかない場合が多いです。別の記事でVRMを利用してblenderに持ち込む方法を(簡単ですが)紹介していますので、改変アバターをQuest対応したい方はこちらも参考にしてください。

アドオンのインストール

作業を始める前に、Cats Blender Plugin と material-combiner-addon をインストールしてしまいましょう。手動でポリゴン削減する場合でも、最後のマテリアルのアトラス化にこの2つのアドオンが必要になります。

上記のgithubリンクからzipファイルをダウンロードして下さい。
ダウンロードが完了したら、左上の Edit メニューから、Preferences… を選択します。

Edit > Preferences…

設定画面が開いたら、右上の Install… を選び、ダウンロードしたアドオンのzipファイルを選択します。(解凍は不要です。zipファイルをそのまま選択しましょう)

アドオンをインストール

追加したアドオンが表示されたら、アドオン名の前のチェックを入れて完了です。アドオンの追加が完了すると、画面右のタブに CATS と MatCombiner が追加されていると思います。右のタブが出ない方は、ショートカットキー「N」を押すと表示を切り替え可能です。

CATS, MatCombiner タブが表示される

これからポリゴン削減作業に入っていくわけですが、その前に知っておくべきことがいくつかあります。

ポリゴン数を表示する

画面右上、Viewport Overlayの中にある、Statisticsにチェックを入れると三角ポリゴン数が左側に表示されます。

ポリゴン数の表示

Undo Steps を増やしておく

Preferences > System > Memory & Limits の中に、Undo Steps という項目があります。初期設定では32になっていると思いますが、この値を増やしておくとUndoできる回数が増えます。できるだけ多めにしておくと、あとで作業ミスに気づいたときなどに助かる可能性が上がるので、変更しておくのがおすすめです。パフォーマンスに問題が無ければ最大値の256にしておきましょう。

Undo steps を増やす

コレクションをコピーする

作業中、オリジナルを参照したくなる場合に備えて、コレクションを複製しておきましょう。Collectionを右クリックして、 Duplicate Collection します。複製されたコレクションは末尾に001が付いた 「Collection 1.001」 などの名前になっているはずです。このままでもいいですが、わかりやすさのために「Collection original」など適当な名前に変更しておくと良いです。このときコピーされたコレクションは下の階層も「Body.001」のように名前が変わってしまっているので、数字のついた方をオリジナルとして残し、実際に作業するのはコピー元のコレクションにした方が良いです。また、このままだと2つのコレクションが同じ位置に重なっていて都合が悪いので、新しく作成したコレクションをX軸方向に適当にずらしておきましょう。

コレクションを複製

元のコレクションを非表示にし、「A」で全選択して動かすと良いです。

複製したコレクションを移動する

こまめにセーブする

作業手順ではないですが、セーブは大事です。
ポリゴン削減の作業をしていると、不可逆な作業が多くあります。undo機能もありますが、ある程度区切りの良いところで別名で保存してファイルを分けておくことをお勧めします。gitなど、よりよいバージョン管理のできる場合はそれを利用してください。ファイルを分ける目安ですが、ポリゴン削減をする前、各部分のポリゴン削減をした後などに別名で保存するとよいかと思います。


4.ポリゴンを減らす前の作業

シェイプキーの確認

シェイプキー(ブレンドシェイプともいう)は頂点の移動量を記録したものです。アバターでは表情変化のために使われている他、胸のサイズを変更するなど体型を変化できるシェイプキーが設定されているアバターもあります。なんにせよ、シェイプキーというのは各頂点の変位(「この頂点AがX,Y,Z方向にそれぞれ○○、××、△△ずつ移動する。頂点Bは~」という情報)の集まりなので、ポリゴン削減で関連する頂点を削除してしまうとシェイプキーが破損することになります。そこで、先にどこにシェイプキーが設定されているかを確認する必要があります。

オブジェクトモードで画面右上のoutlinerからメッシュを選択し、画面右下のpropatiesからObject Data Propatiesを選択します。

Shape Keys

その中に Shape Keys という項目があります。ここに画像にあるように
Basis
blink_left
などのように値が存在する場合、そのメッシュにはシェイプキーが設定されています。空であればそのメッシュにはシェイプキーは存在しないので安心して頂点を減らしていいことになります。
全てのメッシュに対してシェイプキーが設定されているか否かを確認しましょう。基本的に顔はシェイプキーが集まっているので、削減しないかシェイプキーを保存しながら削減する方法を取ります。顔をそのままでポリゴン数を達成できそうなら、触らなくてもよいでしょう。その他体型変更のシェイプキーが入っている場合は、どこかの値で体型を固定して、シェイプキーは削除してしまうのが良いかと思います。もしくは、この後のポリゴン削減でcats pluginのdecimate機能を用いると、シェイプキーをある程度保存できます。(多くのポリゴンを減らした場合、完全ではありません。一旦decimateしてみて、シェイプキーの動きを確認し、問題があるようならシェイプキーを諦めるか自分で手直しするか、判断すると良いでしょう。)

マテリアルにテクスチャを割り当てる。

既にBlender上のアバターにテクスチャが貼られて表示されている場合は、この工程をスキップしてください。
VRChatアバターとして使用する場合、テクスチャはUnity上で適用するため、Blenderデータにはテクスチャが貼られていないことがあります。その場合はテクスチャを貼っておくことで、この後でポリゴンを削減したときに、UVの破損などが一目で分かるようになります。(私はテクスチャを貼らずに作業した結果、UVが崩壊して直すのに相当な労力が必要になりました…)
確認するには右上のViewport Shadingから、左から3つ目の Material Preview を選びます。

Material Preview

画像ではモデルが真っ白になっていますが、これはテクスチャが当たっていない状態です。テクスチャが適用されていると、この時点でテクスチャの貼られた表示になります。
ちなみに、この表示モードの変更は「Z」キーでも行えます。
作業中に表示を切り替えたくなった場合はショートカットキーが便利です。

オブジェクトモードに入っていることを確認して、画面右のアウトライナーでメッシュを選択します。右下のマテリアルプロパティを開くと、そのメッシュに割り当てられているマテリアルが表示されます。その中の Surface タブから、Use Nodes をクリックします。(すでにUse Nodes が青く表示されている場合は、押す必要はありません。)

ここで、Surfaceの中の Base Color の左の丸をクリックします。
出てきたメニューの中から、Image Texture を選択します。

さらに表れた表示の中から、Openを選択し、テクスチャ画像を選択します。

顔テクスチャ反映完了

これで無事、顔のテクスチャが反映されました。ほかのメッシュについても同様に作業し、すべてのテクスチャを反映したら完了です。

UVの確認

UVについても確認しておきましょう。UV Editing タブに移動すると、左にUV、右に3Dモデルが表示されます。

UV Editing

UV Editor画面の Open を押してテクスチャ画像を選択すると、画像のようにテクスチャ画像が表示されます。
テクスチャと対応するオブジェクトを右の画面で選んで、Editモードに入ると、左の画面に展開されたUVが表示されます。確認しておくべきなのは、シームです。右の3D画面で赤い線で表現された部分をシームと呼びますが、これがUVの切れ目になるので、ここを壊してしまうとUVの破損につながります。もし壊してしまった場合、あるいは頂点を減らす都合上シームに関わる部分を変更した場合は、このUV Editorを使って修正しましょう。
fbxファイルをインポートした場合、このシーム情報が含まれていません。その場合は、UVをすべて選択した状態でUVメニューからSeams from Island を選択すると、展開されたUVから 3Dモデル側にシームが設定されます。

Seams from Islands
シーム(赤線)のついたメッシュ

5.ポリゴンを減らす作業

いよいよポリゴン削減に入るわけですが、基本的にやることは3種類です。

  1. 見えない部分のポリゴンを削除する

  2. 不要な部分(アクセサリー類や頂点数が多く複雑な部分)を丸ごと削除する

  3. (ディテールを犠牲にして)頂点数を減らす

ディテールを犠牲にすればいくらでも減らしようはありますが、なるべく綺麗に仕上げたいのならば、3. で減らす頂点数が少ないほど有利です。既に衣装変更などの改変をしているのであれば、

  • 肌の露出が少ない

  • 服の形状がシンプル

  • 細かな装飾がない

アバターが適性が高いと言えます。とりあえず1つでいいからQuest対応のアバターが欲しい、というような場合はポリゴン削減しやすいアバター/衣装を選ぶのも手です。ちなみに今回使用しているTETRAちゃんはジャケットはのジッパーやスニーカーのポリゴン密度がかなり高く(ディテールが細かい)、ジャケットの前が空いているためインナーのポリゴンを消すことができず難易度は高めです。それでも達成可能なのでやればできるとも言えます。お気に入りのアバターがある方は頑張りましょう。

削減の手順

まずは方針を立てていきましょう。大体以下のような感じです。

  • ポリゴンが多い場所を探す

  • テクスチャで再現することも視野に入れる

  • 見えない場所を丸ごと消す

  • 見える場所のポリゴンを削減する

ポリゴンが多い場所を探す

各メッシュのポリゴン数を見て、大体どこにポリゴンが多いのかを把握します。メッシュを選択してエディットモードに入ると、そのメッシュのポリゴン数が分かるので、メモ帳などに記録して、それぞれ何ポリゴンくらいまで減らせば目標達成できるのか方針を立ててみましょう。また、ポリゴン密度が特に高いパーツを削除すると他の部分にポリゴン数を割けるようになるため、不要と思った部分は削除していきましょう。今回は、ジャケットのジッパー部分にかなりポリゴンが集まっており、ジッパーを丸ごと削除してもデザイン上大きな変化はないとみて、この部分はすべて削除します。

ジッパー部分のメッシュが細かい

テクスチャで再現することも視野に入れる

もし多少なりとも画像加工やお絵描きのスキルもしくはやる気があるのであれば、ポリゴンで作られている部分を消して、テクスチャで再現するという手法をつかうことでクオリティをあまり下げずにポリゴン数を減らすことができます。今回は、スニーカー部分にかなりのポリゴン数が集まっていたため、靴紐やバックルなどの部分を全て削除し、テクスチャで再現していきます。

ポリゴン密度の高いスニーカー

見えない場所を丸ごと消す

外から見えない部分(服の中の素体など)はすべて削除しましょう。
消したいメッシュを面選択モード(ショートカットキー: 3)で選択します。選択方法は何でもいいですが、ドラッグで矩形選択をするか、 Cキーを押して塗りつぶし選択を使うといいと思います。塗りつぶし選択は右クリックすると選択を完了できます。
選択出来たら一度服のオブジェクトを表示して、選択したメッシュが外から見えないことを確認します。

服で隠れるメッシュを選択
選択したメッシュが見えている

確認出来たら、 Xキーを押して削除メニューを出し、 faces を選んで面を削除します。この時、ぎりぎりを攻めすぎて必要なメッシュまで消してしまうと面倒なので、しっかりと多方向から確認しながら削除するメッシュを選択してください。もしうっかり消しすぎてUndoも出来なくなった場合は、新たにいい感じにメッシュを貼ればOKです。辺もしくは頂点を選択し、Fキーで面を貼ることができます。


見える場所のポリゴンを削減する

いよいよメインディッシュですが、自動削減機能(cats, decimate)を使う方法と、手動で削減する方法があります。楽なのは自動、仕上がりが綺麗なのは手動です。

2022.08.07追記
何度かQuest対応を行った結果、見える場所のポリゴンを消す方法の最適解が分かってきたので追記します。ポリゴン削減の方法は大きく分けて以下の3種類あります。

  • CATS Pluginのdecimate機能を使う

  • Blender標準のdecimate modifierを使う

  • 手動で削減する

ずばり、オススメなのは手動とCATSの併用です。
手動でDissolve Edgesを行いざっくりポリゴン数を減らしておき、そのあとでCATSのdecimate機能で自動削減を行います。この方法が最も労力と仕上がりのバランスが取れていると思います。

2023.01.06追記
なんだかんだ、クオリティを求めるなら全部手動が一番良い結果を得られます。特に形状的にポリゴン数の達成がギリギリの場合、破綻する可能性のある関節部のみに最適な配置で必要な頂点を集め、その他の部分は限界まで削ることになりますが、そのような調整は手動でしかできません。自動削減を行うとすべて三角ポリゴンになるためその後の手動調整は非常に困難なため、クオリティを求める場合はすべての作業を手動で行うことになります。
特に手は関節が集中しており、その他の部位と一緒に自動削減すると破綻する可能性が高いです。

・catsを使う場合
自動削減機能には、blender標準機能のデシメートとcats blender pluginの機能を使う2つの方法があります。catsの方はメッシュが自動で統合されてしまうなどくせもありますが、シェイプキーを保存しながら自動削減ができるなど、機能的には上です。シェイプキーを保存できるため、顔のメッシュも削減することができます。
catsの使い方は、こちらの記事を参考にしました。

cats でポリゴン削減を行う場合の手順は以下の通りです。

  1. ポリゴン数を多く当てたい顔や統合したくないメッシュを別アーマチュアに分離する

  2. 各アーマチュア単位でデシメート(自動ポリゴン削減)する

  3. アーマチュアを1つに統合しなおす

めんどくさいなら全部まとめてデシメートすることもできるんですが、それをやってしまうと主に顔のクオリティがかなり下がります。非推奨です。なので、まず顔とその他でアーマチュアを分離します。顔以外にも、ディティールを残したい部分やメッシュを分けたい部分がある場合はそれも分離します。つなげ直すのが少々手間ですが、できれば手も分けたほうが良い結果が得られます。

1.Armatureの分離
分離の手順としては、アーマチュアを丸ごと複製したのち、不要なメッシュを削除します。(Body以外のArmatureとBodyのみを含むArmatureのようになる)

Select Hierarchy

Armatureを右クリックし、 Select Hierarchy を選択します。これでArmatureの子のすべてのメッシュが選択されるので、Shift + Dを押して複製します。このとき、複製されたモデルを移動する操作になるので、右クリックで確定します。クリックまたはEnterを押すと位置を移動して確定できますが、右クリックすると移動せずに位置を確定します。

Armatureを複製
2つのArmature

これでArmatureが2つになりました。あとは、Armature.001からBodyを、Armature.002からBody以外のメッシュを削除します。

BodyのみのArmature

完了すると上の画像のようにBodyだけのArmatureができたはずです。
あとはそれぞれのArmatureに対してdecimateでポリゴン削減していきます。

2.decimateを実行

select armature

CATS Pluginの Model からポリゴンを減らしたいArmatureを選択します。なお、ここで選ぶのは画面右で緑アイコンで表示されている方のArmatureであることに注意してください。

正しいArmatureを選んだことを確認したら、Decimationの設定をします。 ModeはSmartを選択。Remove Doubles(重複した頂点を削除)にチェックを入れて、手を含む場合はSave Fingersにもチェックを入れます。その下の Tris で目標ポリゴン数を指定します。
どうやら顔には3000ポリゴンほど割り当てると良いようです。ただし、この時指定するポリゴン数を超えることもあるので、きっちり15000ポリゴンに収めるには、Body: 3000ポリゴン、Body以外: 11900ポリゴン のように多少余裕を見て数値設定したほうが良いです。
設定したら、 Quick Decimation をクリックすると、デシメートが実行されます。このとき、Armature下のメッシュは自動的に1つに結合されます。

3.Armatureの統合
各Armatureのデシメートが完了したら、Armatureを統合していきます。

CATSの Custom Model Creation 機能を使います。
Merge All BonesとRemove Zero Weight Bonesにチェックを入れます。
メッシュを統合する場合は、join Meshesにもチェックを入れます。
BaseとTo MergeにそれぞれArmatureを選択し、Merge ArmaturesをクリックするとArmatureのマージが完了します。

merged

さて、これでポリゴン数の削減が完了しました。今回はジャケットの脱ぎ着を実装したいので、Jacketだけ別メッシュとなっています。

・デシメートを使う場合
メッシュを選択し、PropatiesタブからModifier Propatiesを選択します。さらにAdd Modifierからdecimateを選択します。

Modifier Propaties
decimate を選択
decimateの操作方法

Decimate Modifierが追加されたら、Ratioの値を変更します。値を小さくするほどポリゴン数が減りますが、その分形状が崩れるため、ちょうどいい値を模索しましょう。Applyを押さなくてもポリゴン数は減っています。ただし、最終的にメッシュとマテリアルの統合を行う必要があるため、メッシュの統合前にApplyする必要があります。(Applyを押さずにメッシュを統合すると、decimateが反映されません!)
とりあえずBody(顔)を除くすべてのメッシュにモディファイヤーを追加し、ポリゴン数を見ながら各メッシュのRatioの値をいじっていき、いい感じのところが見つかったら一旦fbxでエクスポートしVRChat上で確認すると良いです。問題が無ければポリゴン削減は終了です。

・手動で削減する場合
作業後のポリゴンが最も綺麗になるのがこの方法です。時間も手間もかかりますが、見比べたらすぐにわかるくらいにはクオリティに差が出ます(元のポリゴン数にもよる)ので、やる気があるなら挑戦する価値はあると思います。
ポリゴンの減らし方には大きく分けてマージとディゾルブの2種類あります。基本的に、まずはディゾルブで大きく減らし、その後マージを使って頂点を減らし、残った頂点を辺上で移動しながら整えていくと良いと思います。

辺をディゾルブ(融解)するには、頂点または辺選択モード(それぞれショートカットキー 1, 2)に入った状態でAlt+クリックで辺を1周選択し、Xキー押下で削除メニューを出します。出てきたメニューから、Dissolve Edges を選択します。

Dissolve Edges
Dissolved Edge

四角ポリゴンが綺麗に並んでいる箇所では、適当にディゾルブして辺の行、列を減らしていくと良いです。残した辺の位置は動かせるのであまり気にしなくても大丈夫です。

マージするときは、複数の頂点をShift+クリックで選択し、Mキーを押下して、どの頂点にマージするか選択します。よく使うのは、At Last, At First, At Center の3つです。それぞれ最後、最初の頂点、中央に統合されるので、適宜使い分けてください。

Merge verticles
Merged verticle

頂点を移動するにはGキーを使います。Gキーを押した状態でもう一度Gキーを押すと辺上で頂点を動かせるため便利です。

頂点の移動
移動した頂点

なお、ここで注意点ですが、頂点を動かすと対応するテクスチャが引きばされる/縮む ことになります。なるべく元のデザインを崩さないためには、元の頂点位置を維持する方が良いでしょう。もっとも、頂点を減らしていくと動かさざるを得なくなるため多少は妥協するなりUVを調整する必要が出てくるかと思います。

軽くディゾルブ、マージを繰り返すと、下の画像のように頂点を減らすことができました。横列の頂点は左側もディゾルブされているので、厳密にはビフォーアフターになっていませんが、だいたいこんな感じで減らしていきます。このアバターで15000ポリゴンに持っていくなら、画像右側よりもう少し頂点を減らす必要があると思います。あとはこの作業をひたすら繰り返すだけです。頑張りましょう。

マージ、ディゾルブ作業後

各種Blender操作

私もまだまだBlenderを使いこなせていませんが、手動削減をしているとBlenderのいろいろな機能を使うことになるため、私の知る限りで便利な機能を紹介していきます。
・繋がったメッシュを選択
Lキーを押すとつながった部分を自動で選択することができます。これで選択してパーツごとに非表示にするなどすると便利です。
・塗りつぶし選択
Cキーを押すと塗りつぶし選択モードに入ります。マウスホイールでブラシサイズを調整して、選択できます。選択モードの解除は右クリックまたはEscキーで出来ます。
・投げ縄選択
Ctrl+右ドラッグで投げ縄選択になります。
・選択したメッシュを非表示
Hキーで選択したメッシュを非表示にできます。 再表示するときはAlt+Hです。Shift+Hとすると選択していないメッシュを非表示にできます。

ポリゴン削減が完了したら、メッシュやマテリアルの統合をする前に一旦fbxをエクスポートし、VRChatにアップロードしておかしなところがないか確認しましょう。大抵はおかしなところがあります。また、メッシュの結合をしてしまうと、ポリゴンの修正が困難になりますので、ここまでの時点でblenderファイル自体を別名で保存しておくことを強く推奨します。

6. メッシュ、マテリアルの結合

ポリ削減お疲れさまでした。あと少しです。最後にメッシュとマテリアルを結合し、テスクチャのアトラス化を行います。テクスチャのアトラス化とは、複数枚に分かれているテクスチャ画像を1枚の大きな画像として保存する作業のことです。

メッシュの結合

まず、メッシュの結合前に注意点ですが、この作業を行うとポリゴンの修正作業に戻ることができません。必ずメッシュの結合を行う前にblenderファイルを別名で保存しておきましょう。
保存ができたら、デシメートやミラーモディファイヤをApply(適用)して確定させます。
後はメッシュの結合は簡単です。Outlinerからメッシュを複数選択し、Ctrl+J でメッシュを結合します。このとき、最後に選択したメッシュの名前が結合後のメッシュの名前になるため、Bodyを最後に選択するようにしましょう。ちなみに、マウスカーソルがOutlinerなどの上にあると、Ctrl+Jが反応しないようです。押しても何も起こらない!となった場合はカーソルを左に持って行ってもう一度押してみましょう。

メッシュの結合

ここで注意点ですが、各オブジェクトのUVMapの名前が一致していないと統合後にマテリアルが正しく反映されません。特に改変アバターの場合、UVMap名が一致していない場合があるため、統合前にUVMap名をそろえましょう。Object Data Propatiesから確認できます。

マテリアルの結合とテスクチャのアトラス化

以下の2つのアドオンを利用します。この記事を上から読んでいる方なら、すでにインストールが完了していると思います。
Cats Blender Plugin
material-combiner-addon
material-combiner-addonについては、catsをインストールしたblender内にもダウンロードボタンがありますが、そちらはリンクが古いようで利用できません。
CATSタブから、Optimizationを開きます。Atlasを選択し、 Generate Material List を押下します。
そもそもCATSタブが見当たらないよ!という人はNを押しましょう。

Generate Materil List

マテリアルリストが生成されたら、その下のSave Atlas to.. を押して、アトラス化されたテクスチャの保存先を指定します。
保存が完了したら、Material Propatiesを選択し、マテリアル名が mateial_atras_xxxxx_1 となっていることを確認します。マテリアル名がしっかり変わっていて、マテリアルプレビューでアバターにしっかりテクスチャが当たっていれば、マテリアルの統合とテクスチャのアトラス化は完了です。

統合されたマテリアルを確認

2022.08.14追記。
このとき、テクスチャが64x64 px の真っ白な画像として認識されてしまうことがあるようです。その場合、その場合、Surface > Use Node > Base Color > Image Texture ではなくCATSの機能として追加される MMD Texture から Texture: Add を押してテクスチャを適用すると解決するようです。詳細については後日調べて追記したいと思います。

MMD Texture >add

また、検索でヒットした別の対処法についても併記しておきます。こちらのreddit記事によると、左上の File メニューから、
External Data > Unpack All Into Files
すると良いようです。ただし、私の環境では Unpack All Resorcesというメニュー項目が見つかりませんでした。代わりに Unpack Resorces という項目がそれに当たる気がします。

Unpack Resorces

MeshBakerを使う方法

この作業については、有料アセットのMesh bakerを用いてUnity上で作業することもできるようです。MeshBakerを使った手法については、『PC向けアバター 5000ポリまでダイエット - Quest Excellent を目指す本』を参考にしてください。

7.完成

これでBlender作業は完了です。fbxファイルをエクスポートし、UnityでVRChatにアップロードしましょう。エクスポートする時の注意点ですが、今回2つのコレクションを含んでいるため、active collection にチェックを入れるようにしてください。ここからの作業について詳しくは以下の記事を参考にしてください。

VRChatで見ると、無事にQuest Medium になっていますね。

以上、お疲れさまでした。この記事を参考に作業したけど分からない点がある/記事のミスを見つけた/記事の感想などありましたら、お気軽に私のツイッターまで連絡してくれると私が喜びます。
@Healsiohaiizo

参考文献一覧

PC向けアバター 5000ポリまでダイエット - Quest Excellent を目指す本

【VRChat】PC専用アバターをなるべく手軽にMediumでQuest対応したかったけど無理

【VRChat】PC向けアバター(50,000ポリ超)をポリゴン削減してFallback対応したメモ【CatsBlenderPlugin】

VRChatアバターをUnityだけで雑に軽量化する。(Quest対応編)

各種ツール

Cats Blender Plugin

material-combiner-addon

UnityEditor拡張 - がとーしょこらのWiki的メモ帳

【UnityEditor拡張】にゃんにゃんメッシュエディター(MeshModifyTool)

Unityだけでテクスチャのアトラス化ができるすごい奴+複数のメッシュを一つに結合できるすごいやつ

Mesh Baker | モデリング | Unity Asset Store


VRChat関連の技術的な情報などを書いています。「スキ❤️」や「フォロー」していただくとモチベになります。「サポート」していただいたら私が美味しいものを食べます。