今回はUnity2019.2までに作成したLWRPプロジェクトを、
URPプロジェクトにアップグレードする方法について紹介します。
アップグレードガイド
参考にした資料です。というよりもこちらの和訳記事となります。
LWRPからURPへ
従来のビルトインと比べ軽量高速なレンダーパイプラインとして登場したLightweightRPですが、
Unity2019.3からUniversalRPへ名称が変わりました。
将来的にはUnityデフォルトのパイプラインになる予定です。
※本記事ではLightweightRPをLWRP、UniversalRPをURPと略称させていただきます。
開発環境
移行元プロジェクト
Unity2019.2.9f1
LWRP 6.9.2
移行先プロジェクト
Unity2019.3.0b
URP 7.1.2
アップグレード手順
簡単な手順でアップグレードできます。
LWRPで作成されたカスタムシェーダーやエフェクトは自動的にアップグレードされますが、
カスタムシェーダー内でShader.FindまたはUsePassを使用している場合は手動で修正する必要があります。
更新する前に
プロジェクトでアセンブリ定義ファイル(ASMDef)を使用している場合は、
グローバルに一意のID(GUID)を使用するようにファイルを変更します。
これは、URPがASMDefs文字列名の代わりにGUIDを使用するためです。
Unityは文字列名を自動的にアップグレードしますが、
将来の校正のためにプロジェクトでGUIDを使用することが勧められています。
アップグレードプロセス
Unity EditorのPackage Managerには、LWRPバージョン7.0.0が含まれています。
このシェルパッケージを使用すると、プロジェクトをLWRP 7.0.0に更新できるため、プロジェクトは暗黙的にUniversal RP 7.0.0を使用します。
プロジェクトをUnity2019.3以降で開く
アップグレードプロセスを開始するには、
Unity 2019.3以降でアップグレードするプロジェクトを開きます。
この時、このようなメッセージが表示されることがあります。
Unity2019.3からアセットインポートパイプラインが2にバージョンアップされますが、
従来のバージョン1は非推薦となるためアップグレードしますか?というお誘いのメッセージです。
ここではYesにしておきます。
Yesにするとアセットが再インポートされるのでアセットがたくさん入っているプロジェクトですと時間がかかるかもしれません。
ちなみにProjectSettingsから、いつでもバージョン1に戻せます。
パッケージマネージャーからアップデート
[ウィンドウ]> [パッケージマネージャー]> [Lightweight RP]メニューに移動します。
7.0.0以上に更新をクリックします。
Unityスクリプトアップデーターがすぐに実行され、以下を含むクラスが自動的にアップグレードされます。
・プロジェクトの名前空間/クラスの名前変更。
・ASMDefs文字列を新しいURP標準に再マッピング。(必要なら)
アップデータが終了すると、すべてのスクリプトが正しくコンパイルされます。
シェーダー検索パスをアップグレードする
LWRPプロジェクト内で「Shader.Find」を使用してLWRPシェーダーを検索している場合、
検索パスを「Lightweight」から「Universal」に変更する必要があります。
※私自身シェーダーにはあまり詳しくないのでこの辺は簡単に
カスタムシェーダーのアップグレード
タグをアップグレードする
URPは独自のスクリプトタグを使用します。独自のシェーダーを作成している場合、Unityは内部エイリアスを使用するため、URPプロジェクトでLWRPの「LightMode」タグは引き続き機能します。
ただし、プロジェクトの将来に備えてこれらのタグを手動で変更する必要があります。
「Lightweight2D」タグを「Universal2D」に変更します。
「LightweightForward」タグを「UniversalForward」に変更します。
↓多分こんな感じ?
Pass { //Tags{ "LightMode" = "LightweightForward" } Tags{ "LightMode" = "UniversalForward" } CGPROGRAM #pragma vertex vert #pragma fragment frag
シェーダー名/クラスをアップグレードする
次のシェーダー名/クラスはURP向けに変更されているため、これらを手動で変更する必要があります。
UsePass "Lightweight Render Pipeline / ..."はUsePass "Universal Render Pipeline / ..."になります。
「UnityEditor.Rendering.LWRP.xxx」は「UnityEditor.Rendering.Universal.xxx」になります。
インクルードパスのアップグレード
URPは、LWRPとは異なるインクルードパスを使用します。
LWRP 7.0.0には転送インクルードが含まれているため、カスタムシェーダーが破損することはありません。
ただし、URP 7.0.0には転送インクルードが含まれていないため、アップグレード時にタグを手動で変更する必要があります。
「#include "Packages / com.unity.render-pipelines.lightweight / xxx"」は
「#include "Packages / com.unity.render-pipelines.universal / xxx"」になります。
LWRP依存関係の削除
Unity2019.3でプロジェクトを開いたときにLWRPを7.0にアップデートしましたが、
このLWRPをURPに置き換えます。
URPのインストール
LWRP 7.0.0をURP 7.0.0に置き換えるには:
[ウィンドウ]> [パッケージマネージャー]メニューに移動します。
[ユニバーサルRP]をクリックしてURPをインストールし、
[パッケージマネージャー]ウィンドウの右下にある[インストール]をクリックします。
私の場合ですと最初からインストール?されていました。
LWRPのアンインストール
[Lightweight RP]をクリックしてLWRPをアンインストールし、[パッケージマネージャー]ウィンドウの右下にある[削除]をクリックします。
これにより、プロジェクトからLWRPパッケージが完全に削除されます。インクルードパスを変更しなかった場合は、ここで変更する必要があります。
なぜかURPもアンインストールされる
上でLWRPをアンインストールすると、なぜかインストール済みのURPもアンインストールされました。
当然シェーダーエラーでピンクになります。
そのため再度URPをインストールしましょう。
すると無事表示されました。
これでLWRPからURPへのアップグレードは完了です。
まとめ
アップグレードはパッケージマネージャからURPをインストールするだけ。
この時LWRPはアンインストールしましょう。
カスタムシェーダーを使っている場合は修正が発生する場合がある。
参考資料
間違っている箇所がありましたらコメントなどにお気軽にどうぞ!