CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【VRChat】マテリアルの切り替え方法と結合方法についての解説
こちらの記事ではVRChat向けのマテリアルの切り替え(シェーダー系)、或いはマテリアルの統合方法について解説しています。
切り替えはアバターのクオリティアップ、結合はアバターの軽量化につながるので覚えていて損はないでしょう。
また、今回利用させていただくアバターはこちらです。
切り替えの行い方
マテリアルの切り替え、もといシェーダーの切り替える方法は2つあります。
アセット一覧から直接選択し切り替える
1つ目の方法は、アセット一覧から使われているマテリアルを選択し、そこからシェーダーを切り替える方法です。
デメリットとしてはアセット一覧から毎回フォルダーを開かないといけない為、時間がかかり手間が増えるという点です。
アバターからオブジェクトを選択しそこから切り替える
2つ目の方法は、Hierarchyからアバターに使われているオブジェクトを選択、出てきたInspectorからマテリアルを切り替える方法です。
そのオブジェクトに使われているマテリアルのみここに表示される為、他のマテリアルと混合することが無くなります。
デメリットは特になく、変えたいマテリアルだけを簡単に見つけることが出来るので前述の方法よりお勧めの方法となっています。
切り替えの際の注意点
マテリアルはシェーダーによって描写を行っていますが、切り替える際には様々な注意点があります。
使えるシェーダーには制限有
VRChatは基本的には殆どのシェーダーをそのまま利用できますが、Quest向けとしてアバターをアップロードするとなると、使えるシェーダーが制限されてきます。
Quest向けの設定でサポートされていないシェーダーを選択し、アップロードしようとすると下記の記号のエラーが出たりします。
デフォルトの物では選択肢が少ない
デフォルトの物では、用途が多いマテリアルが少なく、アバター向けとは言えないものとなっています。
どちらかというと表現法はリアル趣向ですが、VRChatでよく使われている女の子などのアバターのような見た目を出すには、違うシェーダーを使う必要があります。
代表的なものとしては上記のliltoonとなります。
結合の行い方
全てを結合させることもできますが、今回は結合の中でも最も簡単な「同じマテリアルを使っているメッシュを結合し、同じテクスチャを使っているマテリアルのみを結合する」ことを目標にします。
Unityの標準機能では、マテリアルの結合が出来ないので別途アドオンをダウンロード、プロジェクトにインポートする必要があります。
方法
結語の際は別途アセットが必要です、今回利用するアセットはこちらになります。
ページを開きましたら青で表示されている「マイアセットに追加する」をクリックします。
追加するにはまずUnityアカウントにログインする必要があります。
クリックしたらセットアップしたいアバターがあるアバタープロジェクトを開きます。
開きましたら上のタブ一覧からWindow → Package Manager を選択、Package Managerのウィンドウが開きます。
My Assetsタブを選ぶとMesh Baker Freeという項目が表示されるのでImportをクリックします。
Assets一覧にフォルダが追加されました、これでMesh Baker Freeアセットの追加は完了です。
Hierarchyの操作に入ります、上のタブ一覧から
GameObject → Create Other → Mesh Baker → Texture Baker and Mesh Baker
の順に選択します。
Hierarchyに画像のオブジェクトが追加されました、こちらを選択するとInspectorに色々内容が出てくるのでこちらをベースに触っていく形になります、英語ですが頑張って理解していきましょう。
まずはTexture Baker(0)の方を触っていきます。
動画のように、アバターに使われているメッシュの中で何でも良いので指定の箇所に1つドラッグします。
次にMeshBakerの方に移動し、Outputの部分を、Bake into Prefabに変更し、Create Empty Prefabをクリックします。
別ウィンドウで、Assetsのどこにprefabを作るか?というフォルダ指定のウィンドウが出てくるので分かりやすい名前にして保存します。
作成し終えたら、下にあるBakeというボタンを押すと、メッシュの情報が保存されたファイルが作成されます。
次にメッシュの結合作業に移ります。
TextureBaker (0)の方に戻り、またアバターのメッシュをドラッグします。
今回ドラッグするのは、「同じマテリアルを持ったメッシュオブジェクト全て」です。
私の場合は、Buggypants,inner,outerwearにしました。
これらの3つは同じマテリアルが利用されています。
MeshBakerの方に戻り、今度はOutputをBake Into Scene Objectに変更します。
そして、Meshの項目が先程作成されたMeshが登録されていることを確認してください。
されていない場合はドラッグすることで簡単に登録できます。
Settingsの、Use Shared SettingsをNoneにします。
すると、下の色々な項目が触れるようになるので、
Include BlendShapesにチェックを、
RendererをSkinned Mesh Rendererに変更します。
これらが完了したら、一番下のBakeをクリックします。
Hierarchyに結合後のメッシュが生成されました。
こちらをアバターの中に設置して、結合前のオブジェクトを削除、或いはアバターのアップロードから対象外の位置に位置変更後、アバターをアップロードして完了です。
こんな感じです。
最初にメッシュの生成作業を行いましたが、
こちら、メッシュを何も指定しないままBakeするとUnity上では表示されているのになぜかVRChatでは表示されないという現象が発生します。
その為、何かメッシュファイルを指定してやらないといけない形となっています。
これで結合作業は完了です。
アバターをアップロードしてみます。
アバターをアップロードしようとしたら修正が必要なエラーが発生していましたが、こちらはAuto Fixで大丈夫です。
ゲーム内で問題がないことを確認したら結合完了です。
メリット
メリットは複数あります。
- 結合後の数によってはアバターのパフォーマンスランクが下がる
- 当作業によってメッシュオブジェクトの数も減るのでその点のランクも下がる
- 動作が軽くなる可能性がある
など、主に軽量化の面でメリットが多いです。
結合の際の注意点
同じマテリアルを使っているオブジェクトを結合するだけだとマテリアル自体にデメリットはあまり発生しませんが、違うマテリアルを結合した場合はオブジェクトの面でもいくつかデメリットがあります。
衣装の切り替えが不便になる
こちらの動画内で、アウターのみを脱いだり着たりしていますが、こちらが出来なくなります。
理由としては、アウター、インナー、ズボンが結合によって1つのオブジェクトになった為、分けて消すことが出来ない形になります。
表現のされ方が同じになる
同じテクスチャを使っているが、マテリアルが別々になっている物を結合した時に起きるデメリットです。
マテリアルが一つに統一される為、シェーダーの設定も統一されてしまいます。
見た目の表現に拘りたい方は気になるかもしれません。
金属の質感等を元から表現していない場合はそんなに違和感は出ない場合もあります。
マテリアルエラー
余談ですが、アバターの見た目がピンクになる場合は、使われているシェーダーの読み込みに失敗しています。
こういう感じの物です。
この場合は必要なシェーダーファイルをアセットとしてインポートすることによって解決します。
インポートしても解決しない場合はアバターをインポートする前にシェーダーアセットをインポートしてみましょう。
動画はカスタムシェーダーをインポート後、ハオラン君をインポートしています。
正しいシェーダーをインポートしておけば、ピンクになることはまず無いです。
まとめ
マテリアルが1つでも、そのマテリアルを使ったメッシュが3つ存在すると、その分アバターに使われていると認識されているマテリアルが増えてしまいます。(メッシュが3つのマテリアルが3つ)
この結合をマスターするとVery PoorからGoodに落とすことも夢ではないでしょう。
お疲れ様でした。