HDRP・URPを1つのプロジェクト内で運用する

こんにちは。今回はUnityにおけるレンダリングパイプラインに関する記事です。
Unityが提供しているレンダリングパイプラインには
・HDRP (最も美麗に仕上がる。その分負荷も高い)
・URP (ビルトインより軽量で、綺麗に仕上がる)
・ビルトイン (特に設定しない限り、現状これがデフォルト)
以上の3種類が用意されていますが、それらを1つのプロジェクト内で好き勝手に切り替えできないか…。そんな事を思い立ち、実際やってみたので今回はその手順含めてをご紹介します。

結論としては、1つのプロジェクト内で複数のレンダリングパイプラインを自由に切り替える事は可能でした。が、実用性のある形にするにはひと手間かかりそうです。

こちらの動画が今回試作したものの映像。URPとHDRPの比較映像ですが、今回はこれを1つのプロジェクト内で切り替えできるように作りました。

まずビルトインの新規プロジェクトを作成し
PackageManagerを開き、Universal RP (URP)とHigh Definition RP(HDRP)をそれぞれインストール。
プロジェクトへのURPとHDRPの導入自体はこれだけでOK。
ですがこれだけでは実際のシーンに影響はありません。

URPもHDRPも適用していないシーン。

シーンの方へURPやHDRPの影響を与えるには、ProjectSetting > Graphicsから
URPならURP用の設定ファイル、HDRPならHDRP用の設定ファイルを割り当ててやる必要があります。
上の画面ではURP用の設定ファイルを割り当て。
次にもう1か所、ProjectSetting > Qualty のRenderingにも、同様にURP / HDRP用の設定ファイルを割り当てます。

これでエディター上のシーンがURPに切り替わる…のですが、おそらくこれだけでは、既存のシーンは灰色やマゼンタ一色の世界に覆われてしまうと思います。
ここからが少し手間のかかるところで、URP、HDRP、ビルトインは、
それぞれ描画できるシェーダーが異なります。

URPならURP専用のシェーダー。HDRPならHDRP専用のシェーダーがあるため
それぞれにあったシェーダー(マテリアル)に変更するなどの対応が必要です。

幸いビルトインのマテリアルから、URP向け、HDRP向けのマテリアルへの変換については
簡単に行えるエディター拡張機能が内包されていますので
それを使えば比較的簡単にURP、HDRP用のマテリアルを作成可能。
ただしURP→HDRPやHDRP→URPの変換機能はないので、必ずビルトインのマテリアルから変換する事を忘れずに。

ということで早速それを使ってやってみます。

URP用に変換したいマテリアルを選択し(SHIFT押しながらの一括選択も可)

Edit > Render Pipeline > Universal Render Pipeline > Upgrade Selected Materials to UniversalRP Materials をクリック。
これで選択されたマテリアルがURPのものに変換されます。

「Upgrade Project Materials to UniversalRP Materials」の方を選択すれば、プロジェクト内のマテリアルすべてをURP用に変換してくれるようですが、今回は「同一プロジェクト内でのレンダリングパイプラインの変更」が主旨のため使わず。

同じ理由から、上記のマテリアル変換も、元のビルトイン用マテリアルが消えると困るので、URP用のマテリアルを管理するディレクトリにコピペしてから行っています。

これでビルトイン用とURP用のマテリアルが、同じプロジェクトに共存している状態が生まれました。
あとは同様にHDRP用のマテリアルも変換していきます。

HDRP用への変換も同様に、変換したいビルトインマテリアルを選択してから

Edit > Render Pipeline > HD Render Pipeline > Upgrade from Builtin pipeline > Upgrade Selected Materials to High Definition Materials をクリック。
これを使ってビルトイン、URP、HDRP用のマテリアルが用意できるわけです。

あとは実際のシーンに、URPならURPのマテリアル、といった感じで割り当てていくのですが、ここが一番手間のかかるところです。

実用性を考えるなら、現在使用しているレンダリングパイプラインに合わせて、起動時にシーン内の全マテリアルを置き換えるスクリプト等があった方がいいと思いますが、今回は実験なのでそこまではせず ビルトイン、URP、HDRP用のシーンを作り、それぞれのシーンに適宜マテリアルを適用していく形で行います。

こちらがURP版のシーン。
URP、HDRPは、それぞれライト、カメラ、PostProcessなどの仕様が違ったりするので、そのあたりも適宜調整してあげましょう。

HDRP版のシーン。
これで1つのプロジェクト内で、異なるレンダリングパイプラインを共存させることができました。

実際に使用する際には、スクリプトによるレンダリングパイプラインの切替やマテリアルの置き換え諸々を実装する必要がありそうですが、共存自体は可能なようです。
これによって、「PC向けにはHDRP」「OculusQuest向けにはURP」でビルドといった事も、1つのプロジェクトで対応することができそうです。

また、今回試作したもののビルドデータは、下記URLからダウンロードできます。

PC用HDRPソフト(exeファイル):
https://www.dropbox.com/s/am91243ibdy1ny5/URPTest%20PC_HDRP.zip?dl=0

PC用URPソフト(exeファイル):
https://www.dropbox.com/s/ini6o7caojoddly/URPTest%20PC_URP.zip?dl=0

Oculus Quest用URPアプリ(apkファイル):
https://www.dropbox.com/s/8sz3offlao7ax5j/URPTest%20quest_URP.zip?dl=0

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA