Skip to content

UnToon 2018 to 2019 migration

whiteflare edited this page Jul 31, 2021 · 8 revisions

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にするためのキーワードがマテリアルにはまだ設定されていないためです。
Image from Gyazo

そのためマテリアルを自動で変換するための仕組みを UnlitWF に追加しました。 最新版をプロジェクトにインポートした後にインポートされたマテリアルは、自動で変換されて Unity2019 で使用可能になります。 このため前述の Case1(2019にするタイミングでReimportAllが行われる) および Case2 (マテリアルがこれからimportされる) 場合は、自動変換が適用されます。 一方、すでにマテリアルがインポートされている場合は、手動で変換する必要があります。

手動変換の方法は、マテリアルをひとつひとつ変換する方法Aと、一括で変換する方法Bを用意しました。 すでに変換済みのマテリアルを再度変換しても問題ないようにしています。UnlitWF の各マテリアルを1回以上変換し、マテリアルにキーワードを設定してください。

手動変換の方法A: 変換対象のマテリアルを Inspector で表示する

キーワードの設定は、UnlitWF の拡張インスペクタが自動で行います。マテリアルを Inspector で開くと即座にキーワードが設定されて各機能のON/OFFが整理されます。
Image from Gyazo

Image from Gyazo

手動変換の方法B: マテリアルを一括で変換する

Project からマテリアルを複数選択し、右クリック → UnlitWF Material ToolsMigration material を使用します。
Image from Gyazo

Convert を押すと、マテリアルが変換されます。
Image from Gyazo

Image from Gyazo

VRCSDKの警告 A Material on this avatar has custom shader keywords. について

各種機能のON/OFFにローカルキーワードを使用するようになったため、VRCSDK がマテリアルの警告を出してくるようになりました。
ただし UnlitWF で使用しているものは全てローカルキーワードであり、グローバルなキーワード空間を汚さないため、この警告は無視して構いません。

Image from Gyazo

VRCSDK の Shader Keyword Utility を使用するとマテリアルからキーワードが消去されるため、各種機能がOFFに変わったように見えます。
この場合であっても上記の手順でマテリアルのキーワードをリフレッシュし、各種機能を復活させることができます。

不要データの削除ツールについて

UnlitWF では、マテリアルから不要なキーワードを削除するツールを用意しています。マテリアルの Inspector の最下部にある「マテリアルから不要データを削除」ボタンを押してください。不要なプロパティを削除すると同時に、キーワードもリフレッシュします。
Image from Gyazo

複数のマテリアルを一括で処理するツールも用意しています。マテリアルを右クリックして UnlitWF Material ToolsMigration material を選択します。
Image from Gyazo

「ShaderKeywordsも一緒にクリアする」にチェックを入れて CleanUp ボタンを押すと、不要なキーワードがマテリアルから削除されます。
Image from Gyazo

Shader Variant Stripping について

機能のON/OFFにキーワードを使用するようになったため、Unity2018 までは使用していない処理もビルドに含まれていたところ、Unity2019 以降は使用していない処理はビルドに含まれないよう Unity の側で最適化が行われます。 そのかわり多数のシェーダバリアントを作成するようになったため、ビルド後のサイズは 2018 よりも 2019 のほうが平均すると大きくなります。

これをさらに削減するため、UnlitWF では ScriptableShaderStripping を用いて、ビルド時に余分なシェーダバリアントを削除する仕組みを導入しています。 この仕組みは初期状態では有効ですが、設定から無効にすることも可能で、設定ファイルが UnlitWF_ShaderSuite/Editor/WFEditorSettings.asset にあります。

Image from Gyazo

Image from Gyazo

  • 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
    • マテリアルを指定して、削減の対象外にするシェーダを指定することができます。