このガイドは Unity ブログ Spotlight チームのベストプラクティス - ライティングパイプラインのセットアップ - Pierre Yves Donzallaz を更新したものです。
最初に、このガイドで頻繁に登場するいくつかの重要なグラフィックスレンダリング用語の定義を見てみましょう。
これらの操作は、フレームレートに応じて、1 秒間に何度も繰り返されます。
次のフローチャートは、コンテンツ作成者の視点で、Unity のすべてのライティングパイプライン全体を高レベルから見たものです。
まず、レンダリングパイプラインを選択します。次に、間接光をどのように生成するかを決定し、それに応じてグローバルイルミネーション (GI) システムを選択します。すべてのグローバルライティング設定がプロジェクトに適切に調整されていることを確認した後、ライト、エミッシブサーフェス、リフレクションプローブ、ライトプローブ、Light Probe Proxy Volume (LPPV) を加えます。これらすべてのライティングオブジェクトの使用法や機能の詳細はこのページのスコープを超えています。ですから、マニュアルのライティングのセクションを読んで、プロジェクトで正しく活用する方法を学ぶことをお勧めします。
2018 年の初めまで、Unity で使用できるレンダリングパイプラインは ビルトインレンダーパイプライン 1 つだけでした。このレンダリングパイプラインでは、フォワードとディファードの レンダリングパス が選択できます。
2018 年 1 月に、スクリプタブルレンダーパイプライン (SRP) を発表しました。これを利用すると、C# スクリプティングを使用してレンダリングループをカスタマイズすることができます。実際、これはゲームエンジンの分野での小さな革命です。ユーザーはついに、C++ のような低レベルのプログラミング言語を使用せずに、オブジェクトのカリング、描画、フレームのポストプロセスをパーソナライズすることができるようになりました。
Unity は現在 2 つの構築済み SRP を提供しています。
タイルはフレームの小さな 2 次元の正方形のピクセル範囲であり、クラスターはカメラの錐台内部の 3 次元ボリュームです。タイルとクラスターのレンダリング技術は両方とも、個々のタイルとクラスターに影響を与えるすべてのライトのリストに依存しています。タイルやクラスターのライティングは、それから、既知のライトの対応リストを使って 1 回のパスで計算されます。不透明なオブジェクトはタイルシステムを使用してシェーディングされることが最も一般的ですが、透明なオブジェクトはクラスターシステムを利用します。このレンダラーが提供する主な利点は、ビルトインレンダリングパイプライン (ディファード) と比較して、ライティングの処理が高速で、帯域幅消費が大幅に削減されることです。ビルトインレンダーパイプラインは、ずっと時間のかかるマルチパスのライト集積を利用しています。
下のフローチャートを使用すると、いくつかの重要な基準に基づいてどのレンダリングパイプラインを選択すべきかがすぐにわかります。
You can download the latest versions of HDRP and URP via the Unity Package Manager (Window > Package Manager). The easiest way to get started with one of these SRPs is to create a new project with the Unity Hub and use one of the corresponding templates.
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:
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.
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.
どのような 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 つの ライトモードが あります。
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 つのモードから選択できます。
Shadowmask Lighting Mode には 2 つの品質設定があります。
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.
レンダリングパイプラインと主なライティング機能を説明したので、いくつかのプロジェクトの例で、どの設定をライトに使用するかを見てみましょう。すべてのプロジェクトはそれぞれ独特であるため、要件に応じて若干異なるオプションを使用する場合があります。
プロトタイプの作成に頻繁に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.
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.
リニアの 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 に、またはその逆に変換するという面倒な処理を行う必要がありません。
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 のライティングとレンダリングパイプラインの詳細については、以下の記事を参照してください。