CGBoxの一部の記事にはアフィリエイト広告が含まれております。
VRChatアバター向けシェーダー設定の基本
本記事は2023年8月時点の内容です。VRChatはアップデートによって設定画面が大きく変わる場合があるため、最新の情報と併せてご覧ください。
シェーダーの基本的な考え方
Unityにおけるシェーダー
まず、よく混同されがちな「シェーダー」と「マテリアル」は、公式マニュアルで明確に区分・定義されています。
これをざっくりまとめると、以下の通りです。
- シェーダー:マテリアルからパラメータを受け取る設定画面も含めた、描画に必要な処理を示したプログラム
- マテリアル:シェーダーに使用するパラメータ(RGB・反射度など)を割り当て、それぞれ保存するファイル
Unityのマテリアルはシェーダーと1対1の関係で成り立っており、1つのマテリアルに複数のシェーダーを割り当てることは出来ません。
ただしマテリアルとは「パラメータを保存するファイル」のため、複数のマテリアルで同じシェーダーを使用し、各マテリアルで異なるパラメータを設定することが可能です。
VRChatでのシェーダー設定の意義
3Dモデルに質感を与えるときは、リアル調・アニメ調・モフモフなもの・キラキラ光るもの…といった、モデルのモチーフや部位によっていろいろな表現が考えられます。
これらの質感に応じて、アバターに適切なシェーダーを設定することで、「なりたい自分の姿」や、「見たいうちの子」などの表現に近づけることが出来ます。
Unityのレンダーパイプライン
Unityには以下3つのレンダーパイプライン(画面描画方法)が搭載されており、これらに対応しているかは各シェーダーによって異なります。
- Build-in Render Pipeline (BRP、ビルドインレンダーパイプライン)
- Universal Render Pipeline (URP、ユニバーサルレンダーパイプライン)
- HD Render Pipeline (HDRP、HDレンダーパイプライン)
現在のVRChatはBRPの対応のみとなっています。シェーダー購入などの際はURPのみ・HDRPのみの対応シェーダーでないか特に注意する必要があります。
VRChat(PC)のシェーダー制限
PC版VRChatは、シェーダーそのものには制限がありません。
ただし、VRゲームはPCモニターでプレイするゲームに比べ負荷がかなり高いです。
そのため、VRゲーム使用想定のない「重いシェーダー」を使用すれば、同じ部屋内のVRChatプレイヤーにも負荷をかける(場合によってはフリーズさせてしまう)原因になります。
どの描画処理が重いか理解するまでは、販売・配布サイトに「VRChat想定」「低負荷」といった説明書きがあるシェーダーを使用するのがベターでしょう。
VRChatではマテリアルスロット数によって「パフォーマンスランク」が決められ、ランクに応じてアバターを非表示にする機能が備わっています。
【マテリアルスロット数の制限についてはコチラから】
VRChat(Quest)のシェーダー制限
Quest版VRChatで使用できるシェーダーは、シェーダー設定で「VRChat/Mobile/」以下に表示されるシェーダーのみになっています。
また、これらのシェーダーでは半透明を使用できません。頬染めやメガネレンズなどは非表示設定するか、削除しておく必要があります。
なお、Unityだけで直感的に面の削除ができるエディタ拡張機能として、「MeshDeleterWithTexture」などがおすすめです。
シェーダーの変更・設定手順
全形式で共通の事前準備
VRChat SDK(Software Development Kit)用にセットアップされたUnityプロジェクト作成と、対応するバージョンのUnityをインストールしておきます。
以下の記事の「3-2 プロジェクトの作成」までを参考にしてください。(1-4 VRM Converter for VRChat」と「2 VroidStudioでやっておくべき作業」以外)
販売モデル等の.unitypackageからの場合
例えば「Booth」に代表されるオンラインショップで、「VRChat向けアバター」として配布・販売されている3Dモデルの大半は、この方法でシェーダー変更を行います。
シェーダーが同梱された商品の場合は飛ばして次のステップへ進んでください。
アバターの商品ページに記載された事前導入が必要なシェーダーを、ドラッグ&ドロップかダブルクリックでインポートしておきます。
インポート順が逆の場合、マテリアルエラーとなり面倒な再設定が必要になることがあります。
そのため、必要なシェーダー→3Dモデルの順でインポートしてください。
不具合修正など、3Dモデルのアップデートを再度インポートする場合、アバターに付属していたマテリアルの設定はリセットされます。
そのため、projectウィンドウからCtrl+Dでマテリアルを複製しておき、そちらで変更作業を行うことをお勧めします。
Hierarchyウィンドウに配置された・配置したPrefabかFBXのうち、「Skinned Mesh Renderer」や「Mesh Renderer」がInspectorウィンドウに表示されるもの(メッシュ)を探します。
この中のマテリアルを複製したものに置き換えます。
Inspectorウィンドウのマテリアル設定から、使用シェーダーを変更します。
必要に応じ、ノーマルマップやMatcapなどのテクスチャ・輪郭線の幅などの各設定を行い、お好みの見た目に調整します。
Vroid等の.vrmからの場合
シェーダーの変更方法は2-2 販売モデル等の.unitypackageからの場合と同様です。
VRMに使用されている「VRM/」以下の「Mtoon」等のシェーダーは、PC版VRChatでも問題なく使用可能です。
ただし、モバイル端末でも動作することを想定されたVRM用シェーダーでは、使用できない機能が多くあります。
そのため、よりリッチな表現がしたい場合はMtoon以外のシェーダーへの変更をおすすめします。
.fbxからの場合
Unityに.fbx本体と、それに使用しているテクスチャをまとめてインポートします。
VRChatで人型のアバターとして動作させるにはリグの設定なども必要ですが、ここではシェーダー設定に関係するところのみ解説します。
FBXの設定メニューから「Materials→Extract Materials」で編集可能なマテリアルを展開します。
以降は2-2 販売モデル等の.unitypackageからの場合と同様の手順です。
MMDモデル(.pmxと.pmd)→.fbxからの場合
Blenderでは以下の記事を参考に、モデルをインポートします。
MMDモデルでは「材質」として、衣装の裏表・反射度が違うパーツ・輪郭線の太さ違うパーツがそれぞれ別のマテリアルに設定されています。
しかし、多くのアバター用シェーダーでは、これらの材質の違いは、マテリアル設定でマスクマップ※を割り当てることで、1つのマテリアルで表現できることが大半です。
そのため、VRChat用途に変換して使用する場合、予めモデリングソフトで同じテクスチャを使用しているマテリアルを統合しておくとアバターを軽量化できます。
- 設定を反映する部分を白⇔反映しない部分を黒とした、グレースケール画像。
例えば、マテリアルで輪郭線の太さ=0.6と設定したとき、マスクマップで白の部分には太さ0.6・黒の部分には太さ0.0・中間の灰色の部分には太さ0.3の輪郭線がつきます。
MMDモデルのボーン構造をUnity・VRChatで使用できるように変換する必要があります。
ここでは詳細を省きますが、CATS Blender Plugin などを使用することで自動変換が可能です。
変換が終わったら、以下の記事を参考に.fbxとして出力します。
【3 BlenderからFBXをエクスポート はコチラから】
以降は2-4 .fbxからの場合と同様の手順です。
なお、MMDモデル・MMD→Unity関連拡張ツールはVRChatやアバターとしての利用が明確に禁止されたものが多くあります。配布モデル使用の場合はよく規約を確認し、不明点があれば問い合わせるか、使用しない様にしましょう。
アバター用途で使いやすいシェーダー
liltoon
2023年現在のVRChatで最も使用されているシェーダーの1つです。
(より正確には、複数の用途別シェーダーが同梱された設定ツールとなっています。)
3階層の影色の使用、明るさの下限・上限の設定、反射、逆光ライトといった、トゥーンシェーダーとして拡張性の高い設定を行うことができます。
さらに、ファー(モコモコ)やガラスの表現といった全く別の材質表現も、liltoonひとつで設定することが出来ます。
Sunao Shader
liltoon同様、VRChatでの使用を想定して作られたシェーダーです。
VRChatのワールドは製作者によってライトの明るさがまちまちのため、一般的なシェーダーでは真っ黒・白飛びしてしまうことがありますが、このシェーダーではデフォルトでその対策がなされています。
設定項目がシンプルながら必要な機能が十分そろっているので、項目が多いと混乱してしまう方はこちらもおすすめです。
Poiyomi Toon Shader
上記2つと違い、海外コミュニティから人気が広がったシェーダーになります。
他のVRChat向けシェーダーのどれにも負けない多機能性を備えており、GIF画像を仕込む、動的な粒子化、厚みのある半透明の布の再現といったこともできます。
一方、設定項目がその分かなり多く、使いこなすには慣れが必要ですが、それを覚えてでも使う価値のあるシェーダーかと思います。
UTS2(ユニティちゃんトゥーンシェーダーVer2)を使用する場合の留意点
VRChatのUnityバージョンが2018.4.20f1だったの時期の記事では、アバター用シェーダーとしてUTS2(UnityChanToonShaderVer2)の使用を推奨するものが多く残っています。
しかし、UTS2はUnity2020以降には非対応であり、既にUnity2020以降のバージョンアップが明言されているVRChat用としては使用を避けることをおすすめします。
なお、UTS2の後継シェーダーである「Unity Toon Shader」はUnity2020以降に対応しています。
シェーダー自作を考えている方へ
ここから先はより専門的な内容になるため、読み飛ばしても問題ありません。
アバター用シェーダー自作の意義
多様なシェーダーが配布・販売されることによってシェーダーを自作する必要性は薄れていますが、以下のメリットがあります。
- 自分にしかできない奇抜な表現が多くできる
- 必要な機能以外を削いで軽量化できる
- 販売・配布マテリアルの、エラー原因特定や改変が出来るようになる
一般的なUnity使用では、標準搭載のUnity C# scriptを割り当てて、ゲームに必要な処理を実行することができます。
一方で現在も、VRChatでは諸々の理由※から、ワールド・アバターにUnity標準のC# scriptを使用することはできません。
そのため、3Dモデルの見た目に”スクリプト”として干渉できるシェーダーは、VRChatでは貴重なもので、他機能と組み合わせ一枚の面にミニゲームを仕込むといった芸当も可能です。
- 主に、クラッキングプログラムを仕込んだアバターやワールドによるデータの抜き取り・危険行為を行わせないためとされています。
シェーダー自作に必要な知識
主に以下の知識が必須になります。
- プログラミングの基礎(どの言語でも共通の概念など)
- 3Dの描画方法に関する知識(テクスチャ・法線・頂点・ポリゴン)
- Unityシェーダー言語の基礎(ShaderLab)
- 2種類のシェーダーの使い分け(Surfaceシェーダー・Vertex and Fragmentシェーダー)
- 線形代数(ベクトル・行列・三角関数など)
これらの詳しい内容は本記事では省略しますが、検索ワードや書籍を探す際に参考になるかと思います。
Shader Graphの代用アセット
4-2 シェーダー自作に必要な知識 では、コードでシェーダーを記述する場合の知識を紹介しました。
一気にこの量のコーディング知識・ほか関連知識を身に着けるのには、抵抗がある方もいるでしょう。
そこで、Unity2018以降には「Shader Graph」という、グラフ(図)をつないでノードを接続し、直感的にシェーダを作成する機能があります。
しかし、Shader Graphは、1-3 Unityのレンダーパイプライン で解説した中のURP・HDRPのみの対応で、VRChatで使用できるシェーダーは作成不可です。
BRP環境でも使用できるノードでのシェーダー作成拡張機能としては、「Shader Forge」があります。
以前はUnity Asset Storeでの有料販売でしたが、現在は開発を終了し、Git経由で無料で入手可能となっています。
まとめ
本記事では、以下の内容について解説しました。
- Unity・VRChatでのシェーダーの概要と制限
- 各ファイル形式でのシェーダー変更の手順
- 3種のアバター向けシェーダー
- シェーダー自作のイントロダクション
以下のアバターを記事内で使用させていただきました。