UnToon 2018 to 2019 migration - whiteflare/Unlit_WF_ShaderSuite GitHub Wiki
UnlitWF/UnToon を Unity2019 に移行するときの手引き
Unity2018 の UnlitWF/UnToon では、各種機能のON/OFFに変数+if分岐を使用していました。
それに対し Unity2019 では shader_feature_local
が導入されたため、各種機能のON/OFFにはローカルキーワードを使用するよう変更しています。
Unity2019への移行まとめ
-
Case1: これから Unity2018 のプロジェクトを Unity2019 にアップデートしようとしている
- 先に UnlitWF/UnToon の最新版をインポートして、その後に Unity2019 へアップデートしてください
-
Case2: Unity2019 のプロジェクトに、Unity2018 以前に作成した unitypackage をこれからインポートしようとしている
- UnlitWF/UnToon の最新版をインポートして、その後に unitypackage をインポートしてください
-
Case3: Unity2019 のプロジェクトに Unity2018 以前で作成された UnlitWF/UnToon のマテリアルが残っている
- UnlitWF/UnToon の最新版をインポートして、後述の方法でマテリアルごとに変換を行ってください
マテリアルの変換手順
変換前のマテリアルを unity2019 で確認してもマテリアルエラーにはなりませんが、Metallic, ToonShade, RimLight などの各種機能はOFFになっているように見えます。これは各機能をONにするためのキーワードがマテリアルにはまだ設定されていないためです。
そのためマテリアルを自動で変換するための仕組みを UnlitWF に追加しました。 最新版をプロジェクトにインポートした後にインポートされたマテリアルは、自動で変換されて Unity2019 で使用可能になります。 このため前述の Case1(2019にするタイミングでReimportAllが行われる) および Case2 (マテリアルがこれからimportされる) 場合は、自動変換が適用されます。 一方、すでにマテリアルがインポートされている場合は、手動で変換する必要があります。
手動変換の方法は、マテリアルをひとつひとつ変換する方法Aと、一括で変換する方法Bを用意しました。 すでに変換済みのマテリアルを再度変換しても問題ないようにしています。UnlitWF の各マテリアルを1回以上変換し、マテリアルにキーワードを設定してください。
手動変換の方法A: 変換対象のマテリアルを Inspector で表示する
キーワードの設定は、UnlitWF の拡張インスペクタが自動で行います。マテリアルを Inspector で開くと即座にキーワードが設定されて各機能のON/OFFが整理されます。
手動変換の方法B: マテリアルを一括で変換する
Project からマテリアルを複数選択し、右クリック → UnlitWF Material Tools
→ Migration material
を使用します。
A Material on this avatar has custom shader keywords.
について
VRCSDKの警告 各種機能のON/OFFにローカルキーワードを使用するようになったため、VRCSDK がマテリアルの警告を出してくるようになりました。 ただし UnlitWF で使用しているものは全てローカルキーワードであり、グローバルなキーワード空間を汚さないため、この警告は無視して構いません。
VRCSDK の Shader Keyword Utility を使用するとマテリアルからキーワードが消去されるため、各種機能がOFFに変わったように見えます。 この場合であっても上記の手順でマテリアルのキーワードをリフレッシュし、各種機能を復活させることができます。
不要データの削除ツールについて
UnlitWF では、マテリアルから不要なキーワードを削除するツールを用意しています。マテリアルの Inspector の最下部にある「マテリアルから不要データを削除」ボタンを押してください。不要なプロパティを削除すると同時に、キーワードもリフレッシュします。
複数のマテリアルを一括で処理するツールも用意しています。マテリアルを右クリックして UnlitWF Material Tools
→ Migration material
を選択します。
「ShaderKeywordsも一緒にクリアする」にチェックを入れて CleanUp ボタンを押すと、不要なキーワードがマテリアルから削除されます。
Shader Variant Stripping について
機能のON/OFFにキーワードを使用するようになったため、Unity2018 までは使用していない処理もビルドに含まれていたところ、Unity2019 以降は使用していない処理はビルドに含まれないよう Unity の側で最適化が行われます。 そのかわり多数のシェーダバリアントを作成するようになったため、ビルド後のサイズは 2018 よりも 2019 のほうが平均すると大きくなります。
これをさらに削減するため、UnlitWF では ScriptableShaderStripping を用いて、ビルド時に余分なシェーダバリアントを削除する仕組みを導入しています。
この仕組みは初期状態では有効ですが、設定から無効にすることも可能で、設定ファイルが UnlitWF_ShaderSuite/Editor/WFEditorSettings.asset
にあります。
Enable Stripping
- チェックすると UnlitWF 独自のシェーダバリアント削減が有効になります。
- チェックを外すと無効になりビルドサイズが増えます。なおチェックが外れた状態でも Unity 側での最適化は有効です。
Strip Fallback
- チェックすると Fallback シェーダをビルドから除外します。PC版において通常は Fallback が使われることがないため見た目には変化がありません。
- Android(Quest) 向けワールド作成、あるいは他デバイス向けに UnlitWF を使用する場合など、Fallback が必要な場合はチェックを外してください。
Strip Meta Pass
- チェックするとライトベイクに使う META パスをビルドから除外します。ライトベイクは通常はエディタ上で行われるためビルドから除外されても問題ありません。
- RealtimeGI を使う場合など、ランタイムでライトマップを作成するために META パスが必要な場合は、チェックを外してください。
Always Include Shaders
- ShaderVariantCollection で、削減の対象外にするシェーダ・パスを指定することができます。
Always Include Materials
- マテリアルを指定して、削減の対象外にするシェーダを指定することができます。