ビルトインレンダーパイプラインプロジェクトをユニバーサルレンダーパイプライン(URP)に移行する方法
ユニバーサルレンダーパイプライン(URP)は、Unity 6 のデフォルトのレンダーパイプラインです。このガイドでは、私たちが URP をデフォルトにしている理由を説明し、このスクリプタブルレンダーパイプライン(SRP)の主な機能と利点を取り上げ、プロジェクトを URP に移行したスタジオの例を紹介し、ご自身のプロジェクトでも同じことができる方法を順を追って説明します。
URP についてより深く知りたい方は、電子書籍『上級クリエイターのための URP 入門』をご覧ください。
レンダリングの進化:ビルトインレンダーパイプラインからスクリプタブルレンダーパイプラインへ
プラットフォームへのリーチは Unity の最大の強みの一つです。ほとんどすべてのゲームスタジオにとって理想的なのは、一度ゲームを作れば、ハイエンド PC からローエンドモバイルまで、選択したあらゆるプラットフォームに効率よく展開できることです。
ビルトインレンダーパイプラインは、Unity がサポートするすべてのプラットフォーム向けのターンキーソリューションとして開発されました。グラフィックス機能を組み合わせて提供しており、フォワードおよびディファードレンダーパスとの併用に便利です。
しかし、Unity がより多くのプラットフォームのサポートを追加し続けるにつれて、私たちはビルトインレンダリングパイプラインに以下の制限があることを認識しました。
- コードの大部分は C++ で書かれており、変更することができないため、ブラックボックスシステムとなっている。
- レンダーフローとレンダーパスが事前に構造化されている。
- レンダリングアルゴリズムがハードコードされている。
- カスタマイズの制約がないため、すべてのプラットフォームで高いパフォーマンスを実現するのが難しい。
- パイプラインの同期ポイントをトリガーするレンダリングコード内のコールバックが公開されるこれらのコールバックは、マルチスレッドレンダリングの最適化を妨げ、C# への呼び出しによってフレーム内の任意の時点で動的にステートの挿入を変更することを可能にする。
- ユーザーインジェクションの永続状態を管理するためにデータをキャッシュするのは難しい。
ソリューション:スクリプタブルレンダーパイプライン
HD レンダーパイプライン(HDRP)と URP は、どちらもスクリプタブルレンダーパイプライン(SRP)です。Unity の SRP は、以下の機能を実現することによって効率的なマルチプラットフォームワークフローをサポートするために開発されました。
- ハイエンドデバイスからローエンドデバイスまで、最大数のハードウェアプラットフォームに対応するインテリジェントで信頼性の高いスケーリング
- C++ ではなく C# を使用してレンダリング処理をカスタマイズできるため、変更のたびに新しい実行ファイルをコンパイルする必要がない。
- アーキテクチャの進化をサポートする柔軟性
- 多くのプラットフォームでパフォーマンスを発揮するシャープなグラフィックスを作成する機能
下の画像は、SRP がどのように機能するかを示しています。C# を使用して、レンダーパスやレンダリングコントロールを制御およびカスタマイズし、シェーダーグラフなどのアーティストフレンドリーなツールを使用して作成できる HLSL シェーダーを使用します。シェーダーを使用すると、さらに低レベルの API やエンジンレイヤーの抽象化にもアクセスできます。
高度な技術を持つ開発者は、ゼロから新しい SRP を作成する、または URP や HDRP を変更することができます。グラフィックススタックはオープンソースであり、GitHub で入手可能です。
どちらの SRP も固有のメリットをもたらしますが、URP はプラットフォームへのリーチを最大化するように設計されているため、見栄えのするグラフィックをどこにでも持ち込むことができます。詳しく見てみましょう。
Unity プロジェクトを URP に移行する 6 つの理由
- URP は幅広い技術レベルに対応できます。
URP は、アーティストでもテクニカルアーティストでも同じように調整することが可能であり、プロトタイピングの柔軟性を高め、本格的なゲーム制作のためのレンダリング技術を洗練させます。 - URP は拡張可能でありカスタマイズできます。
URP では、既存の機能を変更したり、新しい機能でパイプラインを拡張したりすることができます。そのため、アセットストアやサードパーティのパッケージ作成者、経験豊富な開発者、プロのチームなど、上級ユーザーにとって確かな選択肢となっています。
低レベルのレンダリング API はパフォーマンスのために C++ で書かれていますが、URP 開発者は、レンダリングパイプラインの実行中に呼び出されるシンプルな C# スクリプトを書くことができ、パフォーマンスを犠牲にすることなく高レベルのカスタマイズが可能です。 - URP には複数のレンダリングオプションが用意されています。
URP は、フォワード、フォワード+、ディファードのレンダリングパスをサポートするユニバーサルレンダラーと、2D レンダラーを備えています。
これらのレンダラーを追加機能やスクリプタブルレンダーパスで拡張できます。
オブジェクトのレンダリング機能は、レンダリングパイプラインのさまざまなイベントで、指定されたレイヤーマスクからオブジェクトをレンダリングするために使用できます。また、これらのオブジェクトのレンダリング時に、マテリアルやその他のレンダリングステートをオーバーライドできるため、コードなしでレンダリングをカスタマイズできます。
URP は、特定のニーズに合わせてカスタムレンダラーで拡張できます。Unity 6 で導入された レンダーグラフは、フレームのレンダリングに使用されるさまざまなバッファにアクセスして操作できるツールであり、レンダラー機能のワークフローを使用することで、レンダーパイプラインのどの段階でも追加できます。 - URP は 2D ゲーム開発を強化します。
URP は最適化されたパフォーマンスと柔軟性を実現し、モバイルとハイエンドの両方のプラットフォームに最適です。高度なライティング、シャドウ、ポストプロセッシングエフェクトをサポートし、パフォーマンスを損なうことなく 2D ゲームのビジュアルクオリティを向上させます。
さらに、URP のカスタマイズ可能なレンダリング設定とシェーダー機能により、洗練されたプロフェッショナルな外観を実現するために、ゲームの外観を微調整することができます。このため、URP は、視覚的な魅力に溢れ、スムーズに動作する 2D ゲームを作成するための貴重なツールとなっています。 - URP はアーティストのための最新技術に対応しています。
URP は、シェーダーグラフ、VFX グラフ、レンダリングデバッガーなど、アーティストにとって使いやすい最新のツールをサポートしています。 - URP を使用してより良いパフォーマンスを得ることができます。
URP はパフォーマンスを念頭に構築されており、幅広いデバイスで忠実度とフレームレートのバランスを取るための多くのツールを備えています。
- URP はリアルタイムのライティングを非常に効率的に評価します。フォワードレンダリングでは、すべてのライティングを 1 つのパスで評価します。フォワード+ は、オブジェクトごとではなく空間的にライトをカリングすることで、標準のフォワードレンダリングを改善します。これにより、フレームのレンダリングに使用できるライトの数が全体的に増加します。ディファードレンダリングでは、Native RenderPass API をサポートし、G バッファとライティングパスを 1 つのレンダーパスにまとめることができます。
- URP は、モバイルデバイスのタイルメモリをより効率的に使用するため、消費電力が少なく、バッテリー寿命が長くなり、その結果、長時間のプレイが可能です。
- URP は、ビルトインレンダリングパイプラインと比較してより良いパフォーマンスの実現を可能にする統合ポスト処理スタックを備えています。Volume フレームワークを使用すれば、コードを書くことなく、カメラ位置に依存するポストプロセッシングエフェクトを作成できます。
- Unity 6 Preview では、メッシュ描画時の CPU と GPU の改善、描画コールの減少と深度処理方法の改善を保証する SRP Batcher、一部のシーンで描画コールを大幅に削減できる GPU Resident Drawer と GPU Occlusion Culling など、さまざまな URP アップデートが導入されています。
ほとんどの Unity プロジェクトは URP または HDRP でビルドされるようになりましたが、ビルトインレンダリングパイプラインは引き続き Unity 6 で利用可能です。
ビルトインレンダーパイプラインプロジェクトを URP に移行した 3 つのスタジオ
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Kluge Interactive - 『Synth Riders』
Kluge Interactive は、2019 年に没入型リズムゲーム『Synth Riders』を Steam VR と Meta Quest で 発売しました。それ以来、Apple Vision Pro を含む数多くのデバイスに移植されています。スタジオが VR プラットフォームでより多くのプレイヤーにリーチするためには、最新技術への対応が不可欠でした。
Kluge Interactive のテクニカルプロデューサーである AnnMarie Wirrel Bartholomaeus 氏は、次のように説明しています。「過去 12 ~ 18 か月のゲーム開発は、技術的負債を解消し、ツールセットを 2022 LTS に近づけるための期間でした。すでにビルトインレンダーパイプラインからユニバーサルレンダーパイプライン(URP)に移行し、OpenXR バックエンドに切り替えました。これにより、新しいテクノロジーを扱う際に、技術的により有利な立場を得ることができました」。
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
Subcult Joint – 『Cookie Cutter』
Subcult Joint の『Cookie Cutter』は、PC とコンソール向けに配信されている、敵を倒して進んでいくタイプのハイテンションなメトロイドヴァニアです。ゲームのアセットはすべて手描きであり、伝統的な手法でアニメーション化されています。これらの魅力的なキャラクターと環境に深みを加えるために、Subcult Joint は、最適化され、プラットフォーム間でパフォーマンスを維持できる、最適な照明設定を必要としていました。
URP に切り替え、プロジェクトを最新の Unity バージョンにアップグレードすることで、Subcult Joint は Cookie Cutter の可能性を最大限に引き出しました。10,000 個を超える 2D ライトを追加し、アップデートされた Memory Profiler を使って最適化しました。また、Sprite Atlas の最新バージョンによって、数百もの手描きアニメーションをより簡単かつ効率的に、さまざまなターゲットプラットフォームにプッシュできるようになりました。
Subcult Joint の創設者である Stefano Guglielmana 氏は次のように話しています。「ゲーム内のすべてのライトがリアルタイムで妖精を照らし、キャラクター、アニメーション、環境間に密度感と一体感を生み出しています。」「キャラクターは、暗い場所では陰がかかり、屋外エリアの鮮やかで汚染されたスカイライトに晒されている場合は光に包まれます。こういったディテールは、本当にワクワクします」
This content is hosted by a third party provider that does not allow video views without acceptance of Targeting Cookies. Please set your cookie preferences for Targeting Cookies to yes if you wish to view videos from these providers.
more8bit - 『Bleak Sword DX』
more8bit としても知られるソロの開発者 Luis Moreno Jimenez 氏は最初に、8 ビットのソウルライク『Bleak Sword』を 2019 年に Apple Arcade でリリースしました。このゲームの成功を受けて、パブリッシャーである Devolver Digital は、より多くのプレイヤーにゲームを楽しんでもらうため、more8bit に PC とコンソールでの発売を提案しました。more8bit は、これを好機として、モバイルバージョンの完全コピーを再作成するのではなく、『Bleak Sword』のオリジナル概念を拡張しました。
『Bleak Sword DX』のビジュアルは、レトロなアーケードキャビネットゲームを連想させます。汚れた質感のライトブルーム、画面の湾曲、VHS を思わせるフィルター、被写界深度エフェクトなどの後処理エフェクトが見られます。Luis にとって最大の挑戦は、『Bleak Sword』のビジュアルテイストを保ちつつ、DX のグラフィックスを強化して拡張された処理能力を活用することでした。彼はほとんどの VFX を Unity のビルトインレンダーパイプラインとシェーダーグラフを使って制作した後、URP で最適化しました。
「ビルトインから URP への移行は実にスムーズでした。週末だけの作業時間で制作でき、その後 1 週間で小さな問題を修正すれば完成しました」と more8bit は話しています。
既存のビルトインレンダーパイプラインプロジェクトに URP を追加する方法
このセクションでは、ビルトインレンダーパイプラインを使用している既存のプロジェクトを URP に変換する方法を紹介します。
重要:このセクションの手順を実行する前に、必ずソース管理を使用してプロジェクトをバックアップしてください。このプロセスではアセットの変換を行いますが、Unity ではこの変更に対する取り消しオプションは提供されていません。ソース管理を使用している場合は、必要に応じてアセットの以前のバージョンに戻すことができます。
既存のビルトインレンダーパイプラインプロジェクトをアップグレードする場合は、プロジェクトにURP パッケージを追加する必要があります。
Window > Package Manager に移動し、Packagesドロップダウンをクリックして URP をプロジェクトに追加します。Unity Registry を選択した後、Universal RP を選択します。開発用コンピュータに URP パッケージがまだインストールされていない場合は、ウィンドウの右下隅にあるダウンロードをクリックします。ダウンロードが完了したら、Install をクリックします。
URP アセットを作成するには、Project ウィンドウを右クリックし、Create > Rendering > URP Asset (with Universal Renderer)を選択します。アセットに名前を付けます。
覚えておくべきポイント:ユニバーサルレンダリングパイプラインまたは 3D(URP)テンプレートを使用して新規プロジェクトを作成した場合、これらの URP アセットはプロジェクト内ですでに利用可能です。URP は、単一の URP アセットを作成するのではなく、アセット拡張子を持つ 2 つのファイルを使用します。
1 つは UniversalRP_Renderer と呼ばれる、レンダラーが動作するレイヤーをフィルタリングしたり、レンダリングパイプラインをインターセプトしてシーンのレンダリング方法をカスタマイズしたりするために使用できるレンダラーデータアセットです。これにより、高品質エフェクトの作成を容易化します。
さらに、UniversalRP_Renderer は、URP のハイレベルなレンダーロジックとパスを制御します。2D ライト、2D シャドウ、ライトブレンドスタイルなどの機能を使用可能にする 2D レンダラー、フォワードパスとディファードパスをサポートしています。URP を拡張して、独自のレンダラーを作成することもできます。
もう 1 つの URP アセットは、品質、ライティング、影、およびポストプロセスの設定を制御する役割を果たします。異なる URP アセットを使用して、品質設定を制御することができます。
この設定アセットは、レンダラーリストを介してレンダラーデータアセットにリンクされています。新しい URP アセットを作成すると、設定アセット内に、1 つのアイテム(同時に作成されるレンダラーデータアセットで、デフォルトとして設定される)を含むレンダラーリストが作成されます。このリストには、代わりのレンダラーデータアセットを追加することができます。
デフォルトのレンダラーは、シーンビューを含むすべてのカメラに使用されます。カメラはレンダラーの一覧から別のレンダラーを選択することで、デフォルトのレンダラーをオーバーライドできます。これは、必要に応じてスクリプトを使って行うことができます。
これらのステップに従ってURPアセットを作成しても、シーンビューまたはゲームビューで開いているシーンは、ビルトインレンダーパイプラインを使用します。URP に切り替えるには、最後のステップを完了する必要があります。Edit > Project Settings に進み、Graphics パネルを開きます。None (Render Pipeline Asset) の横にある小さいドットをクリックします。開かれるパネル上で UniversalRP を選択します。
スイッチに関する警告メッセージがポップアップ表示されますが、そのままContinue を押してください。プロジェクトにはまだコンテンツがないため、レンダーパイプラインの変更はほぼ瞬時に行われます。これで URP を使用する準備が整いました。
既存プロジェクトのシーンの変換
上記の手順を完了すると、美しいシーンが突然マゼンタ色に染まるのがわかります。これは、ビルトインレンダーパイプラインのプロジェクトのマテリアルで使用されるシェーダーが URP でサポートされていないためです。幸いなことに、シーンを元のクオリティに戻す方法があります。
Window > Rendering > Render Pipeline Converter の順に選択します。2D プロジェクトの場合は Convert Built-in to 2D (URP) を、3D プロジェクトの場合は Built-in to URP を選択します。プロジェクトが 3D の場合、次の中から適切なコンバーターを選択する必要があります。
- レンダリング設定:これを選択すると、ビルトインレンダーパイプラインの品質設定に可能な限り近い複数のレンダーパイプライン設定アセットが作成されます。これにより、より効率的に異なる品質レベルをテストすることができます。
- 素材のアップグレード:これを使用すると、マテリアルをビルトインレンダーパイプラインから URP に変換できます。
- アニメーションクリップの変換:アニメーションクリップを変換します。Material Upgrade コンバータの終了後に実行されます。
- 読み取り専用のマテリアルコンバーター:これによって、Unity プロジェクトに含まれるビルド済みの読み取り専用マテリアルが変換されます。プロジェクトのインデックスを作成し、一時的な .index ファイルを作成します。処理の完了までに長時間かかる可能性があることに注意してください。
カスタムシェーダーの変換
カスタムシェーダーは、Material Upgrade コンバーターを使用しても変換されません。カスタムシェーダーを URP に更新する最も迅速な方法は、シェーダーグラフを使用することです。
URP シェーダーには、いくつかの異なる種類があります。
- Universal Render Pipeline/Lit:この物理ベースレンダリング(PBR)シェーダーは、組み込みの標準シェーダーと類似しており、ほとんどの現実のマテリアルを表現するために使用できます。メタリックおよびスペキュラーの両方のワークフローで、すべてのスタンダードシェーダー機能をサポートしています。
- Universal Render Pipeline/Simple Lit:これは Blinn-Phong モデルを使用しており、ローエンドのモバイルデバイスや PBR ワークフローを使用しないゲームに適しています。
- Universal Render Pipeline/Baked Lit:このシェーダーは、ライトマップ、ライトプローブ、Unity 6 のアダプティブプローブボリュームによるベイクドライティングのみを必要とするスタイル化されたゲームやアプリに使用します。このシェーダーは物理ベースシェーディングを使用せず、リアルタイムのライティングを備えていないため、リアルタイムに関連するシェーダーのキーワードとバリアントはすべてシェーダーコードから取り除かれ、計算が高速化されます。
- Universal Render Pipeline/Complex Lit:Complex Lit シェーダーは、Lit シェーダーのすべての機能を備え、高度なマテリアル機能を追加します。このシェーダーの一部の機能は、非常に多くのリソースを消費し、Unity Shader Model 4.5 ハードウェアを必要とする可能性があります。
- Universal Render Pipeline/Unlit:これは、ライティングの式を使用しない GPU パフォーマンスの高いシェーダーです。
- Universal Render Pipeline/Terrain/Lit:これは、Terrain Tools パッケージと共に使用するのが最適です。
- Universal Render Pipeline/Particles/Lit:このパーティクルシェーダーは、PBR ライティングモデルを使用しています。
- Universal Render Pipeline/Particles/Unlit:この Unlit シェーダーは、GPU 負荷が少ないシェーダーです。
Simple Lit は多くのレガシシェーダーやモバイルシェーダーに置き換わるものですが、パフォーマンスは同じではありません。レガシー/モバイルシェーダーはライティングを部分的にしか評価しない一方、Simple Lit は URP アセットで定義されたすべてのライトを考慮します。
URP ドキュメントのこの表で、各 URP シェーダーがどのビルトインレンダーパイプラインシェーダーに対応するかを確認できます。
上記のコンバーターを 1 つ以上選択したら、Initialize Converters または Initialize And Convert をクリックします。どちらのオプションを選択した場合でも、プロジェクトはスキャンされ、変換の必要があるアセットが各コンバータパネルに追加されます。
Initialize Converters を選択した場合は、各項目のチェックボックスを使用して項目の選択を解除することで、変換を制限することができます。ここで Convert Assets をクリックすると、変換プロセスが開始されます。
Initialize And Convert を選択すると、コンバーターの初期化後、変換が自動的に開始されます。完了すると、エディターでアクティブになっているシーンを再度開くように求められる場合があります。
完全版の e ブックを入手する
包括的な 140 ページのガイド「Unity 上級クリエイターのためのユニバーサルレンダーパイプライン入門」を読み、URP を最大限に活用しましょう、Unity のエキスパートである Nik Lever によって書かれたこのマニュアルは、Unity でスケーラブルなグラフィックスを作成するためのベストプラクティスを網羅しています。主な項目は下記のとおりです。
- URP の設定とコンバーター
- レンダーパイプラインとレンダリングパスの比較
- URP のライティング
- シェーダーとパイプラインコールバック
- ポストプロセシング
- パフォーマンスと最適化のヒントなど
これらのアップデートは、この最新版のガイドのほぼすべてのセクションに反映されているため、Unity 2022 LTS で URP を使用する際の操作性にできるだけ正確に一致させることができます。
あなたのゲームを、あなたのやり方で作ろう
URP でレンダリング性能を最大化しながら、ゲームの外観をより自由にコントロールできます。この SRP は、年内の Unity 6 リリースで、これまで以上に強力になる見込みです。ディテールに富んだシーンを作成し、ビジュアルの忠実度を失うことなく低解像度のフレームをアップスケールします。その際に、ターゲットプラットフォーム全体で手作業での最適化が必要になる場面を最小限に抑えることができます。
ビルトインレンダーパイプラインプロジェクトをユニバーサルレンダーパイプライン(URP)に移行する方法
ビルトインレンダーパイプラインの Unity プロジェクトをユニバーサルレンダーパイプラインにアップグレードする方法を学び、3 つのスタジオが URP に切り替えることでより多くのプラットフォームをマーケティング対象とした方法をご覧ください。