Unity を検索

軽量レンダーパイプラインからユニバーサルレンダーパイプラインへ

2019年9月20日 カテゴリ: Engine & platform | 8 分 で読めます
シェア

Is this article helpful for you?

Thank you for your feedback!

Unity 2019.3 で、「軽量レンダーパイプライン」(LWRP)の名称が「ユニバーサルレンダーパイプライン」(UniversalRP)に変更されました。ユニバーサルレンダーパイプラインは、美しいグラフィックスとパフォーマンスを実現しながらも幅広い種類のプラットフォームにスケーリング可能な強力なソリューションです。このパイプラインは最新のアーティストツールに対応しており、2D・3D・バーチャルリアリティー(VR)・拡張現実(AR)のプロジェクトに適しています。

軽量レンダーパイプライン(LWRP)は、あらゆるモバイルデバイスで高画質グラフィックスを実現する高速でスケーラブルなパイプラインとして開発されました。昨年 1 年間で、このスクリプタブルレンダーパイプラインがプロダクト開発に使用可能となり、Unity では、その機能・パフォーマンス・プラットフォームサポートを拡張する取り組みを引き続き進めて参りました。

LWRP は、広範に使用可能な、幅広く利益をもたらすパイプラインとして開発されたものです。このパイプラインが発展し、美しさと高パフォーマンスを実現しながらも幅広いプラットフォームにスケーリング可能な強力なソリューションとなりました。2D・3D・VR・AR のどの形式のプロジェクトでも、一度の開発で全プラットフォームにデプロイしたいなら、このレンダリング技術が最適です。Unity 2019.3 で、LWRP はユニバーサルレンダーパイプライン(UniversalRP)へと進化を遂げました。

対応プラットフォーム

UniversalRP の対応プラットフォームは、今後もさらに追加される予定です。

UniversalRP を使用する利点

  • 現在ではプロジェクト版への使用が可能
  • 一回の開発で、Unity のすべての対応プラットフォームにデプロイが可能
  • すべての形式のプロジェクト(2D、3D、XR)に適している
  • アーティスト向けに設計された各種ツール(Visual Effect Graph、シェーダーグラフ、レンダーパス)を搭載
  • 今後も進化し続け、Unity プロジェクトのデフォルトのレンダリングオプションとなる見込み
  • 2019.4 LTS でサポート

LWRP からのアップグレードに際して知っておくべきこと

ユニバーサルレンダーパイプライン(UniversalRP)は、LWRP が名称を変えて継続されるものです。クリエイターの皆様にとって、LWRP から UniversalRP への移行は比較的シームレスです。現在 LWRP を使用しているプロジェクトは、ごくわずかな設定作業のみで UniversalRP へアップグレード可能です。LWRP で記述されたカスタムのレンダリングエフェクトやシェーダーは、自動的に UniversalRP にアップグレードされます。カスタムシェーダー内で Shader.Find または UsePass をご使用の場合に限り、シェーダーパスの手動でのアップグレードが必要になります。

UniversalRP へアップグレードされる場合は、ポストプロセッシングエフェクトのアップグレードも必要になります。ポストプロセッシングがパイプライン内に直接統合されたので、別途パッケージを取得する必要はなくなりました。ユーザー体験が向上した上に、Post-processing Stack v2(PPv2)よりも高性能になりました。ただし、現在ポストプロセッシングはカスタムエフェクトに対応していません(今後追加される予定です)。

UniversalRP のポストプロセッシング機能には、アンチエイリアシング、被写界深度、モーションブラー、Panini プロジェクション、ブルーム、レンズの歪み、色収差、カラーグレーディング、トーンマッピング、ビネット、フィルムグレイン、8 ビットディザリングが含まれます。

UniversalRP のポストプロセッシングエフェクトのいくつかの例

LWRP から UniversalRP へのアップグレードに関する詳細なガイドは今後公開される予定ですので、もう少々お待ちください。

ビルトインレンダリングパイプラインからのアップグレードが推奨される理由

UniversalRP は拡張可能

Unity のビルトインレンダリングパイプラインでは、フォワードレンダリングパスとディファードレンダリングパスのどちらかが選択可能でした。拡張性は、パイプライン内の特定のイベント内にコマンドバッファを注入することによって実現されていました。しかし、カスタムのレンダリングストラテジーを追加することができず、既存のものの拡張は、数か所の注入ポイントのみでしか行えませんでした。

UniversalRP は、レンダラーという概念の導入によって拡張性を向上させています。レンダラーは、一式の機能とライティングストラテジーを実装するものです。

Unity 2019.3 の UniversalRP には、すべてのライトのシェーディングをシングルパスで行うフォワードレンダラーと、複数のタイプのリアルタイムライトをサポートする 2D レンダラーが搭載されています。最適化済みのディファードレンダラーは近い将来に公開される予定となっています。

プロジェクトをセットアップする際に、パイプラインアセット内のレンダラーのリストが宣言可能となり、各カメラにそのリスト内の特定のレンダラーを使用させることができるようになりました。

(右)パイプラインアセットにレンダラーのリストが含まれている(左)カメラに使用させるレンダラーを選択する

開発者は独自のレンダラーを作成して(例えばタイル/クラスターベースのレンダリングなどの)レンダリングストラテジーを追加することで、このパイプラインを拡張することができます。カスタムレンダリングパイプラインを一から構築する代わりに UniversalRP 用のカスタムレンダラーを実装するようにすれば、レンダリングの基本的要素の多くは UniversalRP に任せることができます。レンダラーが一旦実装されれば、すぐに使用を開始できます。

また、追加的なレンダラー機能でレンダラーを拡張することも可能です。この機能はレンダーパスをレンダラー内に注入するためのリソースとロジックを含んだスクリプタブルオブジェクトです。各機能が 1 つまたは複数のレンダーパスをレンダラー内の特定のイベントに注入できます。UniversalRP には、多くのカスタマイズを行うことができる汎用の RenderObjects 機能が含まれています。これをレンダラー内の「Renderer Features」リストに追加することでレンダラーに追加することができます。また、カスタム機能の作成も可能です。UniversalRP は、カスタム機能を作成するためのスクリプトテンプレート(Asset -> Create -> Rendering -> Universal Render Pipeline -> Renderer Feature から利用可能)を提供しています。UniversalRP の拡張に関してさらに詳しく学びたい方は、こちらのプレゼンテーション動画をご視聴ください。またカスタムレンダリングの各種サンプルもご覧いただけます。

(左)FPSSetup は追加的なレンダラー機能を持つフォワードレンダラー (右)「+」アイコンをクリックするとレンダラーに機能を追加できる

UniversalRP を拡張したプロダクトの実例

『Crest Ocean』(アセットストアでご入手いただけます)の開発チームは、UniversalRP を拡張してリアリスティックな海を作り出しました。このようなエフェクトは従来は実現が困難でしたが、明示的なフックによって、レンダラーをゼロから記述し直すことなくレンダリングを大幅に拡張することが可能になりました。

UniversalRP がパフォーマンスにもたらす利点

UniversalRP は、従来のビルトインレンダリングパイプラインよりも軽量なレンダリングソリューションであるだけでなく、結果のクオリティも向上します。ビルトインレンダリングパイプラインから UniversalRP へプロジェクトをアップグレードした場合、アップグレード前と同等あるいはそれ以上のパフォーマンスが見込まれます。

私達は、 『POLYGON - Farm』アセットパックをビルトインレンダリングパイプラインから UniversalRP へ変換し、iPhone 6S でそのビジュアルとパフォーマンスを比較しました。両方のプロジェクトを調整して品質設定とレンダリング設定を一致させました。UniversalRP の使用によって、ビジュアル品質を落とすことなく、より高いフレームレートを実現することができました。

ユニバーサルレンダーパイプライン(UniversalRP)
ユニバーサルレンダーパイプライン(UniversalRP)
ビルトインレンダリングパイプライン
*ドローコール回数の相違は、UniversalRP がひとつひとつの追加ライトに対して追加的なドローコールをレンダーしないことに起因します。**バッチ数の相違は、UniversalRP がシェーダーごとにバッチするのに対し、ビルトインレンダリングパイプラインがマテリアルごとにバッチすることに起因します。

プロジェクトを変換してもパフォーマンスが向上しない場合は、まず、2 つのパイプラインの品質設定が一致しているかどうかを確認してください。UniversalRP は品質設定の全項目をパイプラインアセット内で制御します。このパイプラインでは、品質設定の特定の組み合わせごとにパイプラインアセットを設定することが可能になりました。つまり、すべての品質設定項目をパイプラインアセット内でまとめて管理しながらも、異なるプラットフォーム間で品質をスケーリングすることができます。ビルトインレンダラーの場合はこれとは異なり、品質設定項目が Quality Settings 内と Graphics の Tier 内に散在しています。プロジェクトを UniversalRP に変換する際、元のプロジェクトの設定は自動的にアップグレードされません。品質設定は手動でアップグレードしていただく必要があります。

UniversalRP にプロジェクトを変換した際、品質設定が一致しているにも関わらずパフォーマンスが低下した場合は、バグの報告をお送りくださいますようお願いいたします。

UniversalRP の未来

UniversalRP は今後も進化し続けます。皆様にはぜひ Visual Effect Graph やシェーダーグラフ、カスタムレンダーパス、そして最新のポストプロセッシングなどの機能をご活用いただきたいと願っております。UniversalRP を使用すれば、従来と同等あるいはそれ以上の品質とパフォーマンスを実現しながら、一回の開発で幅広いプラットフォームにデプロイすることが可能となります。

2020 年にはビルトインレンダラーとの機能のパリティを実現すべく、取り組みが進んでいます。これにはディファードレンダラーやカメラスタッキングが含まれます。従来と同じ各種機能を引き続きプロジェクトにご使用いただけますが、その方法が一部変更されます。

このスクリプタブルレンダーパイプラインの開発中に、レンダリングシステムが再設計されました。一部の機能は(より良い代替機能が開発されたために)廃止されます。UniversalRP で変更された機能には、レンダリングコールバック、Grabpass、カメラスタッキングなどが含まれます。

私達は、機能の進化だけでなくパフォーマンスの向上にも継続的に取り組んでいます。通常は、同じ品質設定で UniversalRP を使用すると、従来のレンダリングソリューションと同等あるいはそれ以上のパフォーマンスが発揮されます。そうならない場合には、これをリグレッションとして扱い、バグとして処理しています。

2021 年にはすべての対応プラットフォームでのパフォーマンスが確実に維持されるようにすることを目標とし、かつ、高性能モバイルおよびコンソールプラットフォーム向けの機能の追加によって UniversalRP を進化させるべく取り組みを進めています。

ユニバーサルレンダーパイプラインと HD レンダーパイプライン

ユニバーサルレンダーパイプライン(UniversalRP)は HD レンダーパイプライン(HDRP)の代替となるものではなく、HDRP の機能を含むものでもありません。

ユニバーサルレンダーパイプラインは、将来的には Unity のデフォルトのパイプラインとなる計画です。一回の開発であらゆるプラットフォームにデプロイ可能なこのパイプラインは、より高い柔軟性と拡張性を備え、ビルトインレンダリングパイプライン以上のパフォーマンスを実現し、グラフィック品質をも向上させます。

HDRP は最高品質のグラフィックスを実現します。HDRP は、高性能ハードウェア向けのグラフィックスに重点を置いた、高パフォーマンスで強力な、忠実度の高いビジュアルを目標とするプロジェクトに最適です。

使用するレンダリングパイプラインは、プロジェクトの機能やプラットフォーム要件に応じてご選択ください。

UniversalRP を使ってみよう

今すぐ UniversalRP へのアップグレードを行って、製品版への使用が可能になった機能の数々をお試しになり、パフォーマンス向上のメリットをお受け取りください!プロジェクトをアップグレードするには、アップグレードツールをご使用になるか、Unity Hub から Universal テンプレートを使用して新規プロジェクトを開始してください。

ユニバーサルレンダーパイプラインに関するフォーラムに、ぜひフィードバックをお寄せください!

2019年9月20日 カテゴリ: Engine & platform | 8 分 で読めます

Is this article helpful for you?

Thank you for your feedback!