Version: 2021.2
言語: 日本語
レンダーパイプラインの切り替え
ビルトインレンダーパイプラインの使用

レンダーパイプラインとライティングソリューションの選択と設定

このガイドは Unity ブログ Spotlight チームのベストプラクティス - ライティングパイプラインのセットアップ - Pierre Yves Donzallaz を更新したものです。

定義

最初に、このガイドで頻繁に登場するいくつかの重要なグラフィックスレンダリング用語の定義を見てみましょう。

  • レンダリングパイプライン は、シーンのオブジェクトがどのように表示されるかを 3 つの主要な段階で決定します。
    • 最初のステップはカリングです。これは、レンダリングする必要のあるオブジェクト、できれば、カメラに見えるオブジェクト (錐台カリング) と他のオブジェクトによって隠されていないオブジェクト (オクルージョンカリング) を列挙します。
    • 2 番目のステップはレンダリングです。これらのオブジェクトを、適切なライティングといくつかのプロパティとともに、ピクセルベースのバッファに描画することです。
    • 最後に、これらのバッファに対してポストプロセス操作を実行します。例えば、カラーグレーディング、ブルーム、被写界深度を適用して、ディスプレイデバイスに送信する最終的な出力フレームを生成します。

これらの操作は、フレームレートに応じて、1 秒間に何度も繰り返されます。

  • シェーダーはプログラムや一群のプログラムの総称で、グラフィックス処理ユニット (GPU) で実行されます。例えば、カリング段階が完了した後、頂点シェーダーを使用して、可視オブジェクトの頂点座標を “オブジェクト空間” から “クリップ空間” と呼ばれ異なる空間に変換します。GPU はこの新しい座標を使用して、シーンをラスタライズします。すなわち、シーンのベクトル表現を実際のピクセルに変換します。後の段階で、これらのピクセルはピクセルシェーダー (またはフラグメントシェーダー) で色付けされます。ピクセル色は、一般に、それぞれのサーフェスのマテリアル特性と周囲のライトに依存します。最近のハードウェア上で利用可能なもう 1 つの一般的なシェーダーは、コンピュートシェーダー です。これを利用すると、ライトカリング、パーティクル物理特性、ボリュメトリックシミュレーションなど、あらゆる種類の数学的演算に GPU の強力な並列処理能力を活用することができます。
  • 直接光は、電球などのような自発光型の光源が発するライトを意味し、サーフェスからライトがバウンスした結果のライトではありません。光源のサイズと受光側までの距離に応じて、このようなライトは通常、くっきりとした影を生成します。
    • 直接光とディレクショナルライトを混同しないようにしてください。ディレクショナルライトは、無限に離れた光源 (例えば、コンピューターでシミュレーションされた太陽) から放出される光です。ディレクショナルライトの目立った特性は、シーン全体を平行な光線でカバーできることと、距離減衰 (または光減衰) がないことです。つまり、光源への距離が増加しても受ける光の量は減衰しません。
    • In reality, the sunlight, like any other source of light, falls off over distance, based on the inverse-square law. Simply put, the amount of received light drops quickly when increasing the distance between the receiver and the light source. For example, the illuminance on Mercury is almost 7 times higher than on Earth, and Mars receives nearly half of Earth’s sunshine, whereas Pluto enjoys a mere 0.06%. Nevertheless, for most real-time applications with a limited altitude range, the sunlight decay is insignificant. Therefore, the directional light is perfectly adequate to simulate sunlight in most Unity scenes, including large, planet-centric, open worlds.
  • 間接光は光がサーフェスに反射し、大気や半透明なマテリアルなどの媒体を通じて拡散することによって発生します。このような条件下では、遮蔽物は一般的にぼんやりした、または識別できない影を投影します。
  • グローバルイルミネーション (GI) は、直接ライティングと間接ライティングの両方をモデルとして、現実的なライティングを得る一群のテクニックです。GI には、ベイクした/動的なライトマップ、放射照度のボリューム、光伝播ボリューム、ベイクした/動的なライトプローブ、ボクセルベースの GI、距離フィールドベースの GI などいくつかの方法があります。Unity は、ベイクした/動的なライトマップとライトプローブをサポートします。
  • ライトマッパー は基本的なシステムで、光線を射影し、ライトバウンスを計算し、結果のライティングをテクスチャに適用することによって、ライトマップとライトプローブのデータを生成します。したがって、ライトマッパーが異なると、ライトのデータの生成に異なる技術を使用することがあるため、異なったライティングの外観を生成する場合があります。

概要

次のフローチャートは、コンテンツ作成者の視点で、Unity のすべてのライティングパイプライン全体を高レベルから見たものです。

まず、レンダリングパイプラインを選択します。次に、間接光をどのように生成するかを決定し、それに応じてグローバルイルミネーション (GI) システムを選択します。すべてのグローバルライティング設定がプロジェクトに適切に調整されていることを確認した後、ライトエミッシブサーフェスリフレクションプローブライトプローブLight Probe Proxy Volume (LPPV) を加えます。これらすべてのライティングオブジェクトの使用法や機能の詳細はこのページのスコープを超えています。ですから、マニュアルのライティングのセクションを読んで、プロジェクトで正しく活用する方法を学ぶことをお勧めします。

レンダリングパイプライン

2018 年の初めまで、Unity で使用できるレンダリングパイプラインは ビルトインレンダーパイプライン 1 つだけでした。このレンダリングパイプラインでは、フォワードとディファードの レンダリングパス が選択できます。

  • (マルチパス) フォワードレンダリングパス を使用すると、シーン内のすべてのオブジェクトが 1 つずつ順番にレンダリングされます。各オブジェクトに影響を与えるライトの数に応じて、それが複数のパスで行われる可能性があります。そのため、そのレンダリングコストは、オブジェクトが複数のライトによって照らされると著しく増加します。このタイプのレンダラーは一般的に、さまざまなシェーダーを提供し、簡単に透明度を処理できます。
  • ディファードレンダリングパス を使用すると、すべての (不透明な) ジオメトリが最初にバッファにレンダリングされ、バッファはマテリアルに関する情報 (カラー、スペキュラー、スムースネスなど) に関する情報を格納します。後のパス (つまり、“ディファード”) では、各ピクセルは順にシェーディングされます。レンダリング時間は主に各ピクセルに影響を与えるライトの数に依存します。透明なオブジェクトと複雑なシェーダーを持つ特定のオブジェクトは、追加のフォワードレンダリングパスを必要とします。ディファードレンダリングは通常、人工的に照らされたインテリアや屋外と屋内のライティングを組み合わせたプロジェクトなど、多くの動的ライトを含むシーンを扱う場合に適しています。

2018 年 1 月に、スクリプタブルレンダーパイプライン (SRP) を発表しました。これを利用すると、C# スクリプティングを使用してレンダリングループをカスタマイズすることができます。実際、これはゲームエンジンの分野での小さな革命です。ユーザーはついに、C++ のような低レベルのプログラミング言語を使用せずに、オブジェクトのカリング、描画、フレームのポストプロセスをパーソナライズすることができるようになりました。

Unity は現在 2 つの構築済み SRP を提供しています。

  • HD レンダーパイプライン (HDRP) は、ハイブリッドのディファード/フォワードで、タイル/クラスターのレンダラーです。高度なレンダリングとシェーディング機能を提供し、高度な視覚的忠実性が求められる PC やコンソールのプロジェクト向けに設計されています。

タイルはフレームの小さな 2 次元の正方形のピクセル範囲であり、クラスターはカメラの錐台内部の 3 次元ボリュームです。タイルとクラスターのレンダリング技術は両方とも、個々のタイルとクラスターに影響を与えるすべてのライトのリストに依存しています。タイルやクラスターのライティングは、それから、既知のライトの対応リストを使って 1 回のパスで計算されます。不透明なオブジェクトはタイルシステムを使用してシェーディングされることが最も一般的ですが、透明なオブジェクトはクラスターシステムを利用します。このレンダラーが提供する主な利点は、ビルトインレンダリングパイプライン (ディファード) と比較して、ライティングの処理が高速で、帯域幅消費が大幅に削減されることです。ビルトインレンダーパイプラインは、ずっと時間のかかるマルチパスのライト集積を利用しています。

  • ユニバーサルレンダーパイプライン (URP) は高速なシングルパスフォワードレンダラーです。これは主に、古いスマートフォン、タブレット、XR デバイスなど、 コンピュートシェーダーテクノロジーをサポートしないローエンドデバイス向けに設計されています。ただし、URP は、コンソールや PC などのミドルレンジデバイス向けにより高い品質のグラフィックスを提供することもできます。その場合、ビルトインレンダーパイプラインよりもパフォーマンスコストが低くなる場合があります。ライトはオブジェクトごとにカリングされ、1 回のパスでライティングを計算できるため、ビルトインレンダーパイプラインに比べてドローコールが削減されます。最後に、URP は 2D レンダラーも提供しており、ディファードレンダラーも計画されています。

下のフローチャートを使用すると、いくつかの重要な基準に基づいてどのレンダリングパイプラインを選択すべきかがすぐにわかります。

設定

HDRP と LWRP の最新バージョンは Unity Package Manager (Window > Package Manager) からダウンロードできます。これらの SRP の 1 つを開始するもっとも簡単な方法は、Unity Hub で対応するテンプレートの 1 つを使用して新しいプロジェクトを作成することです。

HDRP 用にプロジェクトを設定したい場合は、必要なパッケージがインストールされていることを確認してください。次に、HD レンダーパイプラインウィザード (Window > Render Pipeline > HD Render Pipeline Wizard) を使用して、プロジェクトをワンクリックで設定します。

拡張性

レンダリングに関する知識があり C# に精通していて、プロジェクトのレンダラーの完全な調整が必要な場合は、SRP の概念を使用して、カスタムのスクリプタブルレンダーパイプラインを作成できます。ユニバーサルレンダーパイプラインはシェーダーライブラリが小さく、レンダリングパスを簡単に挿入、除去、スワップすることができるため、拡張が特に容易です。

互換性

プロジェクトのマテリアルをビルトインレンダーパイプラインから HDRP か URP に変換するのは、Edit > Render Pipeline > Upgrade… の 1 クリックマテリアルコンバーターのおかげで比較的簡単です。ただし、それは不可逆的な操作であることに注意してください。事前にプロジェクトをバックアップすることを強くお勧めします。

それでも、カスタムシェーダーは手作業で変更する必要があるため、ビルトインレンダーパイプラインから HDRP または URP への移行は、書き直す必要があるカスタムシェーダーの数に応じて、時間がかかる場合があります。

さらに、HDRP はビルトインレンダーパイプラインよりも物理的に正確であるため (特に光の減衰と分布に関しては)、HDRP に切り替えた後にプロジェクトが同じように見えると期待すべきではありません。

さらに、HDRP と URP は同じレンダリング機能を共有しないため、相互互換性がありません。プロジェクトを HDRP から URP に、またはその逆に変換することは可能ですが、1 クリック操作ではなく、ライティング、マテリアル、シェーダーを手動で再処理する必要があります。

グローバルイルミネーションシステム

Two of the Global Illumination systems available in Unity are:

  1. Realtime Global Illumination: This system is built on Enlighten, a third-party middleware solution. It enables you to adjust your lighting in real-time if you do a precompute and do not modify GameObjects in your scene with the ContributeGI setting enabled. See the HDRP and URP for compatibility information specific to scriptable render pipelines. Unless otherwise specified, the Built-In Render Pipeline supports all features described in this article.

  2. Baked Global Illumination: When you use this system, Unity bakes lighting data into textures called lightmaps, and into Light Probes and into reflection probes. There are two lightmappers: Enlighten Baked Global Illumination and the Progressive Lightmapper (CPU or GPU). See the HDRP and URP documentation for compatibility information specific to scriptable render pipelines. Unless otherwise specified, the Built-In Render Pipeline supports all features described in this article.

The Progressive Lightmapper calculates indirect lighting values using path tracing. It can prioritize precomputing lighting that affects objects visible to the scene view camera. Although only updating lighting for parts of lightmaps increases the overall bake time, it also enables you to more quickly iterate on your lighting design.

For more information about lighting features in the Scriptable Render Pipelines, see the Universal Render Pipeline and High Definition Render Pipeline Documentation.

静的 vs 動的

どのような GI システムを使用する場合でも、ライティングのベイク/事前計算の際に、 “Contribute GI” とマーク付けされたオブジェクトのみが考慮されます。動的な (つまり静的でない) オブジェクトは、間接光を受けるためにシーン全体に配置したライトプローブに依存します。

ライトのベイク/事前計算は比較的遅いプロセスなので、凹面やセルフシャドウなど、明確なライティングの変化を伴う大規模で複雑なアセットのみを “Contribute GI” としてマーク付けすべきです。均一なライティングを受ける小さい凸状のメッシュは “Contribute GI” として扱うべきではありません。したがって、よりシンプルなライトの近似を格納する ライトプローブ から間接光を受ける必要があります。大きい動的オブジェクトは、より局部化された間接光を受けるために LPPV を使用することができます。シーン内で “Contribute GI” とマーク付けするオブジェクト数を制限することは、適切なライト品質を維持しながらベイク時間を最短にするためにとても重要です。最適化のプロセスとプローブライティングの重要性については チュートリアル を参照してください。

注意

The Unity Editor and Player allow you to use both Enlighten Realtime Global Illumination and baked lighting at the same time.

However, simultaneously enabling these features greatly increases baking time and memory usage at runtime, because they do not use the same data sets. You can expect visual differences between indirect light you have baked and indirect light provided by Enlighten Realtime Global Illumination, regardless of the lightmapper you use for baking. This is because Enlighten Realtime Global Illumination often operates at a significantly different resolution than Unity’s baking backends, and relies on different techniques to simulate indirect lighting.

If you wish to use both Enlighten Realtime Global Illumination and baked lighting at the same time, limit your simultaneous use of both global illumination systems to high-end platforms and/or to projects that have tightly controlled scenes with predictable costs. Only expert users who have a very good understanding of all lighting settings can effectively use this approach. Consequently, picking one of the two global illumination systems is usually a safer strategy for most projects. Using both systems is rarely recommended.

ライトモード

Light コンポーネントの Mode プロパティは、混乱しやすい共通のソースです。

Light インスペクター には 3 つの ライトモードが あります。

  1. Baked: ライトからの直接光と間接光をライトマップにベイクします。これは時間のかかる処理です。これらのライトを処理するためのランタイムのコストはありませんが、シーンに結果のライトマップを適用するのにわずかなコストがかかります。
  2. Realtime: The direct lighting and shadows from these lights are real-time and therefore not baked into lightmaps. Their runtime cost can be high, depending on the complexity of the scene, the number of shadow casting lights, the number of overlapping lights, etc. Furthermore, if you enable Enlighten Realtime Global Illumination, further performance costs will be incurred to update the indirect lighting at runtime.
  3. Mixed: ベイクした間接ライティングやリアルタイムの直接ライティングなど、ベイクとリアルタイムの特徴を組み合わせたハイブリッドモードです。シーンのすべての混合ライトの動作とパフォーマンスへの影響は、そのシーンの Lighting Mode によって異なります。

It is important to note that the mode of a light is only relevant if the Baked Global Illumination system is enabled. If you do not use any global illumination system or only use Enlighten Realtime Global Illumination system, then all Baked and Mixed lights will behave as though their Mode property was set to Realtime.

以下の図は、フローチャートと比較表を組み合わせたものです。新しいライトがシーンに追加されるたびに適切なライトモードを決定するのに役立ちます。

ライティングモード

上の図からわかるように、シーンのすべての Mixed (混合) ライトには、Lighting ウィンドウで選択したライティングモードに応じて、特定のベイク機能とリアルタイム機能があります。

3 つのモードから選択できます。

  1. Subtractive
  2. Baked Indirect
  3. Shadowmask

Shadowmask Lighting Mode には 2 つの品質設定があります。

  1. Shadowmask
  2. Distance Shadowmask

HDRP の Shadowmask Lighting Mode を使用する場合、シャドウマスク機能は Graphics 設定で割り当てられた HDRP アセットで有効です。次に、Frame Settings を使用してカメラに対して有効にする必要があります。

レンダリングパイプライン比較表

See the HDRP and URP documentation for compatibility information specific to scriptable render pipelines. Unless otherwise specified, the Built-In Render Pipeline supports all features described in this article.

ライティングシナリオ

レンダリングパイプラインと主なライティング機能を説明したので、いくつかのプロジェクトの例で、どの設定をライトに使用するかを見てみましょう。すべてのプロジェクトはそれぞれ独特であるため、要件に応じて若干異なるオプションを使用する場合があります。

1. プロトタイプまたは素早い事前可視化

プロトタイプの作成に頻繁にAsset Store を使用している場合は、ストアにあるほとんどのアセットが HDRP と URP と完全に互換性があるわけではないため、ビルトインレンダーパイプラインのみが適切なレンダリングパイプラインになります。それでも、アセットの互換性は時間の経過とともに向上します。すべてのアセットを基礎から構築していて、すでにそのプロジェクトの要件を明確に理解している場合は、2 つの SRP (URP か HDRP) のうち 1 つを選択するか、カスタムのものを作成します。

When you are in the early stage of (pre-)production and need a quick turnaround and maximum flexibility for the lighting, you might prefer a full real-time approach that does not require any precomputation, therefore you might want to turn off both Baked Global Illumination and Enlighten Realtime Global Illumination. To alleviate the lack of proper indirect lighting, you can enable Screen Space Ambient Occlusion: it can help ground the object in the scene by offering cheap real-time contact shadows.

2. 3D モバイル戦略ゲーム

If you are targeting mobile devices, URP could be a great candidate to ensure solid performance for your game. It is in many cases possible to customise URP to suit your game’s specific needs, with help from a graphics programmer.

The Built-In Render Pipeline and URP both support Shadowmask Lighting Mode which makes it possible for you to bake shadows for static objects while still enabling dynamic objects to cast real-time shadows. If Shadowmasks are too expensive for your project, you can fall back to the cheapest Subtractive mode. Finally, the forward rendering path is probably the best option if you have a very small number of lights in your level(s), and if you’re targeting older hardware.

3. 優良画質の迷路のシューティングゲーム (1 日の固定された時刻)

リニアの 1 人称シューティングゲームで PC やコンソール用に優良画質のビジュアルを目指す場合は、HDRP が望ましいレンダリングパイプラインと言えます。また、グラフィックスプログラマーの助けを借りて、カスタムの SRP を開発することもできます。

If your levels contain many real-time shadow casting lights (e.g. destructible light props and moving lights), then using the Baked Global Illumination system with the Baked Indirect mode should ensure you get great looking indirect lighting from the Mixed directional light and the Baked lights in static light props. If your levels consist of a larger proportion of fixed shadow casting lights, then an approach with Shadowmasks could be recommended because HDRP offers a great hybrid Shadowmask mode which gives you more control over the blend between real-time and baked shadows.

Nintendo Switch もサポートする場合は、URP を使用することをお勧めします。これにより、市場に出回っているほとんどのゲームプラットフォームをサポートすることができ、プロジェクトを HDRP から URP に、またはその逆に変換するという面倒な処理を行う必要がありません。

4. バトルロイヤル (昼夜のサイクル)

PC やコンソール用に大規模な環境と完全に動的なライティングを特徴とするバトルロイヤルゲームをリリースする場合は、HDRP を選択するか、プロジェクトにレンダリングパイプラインを合わせるために HDRP を拡張する必要があります。質の高い視覚的忠実度を目指すのではなく、モバイルデバイスや低仕様のシステムをターゲットにしている場合は、URP を検討することもできます。

For this particular scenario, if you are using the Built-in Render Pipeline, activating both the Enlighten Realtime Global Illumination and a Baked Global Illumination system is not recommended, because the resulting overhead in terms of performance and scene management for an immense level could be problematic. Another argument against the use of both global illumination systems is the unpredictable nature of such large-scale multiplayer games: performance estimations are for instance more difficult than in a highly-scripted linear level.

最後に

スクリプタブルレンダーパイプラインが導入されたことで、Unity のレンダリング環境は著しく変化しました。したがって、ライティングパイプラインのためのこれらのすべての変更とそれらの影響に追いつくことは、大変な作業です。

このガイドと多くの図が各レンダリングパイプライン の機能をよりよく理解する助けとなり、みなさんが Unity のプロジェクトを確実に適切な設定で自信をもってライティングできるよう願っています。

Unity のライティングとレンダリングパイプラインの詳細については、以下の記事を参照してください。

レンダーパイプラインの切り替え
ビルトインレンダーパイプラインの使用