見出し画像

VRChatで軽量化したい!マテリアル数を削減する方法 with Blender

 どうも皆様、一般自作勢VRChatterのR_Kinokoと申します。
 友人に期待の眼差しで、「マテリアル数を減らす方法の記事を書いてくれ、やくめでしょ」と言われたのでそれを書いていきます。

注意
・本記事はただの一般人がノリで書いているにすぎず、結果的にうまく動くものの、それまでの過程がスマートである保証はありません
・本記事の内容は、昨今流行りの非破壊的な操作ではなく、ファイルの書き換えを行う破壊的な操作です。記事内でも指示を出しますが、必ずバックアップを取って望んでください
・この記事の内容を真似して発生していかなる被害にも責任は負いかねますので、予めご了承ください
・Material削減なんて需要の殆どないこの記事を読んでるあなたはある程度、なんなら私以上にUnityにはお詳しいでしょうから、Unityの説明は簡素にさせていただきます
・VRChatのアバターは自由度が高すぎるが故に説明に抜けがあるかもしれませんが、そこは頑張って補完してください。
・用語の説明などは自分の理解を話しているだけで、正しい保証はないです

使用しているソフトウェアのバージョンについて
Blender:2.83.20
Unity:2022.3.6f1
Gimp:2.10


序 章 本記事の目的

 VRCでアバターのパフォーマンスランクを上げたいとき、まあ基本的にはAvatar Optimizerを使えばうまくいくもんですが、マテリアルだけは十分にできないようで(2024/05/11現在の情報)、それがネックで他は全部Good以下なのにMaterial数でMediumとかPoorになっているという方もいるでしょう。というかいるからこの記事を書いております。
 そいつを解決してやろうというのがこの記事の目的です。

 具体的にどれくらい減るんだというご質問に対しては、シェーダーの数分までマテリアルを減らせます。つまり例えば全身liltoonであれば、服と体すべて合わせて理論上マテリアル1つまで減らせます。
 クリスタルシェーダー等、特殊なシェーダーが含まれているとそこは減らしきれないので、あきらめるか、使っているシェーダーで何とか再現を試みることになります。

 レイヤーを扱える画像編集ソフト(GimpやClipstudio、Photoshopなど)と、Blenderを使うので頑張ってついてきてくださいね。

 第5章でほとんど自動でやってくれるツールの紹介もしますが、そこまでで説明する手作業でやっていることを理解して使うことを個人的にはお勧めしたいので、ちゃんと全部読もうね。
※複数のfbxを扱う方は自動ツールの使用ができませんので手動で行ってください。(技術的には可能ですが説明が複雑化するので今回ここでは説明しません。)

第1章 Unityの準備をしよう

 とりあえず、軽量化したいアバターのセットアップを行ってください。この記事をお読みになっている皆様ならお手のものでしょうからお任せします。
 ただし作業の過程でファイルの上書きを行いますので、普段使いのプロジェクトではない新規のプロジェクトで作成してください。

セットアップしよう
今回解説で使用しますアバターは拙作、無花果ちゃんとなります。
デザインは私ではないです。

 序章で服のマテリアルまで統合できるとお話ししましたが、これから行う作業を終え、ファイルを上書きした際に既に着ている服と衣装のPrefabが壊れることがあるという現象が確認されています。解決法を調査中です。
 一応の回避策として、Prefabから着せるのではなくfbxから着させることがあります。この方法をとりますとPhysboneなどのUnity上での設定画ない状態で服を着ることになりますが、軽量化する際にPhysboneなどは消してしまいますから一旦はそれで我慢してください。
 もしくは服のマテリアル削減は見送ってください。
 解決しました。解決法は解説内に取り込んでいるので気にせず読んでください。

第2章 テクスチャの準備をしよう

 マテリアルを減らすということは、簡単に言ってしまえばテクスチャの枚数を減らすことです。この時のテクスチャの数というのはメインとなるテクスチャの枚数のことを指し、NormalMapやMask、Matcapなどはその枚数に含みません。

 じゃあテクスチャを減らすってのはどうすればいいのかと言えば、それは単純です。以下の画像をご覧ください。

このような4枚のテクスチャがある時

 これを1枚にまとめるとは以下のようにすることです。

こうやってまとめていきます

 ね?単純でしょう?それでは始めていきましょう。


第1節 テクスチャを用意しよう

 とりあえず今回の解説では、liltoon準拠でお話を進めていきます。他のシェーダーを使っている方は、頭の中でうまく変換して読んでください。

 ここからしばらくUnity上の操作ですので、説明は簡単にいかせてもらいます。

 まずは使っているテクスチャを見つけるところからです。手順を箇条書きにして示します。

  • まず、作業用のフォルダを作ります。Unityから取り出したテクスチャなどをそこに置くフォルダになります

  • Hierarchy上からメッシュを選択します

  • Skinned Mesh Renderer内のMaterialsに入っているMaterialを押すとProjectタブがMaterialのある場所に移ります

  • Projectタブ上のMaterialをクリックするとInspectorにMaterialが表示されます

Materialはこうやって出すよ
  • liltoonの場合メインのテクスチャは、簡易設定タブの場合、色設定→メインカラー/透過設定(色変え)→メインカラー→色の左側に格納されています

  • 格納されているテクスチャを押すとProjectタブがテクスチャのある場所に移ります

Textureはこうやって出すよ
  • Projectタブ上でテクスチャを右クリックすると、メニューが表示されるのでそこからShow in Explorerを押すとテクスチャのあるフォルダがエクスプローラーで開かれます

  • 開かれたフォルダ内にある目的のテクスチャを初めに作ったフォルダにコピペします

  • NormalMapやMaskなどを用いているならそれらも同様の手順で探し、初めに作ったフォルダにコピペします

Textureをコピペしよう
  • この際、メインとなるテクスチャ・NormalMap・Maskなど種類ごとにフォルダを分けると分かりやすいです

※メッシュってなんだよ!という方はアップロードする際に使うVRCSDKのBuilderタブ→Validations→Polygons: 数字 の右にあるSelectを押すとメッシュの場所が全部選択されますので、確認しながらやってください。

 やると以下のようになると思います。

Textureの種類が多い程ファイル分けは有効です


第2節 fbxをコピーしよう

 fbxもコピーしておきましょう。
 初期ではない衣装を着せている、髪型を変えているなど様々な理由で、fbxの個数は皆様様々なので、必要な分だけ取り出してください。
 fbxの見つけ方は、Hierarchy上でメッシュをクリック、Skinned Mesh Renderer→Meshタブに格納されているメッシュをクリックするとProjectタブがfbxの場所に移ります。そこで選択されているものをShow in Explorerすればfbxのあるフォルダの場所へ到達できます。第1節で作った作業用のフォルダにコピーしておきましょう。

fbxはこうやって出すよ

第3節 テクスチャをまとめよう

 ではテクスチャをまとめていきます。
 今回は説明にGimp2.10を使います。再現できる方は他の画像編集ソフトを使ってもらっても大丈夫ですよ。
 今回の説明では4枚のテクスチャを1枚にまとめていきます。

 まず適当に1枚テクスチャをGimpで開きます。

 上部の 画像タブ→キャンバスサイズの変更→キャンバスサイズの幅と高さを2倍にします。

今回は4096を8192にします

 その後、他のまとめたいテクスチャをレイヤーとして読み込みます。

こうやって読み込むよ

 そして1ピクセルもずれなくきれいに配置しましょう。

こんな感じにやろう。ずれると完成形もずれます

※1:すべてのテクスチャのサイズがすべて同じであるとは限りません。以下の画像のように1枚だけ小さいということもありえます。この場合小さいままでも構いませんし、隙間なく埋めるために対象の画像サイズを大きくしてもかまいません。

こんな感じのことは往々にしてある
1つだけ確かなことはテクスチャは正方形である事だけ

※2:4枚以上のテクスチャを1枚にまとめる場合には以下の画像のように一部のテクスチャを小さくしてうまく正方形の中に配置することが必要です。

 配置が終わったら画像を保存しましょう。ファイルタブ→名前を付けてエクスポートをしましょう。エクスポートです、保存じゃないです。

名前を付けて保存しても画像は保存されないぞ!

 MaskやNormalMapなどのテクスチャがある場合は、先ほど配置した場所と同じ位置に対応するテクスチャを配置してまとめましょう。

位置関係を対応させよう

 追記:中にはMaskをかけずにEmissionなどをかけているメッシュもあるでしょう。そうしたものに対してはMaskの作り方を調べていただき、MaskをかけないMaskを作り対応する位置に配置してください。これをしなければ、そういったメッシュ部分に対して対応する機能が反映されないこととなってしまいます。(もしくはそういったテクスチャはいっそ無視することも手かもしれません、見た目が少々チープになるとは思いますが)

 はい。ここで第2章終わりです。

第3章 UVを1つにまとめよう

 ではここからBlenderの作業を始めます。
 今回の解説ではBlender2.83.20という少し古いバージョンを使用しています。基本的に大丈夫だと思いますが、最新版と違うところがあるかもしれません。まあそこらへんは、ガンバッテ!

 この章では、先ほどまとめたテクスチャにUVを対応させていきます。
 まずUVというのは何かと言いますと、簡単に言えばメッシュという3DをUVという2Dに変換してテクスチャに対応させてメッシュに色を付けるためのやつです。さっきテクスチャをまとめた結果、その対応がずれてしまったのでそれを直してやります。
 もっと簡単に言えば、メッシュはサイコロそのもの、UVはサイコロの展開図です。
 対応がずれたということのイメージとしてはこんな感じです。

テクスチャの上にある薄いあみあみがUVです。
テクスチャを変えてもUVは変わりませんので、1枚目でばっちりはまっていたUVは、2枚目ではすっかりずれてしまっています。これをこれから修正していきます。

第1節 Blenderの操作を知っておこう

 では早速動かしていきましょう。
 今回テクスチャをまとめる際に機械的に配置しましたので、同じようにUVも機械的に動かしたいです。しかし通常だと機械的にUVを動かすのは難しいので、正方形のUVを作ってそれと一緒に動かしたいUVを動かすことで、疑似的に機械的にUVを動かすこととしましょう。
※目分量でUVを動かすと大体ろくでもないことになります(一敗)。

 と、まずはBlenderの語句とUI、基本操作について少しお話しておきます。都度補足もしますが、覚えておくとここから楽になります。

語句
メッシュ: 頂点と辺、面の集合体のひと固まりを指す
オブジェクト: メッシュを格納している固まり、複数のメッシュが格納されていることもある
オブジェクトモード: 基本の状態、オブジェクトに関する操作ができる
編集モード: もう一つの基本の状態、メッシュに関する操作ができる
タブ: BlenderのUI上部にある、Layout、Modeling、Sculptingなどのタブたちのこと、LayoutタブとかModelingタブのように呼ぶ
UV: 立体的であるメッシュを平面に変換したもの、UV Editingタブで主に扱う

UIについて

 まずBlenderを起動するとこの画面からスタートします。
 赤線で囲われているオブジェクトたちは毎回消してからスタートするので、Blender使いの間ではこの作業のことは「いつもの」で通用するとかしないとか。

Blenderを起動したときの画面

 この赤線の中がメインとなる画面です。この画面でオブジェクトをいじったり、メッシュをいじったりなど行います。正式名称は知らないので今回の解説ではメイン画面と呼びます。

メイン画面

 この赤線の中はシーンコレクションと呼びます。UnityでいうHierarchyに近いです。ここでオブジェクトを非表示にしたりなんなりできます。

シーンコレクション

 この赤線の中はプロパティメニューと呼びます。ボーンの設定とかなんかいろいろやるところです。

プロパティメニュー

 この赤線の中の赤い丸のタブはマテリアルプロパティです。長いのでマテリアル設定と呼びます。マテリアルの設定ができます。

マテリアル設定

 この赤線の中の赤い丸に囲われている部分では、現在のモード、具体的にはオブジェクトモードか編集モードかなどが確認できます。またここをクリックして手動でもモードを変えることができます。

モード

 この赤線の中はタブと呼びます。今回はLayoutタブとUV Editingタブしか使いません。最初はLayoutタブにいます。今回の作業では基本的にUV Editingタブにいることが多いです。

タブ

UV EditingタブのUI

 UV Editingタブに来ると表示が先ほどとは少し変わりますので、こちらも少し説明を。

 この赤線の中はLayoutタブと同じ役割を果たします。UV EditingタブのLayoutタブなんですが、長いのでLayout画面って呼びます。文脈で判断してください。またこちらのタブの編集モードで選択したメッシュは、次に紹介するUV編集画面で対応するUVを編集できるようになります。

Layout画面

 この赤線の中はUVを編集する場所です。UV編集画面と呼びます。UVを編集します。

UV編集画面

 この赤線の中の磁石みたいなやつは、Snapモード起動ボタンです。今回使用しますので場所を覚えておきましょう。

Snapモード起動ボタン

 このSnapモード起動ボタン右隣にある赤線の中にあるメニューは、Snapモードの動き方を変えるボタンです。今回使用しますので場所を覚えておきましょう。

Snapモードメニュー

以上UIの説明でした。

操作方法(共通)
マウスホイールドラッグ: Unityの操作と同じで、画面をぐりぐり見れます
Shift+マウスホイールドラッグ: 視点に平行な視点移動ができます
マウスホイールスクロール:表示の拡大縮小
tab: 表示モードの切り替え(基本的にはオブジェクトモード↔編集モード)
CTRL+I: 選択を反転
A: 画面上のすべてを選択する
何もないところで左クリック: 選択解除
 ※何もなくても頂点に近いとそれを選択してしまうので本当に何もない場所でクリックすることが重要です
Delete or X: 選択しているものを削除する(Deleteの場合は押すと一発で消え、Xの場合削除する前に確認が入る)
CTRL+Z: Undo、操作を一回戻す(初期設定だと50回前まで戻せる)
CTRL+Shift+Z: Redo、戻した操作を戻す(他のソフトのCTRL+Yに当たる)
S: 選択したものを拡大縮小する Sを押した後に数字を入力するとその倍率に拡縮してくれる。例:S→0.5 大きさを半分にする。

オブジェクトモードにおける操作
左クリック:オブジェクトを選択します
Shift+左クリック:オブジェクトの複数選択
Shift+A:オブジェクトの追加
(何かを選択した状態で)G: 選択オブジェクトの移動

編集モードにおける操作
左クリック:頂点を選択します
Shift+左クリック:頂点の複数選択
(頂点の上で)L:リンク選択、その頂点と辺でつながっているメッシュ全体を選択
Shift+A:メッシュの追加
(何かを選択した状態で)G: 選択頂点などの移動

多分今回使う要素は全部紹介できたと思います。忘れても大丈夫なように都度説明するつもりなので、欠けがあったらそこで補完してください。

第2節 つくったテクスチャに合わせてUVを動かそう

 では、始めていきましょう。Blenderを起動してください。
 そしてまず何よりも先に、プロジェクトの保存をしましょう。CTRL+Sで保存しましょう。保存したらメイン画面上で全選択[A]をしていらないものを消しましょう。そう、いつものってやつです。
 次に先ほどUnityから引っ張ってきたfbxをBlenderにインポートします。
インポート手順は以下の通りです。

Blenderを開く→ファイル→インポート→FBX (.fbx)→fbxファイルを選択→▶アーマチュア→「リーフボーンを無視」にチェックを入れる→「FBXをインポート」ボタンを押す

リーフボーンを無視のチェックを忘れるな

 そして、出てきた画面からさっきコピペしたfbxファイルのところまで行って、インポートしましょう。

 インポートすると全選択された状態なので、選択解除しときましょう[何もないところで左クリック]。
 シーンコレクションを見るとこれは読み込んだアバターにもよりますが、Armatureがあると思います。今回ボーンは触らないので右端にある目のようなマークをクリックしてボーンの表示を消しましょう。VRChatのロード中のアバターみたいなクリスタル形状のやつが全身から見えなくなったと思います。

赤丸のあたりにあります

 読み込んですぐの状態だと、当然服など着ている状態です。今回私はアバター初期搭載の服をそのまま使うので表示したままですが、初期衣装ではない服を着せている方は、服については作業する必要がないので表示を消しておきましょう。
 先ほど非表示にしたArmatureの今度は左側に▶のマークがあります。これを押すとボーンに紐づいたオブジェクトがすべて見えるようになりますので、今回必要なオブジェクト以外はすべて目のマークを押して非表示にしておきましょう。後が少し楽です。

 では、本章の序盤で述べた機械的に動かすための正方形のUVを出していきます。(オブジェクトモードで)オブジェクトを生成[Shift+A]します。出てきたメニューから、メッシュ→平面を選択し、平面のオブジェクトを生成します。

この操作をもう一度行います。現時点では1つ目と2つ目の平面のオブジェクトが重なってしまっていてわかりにくいので、オブジェクトを適当に動かします[G]。ここまで完了したらUV Editing タブへ向かいましょう。

こんな感じになれば2つの平面の見分けも付きやすいでしょう

 UV Editingタブに来たら、現在のモードがオブジェクトモードであることを確認して(編集モードになっていたらオブジェクトモードに戻してください[TAB])、Layout画面上で全選択をします。しましたらTabを押して編集モードへ入りましょう。

オブジェクトモードで全選択

 編集モードに入ったとき、メッシュが選択されていたら選択を解除しておいてください[何もないところで左クリック]。
 では、シーンコレクションを見てください。さっき▶を押して開いたArmatureが閉じてしまっていると思うのでもう一度開いて、非表示にしていない好きなオブジェクトをクリックしましょう。

こんな感じ(選択は解除しとこうね)

 次にプロパティメニュー内のマテリアル設定を表示します。ここでは今さっきクリックしたオブジェクトに当たっているすべてのマテリアルを確認することができます。オブジェクトによっては2つ以上当たっていることもあります。初めから1つマテリアルが選択された状態だと思いますので、

割り当て 選択 選択解除

 と、あるところから選択ボタンを押しましょう。

選択解除はここ
押すとこんな感じ

 そうするとそのマテリアルが当たっているメッシュがすべて選択されます。また同時に選択されたメッシュに対応するUVがUV編集画面に表示されます。
 UV編集画面に表示されたUVを見るとどこかで見覚えのある形状が表れないでしょうか?そう、まとめる前のどれかのテクスチャの形状と同じような形が表示されたと思います。
 Layout画面にある先ほど作成した平面の内のどちらか一方の頂点(正方形の四隅のどれか)の上にカーソルを置いてリンク選択[L]します。

さっきより左の画面が薄くなった

 するとUV編集画面上が少し薄くなったと思います。これは正方形のUVが画面を埋め尽くしているからです。
 UV編集画面へと視点を移し、UV編集画面上で全選択をします。今回の選択したUVに対応するテクスチャはもともとの正方形に占める大きさを半分にして左上に配置しましたね。のでまずはUVも大きさを半分にしましょう。拡縮[S]をし、倍率0.5を打ち込むとUVの大きさが半分になりました。

全部選択してSをおして
0.5を入れて拡縮を確定するとOK

 では機械的に動かすための作業をしましょう。
 Layout画面に視点を移し、先ほど選択しなかった方の平面の頂点の上にカーソルを置いてリンク選択[L]します。すると先ほどと同様にUV編集画面が薄くなりました。これでUV編集画面の四隅に基準になる頂点が表示できました。

四隅に新しい頂点が見えるようになった

 UV編集画面の中央上部のあたりに目を向けると、マグネットのようなボタンがありますので押します。青色になったら有効化されています。またその右隣にあるメニューを開きスナップのモードを頂点へと変更します。

スナップを起動しよう

 UV編集画面のメイン部分に視点を戻し、画像のような状態になっていることを確認してください。

 それでは、カーソルを選択されているUVの左上のあたりにおいて、UVを左上に移動させます[G]。(移動の確定は左クリック)左上に移動させた理由はテクスチャを見ればわかると思います。理解してください。大まかに移動させたら左上の頂点をズーム[マウスホイールスクロール]して、頂点が合わさっているか確認します。ずれているようであれば、もう一度Gを左端の頂点にカーソルを合わせた状態で押すことでうまくスナップされると思います。

うまくスナップできました。
でもたまにずれてるのでズームしてちゃんとできてるか確認

 ズームを戻してみると、どうでしょうか。テクスチャの一部分が再現できたでしょう。見比べてみるとこのように

いい感じ

 よさそうですね。後はこの作業を繰り返し、各マテリアルのUVを移動していきます。ここからは繰り返しになりますので割愛させていただきます。

 すべて終わったらLayout画面で全選択して見ましょう。先ほどまとめたテクスチャと同じような形になったでしょうか。
※まったく同じ形にはならないことが多いですが、雰囲気同じ感じであればよいですよ。

いい感じ2nd season

 ここで同じ形ではあるけど、まだ足りないという方は、追加の衣装や追加の髪形のマテリアルも一緒にまとめようとしている方でしょう。そういった方は、本節を最後まで終えた後、本節の初めに戻り、対応するfbxをBlenderで読み込んで同様の作業を繰り返してください。
 ※注意:必ず別のプロジェクトを立ち上げてfbxを読み込んでください。fbxを保存する際に不具合が発生する原因になります。今回の作業では1つのfbxで1つのBlenderプロジェクトを徹底してください。

 では、ひとまずこの節を最後までやり切りましょう。先ほど他のfbxの作業をする必要が判明した方も一旦は最期までやり切ってくださいね。

 Layoutタブへ行きオブジェクトモードにします。もうなっている場合は何もしなくてOKです。
 シーンコレクションを見て非表示になっていないオブジェクトを1つずつ確認していきます。確認する内容は、プロパティメニューのマテリアル設定に2つ以上のマテリアルが入っていないかどうかです。
 2つ以上のマテリアルが入っているオブジェクトを見つけたら1つ以外削除します。削除方法は削除したいマテリアルを選択した状態で、右にあるマイナスボタンを押すことで削除できます。

選択して、マテリアル2つあったら
1つ消します

その後、編集モードへ変え[Tab]、全選択[A]した状態で、マテリアル設定の

割り当て 選択 選択解除

 の中から割り当てを押します。

全選択して割り当てしよう

 その後layout画面をオブジェクトモードに戻し、他のオブジェクトについても同様の操作を行い(すべてのオブジェクトのマテリアルが1つになるようにし)ます。

 お疲れさまでした。現在作成した平面が残ったままですのでそれを削除しましょう。

平面を選択して
削除[X or Delete]

オブジェクトモードになっているのを確認したらメイン画面かシーンコレクションから平面を選択して削除してください。間違えて本体のオブジェクトを削除しないように気を付けてくださいね。

 これでBlenderでの作業はfbxのエクスポートを残すのみとなりました!

ファイル→エクスポート→FBX (.fbx)

ここで出てきた画面の右側、トランスフォームタブのスケールを適用を、「全ローカル」から「すべてFBX」に変更して、作業フォルダにコピペしたfbxファイルへ上書きエクスポートしてください。

fbx出力

お疲れさまでした!3章終了です!あと一息頑張りましょう!

第4章 Unityに変更を適用しよう

第1節 fbxを上書きしよう

 第3章で作成したfbxをUnityのプロジェクト内のファイルに上書きしていきます。ここで注意点を1つ、この作業を行う際には必ずUnityを落として行ってください。
 複数のfbxに対して作業を行った方はそれらすべて上書きしましょう。
 上書きが終わったらUnityを起動してOKです。

 このタイミングで、一部の服はPrefabと既に着ている服のデータが破損して、fbxからしか服を着せられなくなり、服の着せ直しが必要になります。(解決法調査中)

 またアバターの見た目がとんでもなくひどいことになりますが、こちらはすぐ直りますので、次に移りましょう。

結構破滅的な見た目になってる

第2節 テクスチャを入れてマテリアルを適用しよう

 第2章で作成したテクスチャをUnityのAssets内、分かりやすい場所へドラッグアンドドロップしましょう。

 Hierarchy上の適当なメッシュを選択し、Skinned Mesh Renderer→Materialsから入っているマテリアルを選択し、マテリアルの設定をしましょう。
 またMaterialsに2つ以上マテリアルが入っている場合は1つだけにしましょう。
 liltoonであれば、色設定→メインカラー/透過設定(色変え)→メインカラー→色の左側にあるテクスチャの場所へ、先ほどUnityに入れた作成したテクスチャを入れます。同様にして、NormalMapやMaskなどを適用してください。またMatcapの設定については、うまくMaskを自作して解決してください。

今回使用するテクスチャの中に透過テクスチャが含まれている場合、liltoonの場合、描画モードを半透明にし、基本設定→基本設定→RenderQueueの数値を3200程度にすると透過テクスチャがうまく作用するようになります。

 今設定したMaterialを、他のメッシュのSkinned Mesh Renderer→Materialに入れます。再度設定するのではなく、今設定したMaterialで元々入っているMaterialを上書きしてください。
 この時も先ほどと同様に、2つ以上のマテリアルが入っていましたら1つにしましょう。

これで、マテリアル数の削減は完了です。お疲れさまでした!

第5章 第2章と第3章の作業を自動でやってもらおう

 序章でもお伝えしたように第2章と第3章の内容を自動でやってくれるBlenderのアドオンが存在します。ここからはそれの紹介となります。
※複数のfbxを設定する方はこちらのアドオンは使用できませんので手動で行ってください。(技術的には可能ですが、説明が複雑化するので今回は説明しません。)
※MaskやNormalMapは手動でまとめる必要があります。自動生成されたテクスチャを見て配置を合わせてください。

第1節 MATERIAL COMBINER BLENDER ADDONは強い

 では早速ご紹介します。テクスチャの統合とUVの移動を自動でやってくれる私たちの心強い味方、MATERIAL COMBINER BLENDER ADDON君です。

 まず導入方法からご紹介します。
 リンク先のGithubにアクセスしていただきページ中腹あたりにある、INSTALLATIONから
 1.Download an addon: Material-combiner
の部分からアドオン本体をダウンロードしてください。
 zipファイルがダウンロードされますが、解凍は必要ありません。

 次にBlenderを起動します。
 編集→プリファレンスから、画面右上インストールをクリックし、先ほどダウンロードしたzipファイルを選択します。
 アドオンが読み込まれますので、アドオン名左側、チェックボックスにチェックを入れるとインストールが完了します。
 インストールが完了するとメイン画面の左側にある引き出しメニューにMatCombinerタブが追加されています。引き出しメニューは以下の画像の場所から引き出せます。

引き出しメニューはこの赤丸の位置にあるよ

移動しますとMain Menuのところに何かダウンロードしろと書いてありますので、そいつをダウンロードしてBlenderを再起動(何回かダウンロードボタンを押して再起動を繰り返す必要があるかもしれません)すると、ダウンロードしろと言っていたボタンがあった場所がGenerate Material Listに変化し、完全にインストール完了となります。作業を始めましょう。

 Unityからコピペしてきたfbxを読み込んでください。

 このMATERIAL COMBINER君、そのままだとテクスチャをまとめてくれない(というよりfbxファイルを読み込むだけだとテクスチャが読み込まれない)ので、テクスチャをBlenderに認識させる必要があります。ここだけが少し手間ですね。

 では認識させていきましょう。適当なオブジェクトを選択して、プロパティメニュー内マテリアル設定を開き、ベースカラーと書いてある場所の右端にある〇をクリック、出てきたリストから画像テクスチャを選択。

〇を押して
画像テクスチャを選択する

 すると真下に開くというボタンが出てくるのでクリックし、そのMaterialに適したテクスチャを開いてください。(名前を見れば基本的に明らかだと思います。)

開くを押して対応するテクスチャを読み込もう

 この操作をすべてのMaterialに対して行います。

 ちゃんとすべてのMaterialに対して行えたかを確認したい場合は、以下の画像のボタンを押す(見つからない場合はマテリアルプレビューの表示方法を調べてください)と3Dモデルに色がついて見えるので、ついていない場所がなければまあ大丈夫でしょう。

マテリアルプレビューを付けると色がつく(ちょっと色が淡いのは仕様です)

 終わりましたら、MatCombinerのタブを開き、Generate Material Listをクリックすると準備は整いました。

Generate Material Listを押そう

その下にあるSave Atlas to..をクリックすると自動でまとめられたテクスチャの保存場所を聞かれるのでわかりやすい場所に保存してください。この時点でUVの移動も完了しております。

Save Atlas to..を押そう

 fbxの上書きエクスポートをして、第4章につながります。楽でしょ?

第2節 Blenderの奇妙なアドオン 透過テクスチャは使えない

 このように非常に便利なMATERIAL COMBINER君なのですが統合するテクスチャの中に透過テクスチャが含まれているとうまく自動で統合できません。透過テクスチャが含まれている場合は手動でやるか、うまく回避してください。

終 章 本記事の成果とおすすめの記事

第1節 本記事の成果を確認しよう

 では、Material数のBefore Afterなど見て終わりにしましょう。今回はアバターに関係するすべてのマテリアルを統合したのでおそらくMaterial数は1になっている事でしょう。
※この画像は本記事の操作を行った後、Avatar OptimizerのMerge Skinned Mesh機能を用いてSkinned Mesh Rendererを統合し、その機能に付随する共通のマテリアルを統合の機能を使用しています。Avatar Optimizerの使い方は下で紹介している記事を参考にしてください。ここでは紹介しません。

Before(アップロードに使用するVRCSDKで確認)

一応SkinnedMeshも写してます

After(anatawa12’s gist pack for Unity-Actual Performance Windowで確認)

確かにマテリアルが減りましたね

完璧ですね。

第2節 Mesh RendererとかのMaterial以外の軽量化はこの記事を見よう

 俺にこの記事を書かせた元凶が、Material以外の軽量化の記事を書いてます。これを読んで君もPC GoodいやいやAndroid Goodを目指そう(無理)

チラシの裏

 俺は何でこんな記事を書いてるんだ?
 忘備録にもなりゃしないぞ。
 まあ皆様のお役に立てたならうれしいです。というかそうでなくては本格的になんで書いたかわからなくなってしまいますので。
 最後に B l e n d e r は い い ぞ 、 自 作 は い い ぞ やってくれ、必要だろ
Twitter:@mushrature27
Booth:https://rkinoko.booth.pm/


この記事が気に入ったらサポートをしてみませんか?