最初に、このガイドで頻繁に登場するいくつかの重要なグラフィックスレンダリング用語の定義を見てみましょう。
シェーダー はグラフィックス処理ユニット (GPU) で実行されるプログラムや一群のプログラムの総称です。例えば、カリング段階が完了した後、頂点シェーダーを使用して、可視オブジェクトの頂点座標を「オブジェクト空間」から「クリップ空間」と呼ばれ異なる空間に変換します。それから、GPU はこの新しい座標を使用して、シーンをラスタライズ、すなわち、シーンのベクトル表現を実際のピクセルに変換します。後の段階で、これらのピクセルはピクセルシェーダー (またはフラグメントシェーダー) で色付けされます。ピクセル色は、一般に、それぞれの表面のマテリアルの特性と周囲のライトに依存します。最近のハードウェア上で利用可能なもう 1 つのシェーダーは、コンピュートシェーダー です。これを利用すると、ライトカリング、パーティクル物理特性、体積シミュレーションなど、あらゆる種類の数学的演算に GPU の強力な並列処理能力を活用することができます。
間接光 はライトが表面に反射し、大気や半透明なマテリアルなどの媒質を透過して散乱することによって発生します。このような条件下では、遮蔽物は一般的にぼんやりした、または識別できないシャドウを投影します。
次のフローチャートは、コンテンツ作成者の視点で、Unity のすべてのライティングパイプライン全体を高レベルから見たものです。
まず、レンダリングパイプラインを選択します。次に、間接光をどのように生成するかを決定し、それに応じてグローバルイルミネーション (GI) システムを選択します。すべてのグローバルライティング設定がプロジェクトに適切に調整されていることを確認した後、ライト、エミッシブサーフェス、リフレクションプローブ、ライトプローブ、Light Probe Proxy Volume (LPPV) を加えます。これらすべてのライティングオブジェクトの使用法や機能の詳細はこのページのスコープを超えています。ですから、マニュアルのライティングのセクションを読んで、プロジェクトで正しく活用する方法を学ぶことをお勧めします。
2018 年の初めまで、Unityには 1 つのレンダリングパイプラインしかありませんでした。これは Built-In Render Pipeline (ビルトインレンダリングパイプライン) と名前が変更されました。このレンダラーでは、フォワード (Forward) レンダリングとディファード (Deferred) レンダリングの選択ができます。
2018 年 1 月に、スクリプタブルレンダーパイプライン (Scriptable Render Pipeline、SRP) を発表しました。これを利用すると、C# スクリプティングを使用してレンダリングループをカスタマイズすることができます。実際、これはゲームエンジンの分野での小さな革命です。ユーザーはついに、C++ のような低レベルのプログラミング言語を使用せずに、オブジェクトのカリング、描画、フレームのポストプロセスをパーソナライズすることができるようになりました。
現在 Unity は、最近多く使用されるハードウェアのためにパフォーマンスを念頭に置いて設計された 2 つのプレビュー SRP を提供しています。
タイルはフレームの小さな 2 次元の正方形のピクセル範囲であり、クラスターはカメラの錐台内部の 3 次元ボリュームです。タイルとクラスターのレンダリング技術は両方とも、個々のタイルとクラスターに影響を与えるすべてのライトのリストに依存しています。タイルやクラスターのライティングは、それから、既知のライトの対応リストを使って 1 回のパスで計算されます。不透明なオブジェクトはタイルシステムを使用してシェーディングされることが最も一般的ですが、透明なオブジェクトはクラスターシステムを利用します。このレンダラーが提供する主な利点は、ビルトインレンダリングパイプライン (ディファード) と比較して、ライティングの処理が高速で、帯域幅消費が大幅に削減されることです。ビルトインレンダリングパイプラインは、ずっと時間のかかるマルチパスのライト集積を利用しています。
下のフローチャートを使用すると、いくつかの重要な基準に基づいてどのレンダリングパイプラインを選択すべきかがすぐにわかります。
You can download the latest versions of the 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.
If you want to set up your project for the HDRP or URP by hand, ensure you have the required package installed. Then create a new asset in your Project window via Create > Rendering > High Definition Render Pipeline Asset. Drag this asset into the Graphics settings. In case you selected the HDRP, ensure the linear color space is selected in the Player settings for your platform and add a Rendering > Scene Settings object into your scene.
Graphics の Project Settings ウィンドウでパイプラインアセットが割り当てられていない場合、Unity はデフォルトのビルトインレンダリングパイプラインを使用します。
If you have some rendering knowledge and are familiar with C#, experimenting with the SRP concept to create your own Custom Scriptable Render Pipeline is definitely recommended if you need to fully tailor the renderer for your project. The URP is especially easy to extend, due to its smaller shader library and the ability to inject, remove and swap rendering passes easily.
Porting your project’s materials from the Built-In Render Pipeline to the HDRP or to the URP is relatively easy in Unity, thanks to a 1-click material converter under Edit > Render Pipeline > Upgrade…; be aware, however, that it is a non-reversible action. Backing up your project beforehand is highly recommended!
Nevertheless, custom shaders will have to be ported by hand, so transitioning from the Built-In Render Pipeline to the HDRP or URP during production might be time-consuming, depending on the number of custom shaders you would have to rewrite.
さらに、HDRP はビルトインレンダリングパイプラインよりも物理的に正確であるため (特に光の減衰と分布に関しては)、HDRP に切り替えた後にプロジェクトが同じように見えると期待すべきではありません。
Furthermore, the HDRP and the URP are not cross-compatible, as they do not share the same rendering features. Porting your project from HDRP to URP and vice versa is possible, but it is not a 1-click operation and will require manual rework of the lighting, the materials and the shaders!
Finally, the HDRP and the URP are still in preview and Unity is hard at work ensuring they will be production-ready very soon. Please be aware that not all features have been implemented yet for both pipelines. For instance, certain lighting modes that I detail below are not yet fully available for the URP, and XR is not yet properly supported by the HDRP.
Unityでは 2 つのグローバルイルミネーション (GI) システムが利用可能です。これらはWindow > Rendering > Lighting Settings で有効にすることができます。
(Precomputed) Realtime Global Illumination: This system entirely relies on Enlighten, a third-party lighting middleware. During the precomputation in Unity, Enlighten goes through two lengthy stages, among others: Clustering and Light Transport. The first one consists in simplifying the scene into a collection of surface patches called clusters, and the second, in calculating the visibility between these clusters. This precomputed data is used at runtime to generate the indirect lighting interactively. The strength of Enlighten relies on the ability to edit the lighting in realtime, as the precomputed data relies on the relation between clusters. However, like in other traditional lightmapping techniques, editing the static geometries in your scene will trigger a new precomputation.
Baked Global Illumination (ベイクした GI): ライトは、ライトマップと呼ばれるテクスチャとライトプローブにベイクされます。ベイクされた GIシステムでは、以下のライトマッパーの 1 つを使用します。
プログレッシブライトマッパーは、シーン全体のすべてのベイク時間を増加させる代わりに、カメラから見えるオブジェクトのライティング計算を優先し、ライティングのイテレーションを大幅に高速化します。プログレッシブライトマッパーは CPU を使用してパストレースで間接光を計算します。新しい GPU プログレッシブライトマッパー は現在開発中で、シーンのベイク時間を著しく短縮します。
Enlighten とプログレッシブライトマッパーはどちらもベイクしたライトを作成するために異なる方法を使用しているため、結果のライトを比較すると正確に同じとは限りません。
下の図を見て、どのような GI システムがプロジェクトに適しているか、またその主な長所と短所を判断してください。
No matter which Global Illumination system you use, Unity will only consider objects that are marked as “Contribute GI” during the baking/precomputing of the lighting. Dynamic (i.e. non-static) objects have to rely on the Light Probes you placed throughout the scene to receive indirect lighting.
Because the baking/precomputing of the lighting is a relatively slow process, only large and complex assets with distinct lighting variations, such as concavity and self-shadowing, should be tagged as “Contribute GI”. Smaller and convex meshes that receive homogeneous lighting should not be marked as static, and they should therefore receive indirect lighting from the Light Probes which store a simpler approximation of the lighting. Larger dynamic objects can rely on LPPVs, in order to receive better localized indirect lighting. Limiting the number of objects tagged as “Contribute GI” in your scene is absolutely crucial to minimize baking times while maintaining an adequate lighting quality. You can learn more about this optimization process and the importance of Probe lighting in this tutorial.
Unity ではベイクされた GI システムとリアルタイム GI システムの両方を同時にアクティブにすることができ、これによりすべてのライティング機能にアクセス可能です。ただし、両方のシステムを有効にすると、同じデータセットに依存しないため、ランタイム時のベイク時間とメモリ使用量が大幅に増加することに注意する必要があります。さらに、ランタイムに間接光をインタラクティブに更新すると、CPU に負担がかかります。また、ベイクとリアルタイム GI システムが作成する間接光を視覚的に比較すると、両システムは間接光をシミュレートするのに異なるテクニックを使用し、しばしば著しく異なる解像度で操作することがあるため、矛盾が生じる場合があります。
両方の GI システムを使用することは、ハイエンドプラットフォームや、コストが予測可能でシーンを厳密に制御できるプロジェクトに制限する必要があります。このアプローチは、両方のシステムの管理は著しく複雑さを増すため、すべてのライティング設定を深く理解している熟練ユーザーのみに適しています。結果的に、2 つの GI システムのうちの 1 つを使用することが、通常、ほとんどのプロジェクトにとってより安全な方法と言えます。両方のシステムを使用することは、ほとんどの場合、推奨されません。
ライトのモードは、よくある混乱の原因となります。最も重要なことは、ライトのモードは Baked Global Illumination が有効になっている場合にのみ関係があります。
Light インスペクターには 3 つのモードがあります。
GI システムを使用しない場合や、Realtime GI システムのみを使用する場合は、Baked と Mixed のライトはすべて Realtime にオーバーライドされます。
以下の図は、フローチャートと比較表を組み合わせたものです。新しいライトがシーンに追加されるたびに適切なライトモードを決定するのに役立ちます。
上の図で分かるように、Mixed ライトは Rendering > Lighting Settings ウィンドウで選択したグローバルの Mixed Lighting モードに応じて、特定のベイクとリアルタイムの機能を持っています。
4 つのモードから選択できます。
Shadowmask Mode と Shadow Distance は Edit > Project Settings > Quality で調整できます。HDRP を使用する場合、Graphics 設定で割り当てた HDRenderPipelineAsset で Shadowmask モードが有効になります。シャドウの Max Distance は Scene Settings オブジェクトで設定できます。
HDRP は新しいハイブリッドシャドウマスクモードをサポートしています。追加設定の Non Lightmapped Only チェックボックスでリアルタイムシャドウを投影するかどうかを制御できます。このパラメーターを使用すると、カメラがライトの Fade Distance 内にある場合はライトがリアルタイムの動的なシャドウを投影します。そうでない場合は、ベイクしたシャドウマスクに戻ります。 HDRP のこの新しいモードの主な利点は、リアルタイムのシャドウの代わりに、メインのディレクショナルライトに使用される Shadow Distance 内の特定のライトにベイクしたシャドウマスクを使用できることです。
The URP and HDRP are still in preview, which means that on the one hand they bring exciting new features to the table, but on the other hand, they might not support certain functions offered by the Built-In Pipeline yet, or drop support for others. The following table gives you an overview of the current state of the lighting pipeline for Unity 2018.3.
レンダリングパイプラインと主なライティング機能を説明したので、いくつかのプロジェクトの例で、どの設定をライトに使用するかを見てみましょう。すべてのプロジェクトはそれぞれ独特であるため、要件に応じて若干異なるオプションを使用する場合があります。
If you heavily rely on the Asset Store to build your prototype, the Built-In Render Pipeline could be the only suitable render pipeline, as most assets found on the Store are not fully compatible with the HDRP and URP; nonetheless, asset compatibility will improve over time. If you are building all the assets from the ground up and already have a clear idea of your project’s requirements, then you could pick one of the two SRPs (i.e. URP or HDRP) or create a custom one.
製作作業やプリプロダクションの初期段階で、ライティングの迅速な転換や最大級の柔軟性が必要な場合は、事前計算を必要としない完全なリアルタイムの方法が便利な場合があります。そのため、ベイクされた GI とリアルタイム GI の両方をオフにします。適切な間接光の不足を緩和するために、Post Processing Stack V2 の Screen Space Ambient Occlusion (スクリーンスペースアンビエントオクルージョン) を有効にします。スクリーンスペースアンビエントオクルージョンは、コストが低いリアルタイムのコンタクトシャドウで、シーン内のオブジェクトの接地感を出すのに役立ちます。
If you are targeting mobile devices, the URP could be a great candidate to ensure solid performance for your strategy game. If the rendering pipeline needs to be customized to better suit your game, a graphics programmer will probably find extending the URP straightforward.
If you pick the URP and use Baked Global Illumination, be aware that at the moment, only the Subtractive Lighting Mode is available for the Mixed lights. Support for Baked Indirect and Shadowmask will be added in a later release.
また、Asset Stoere から多くのアセットを使用するなど、古いビルトインレンダリングパイプラインを引き続き使用する場合は、すべてのグローバルの Mixed ライティングモードがサポートされます。この場合、Shadowmask ライティングモードを使用するとベイクしたシャドウが提供され、動的オブジェクトがリアルタイムのシャドウを投影することが可能です。プロジェクトでシャドウマスクのコストが高すぎる場合は、最もコストの低い Subtractive モードに戻すことができます。最後に、フォワードレンダリングパスは、おそらく、レベルに少数のライトしかない場合や、古いハードウェアをターゲットにしている場合に最適な選択です。
リニアの 1 人称シューティングゲームで PC やコンソール用に優良画質のビジュアルを目指す場合は、HDRP をレンダリングパイプラインに使用すべきです。また、グラフィックスプログラマーの助けを借りて、カスタムの SRP を開発することもできます。
レベルに多くのリアルタイムのシャドウを投影するライト (例えば、破壊可能なライトの小道具や動くライト) がある場合、Baked GI システムを Baked Indirect モードで使用すると、静的ライトプロパティの混合ディレクショナルライトとベイクしたライトからの間接光がきれいに見えるようになります。レベルに高い割合で固定された投影ライトのプロパティが含まれる場合は、シャドウマスクを使用する方法がお勧めです。なぜなら、HDRP は素晴らしいハイブリッドの Shadowmask モードを提供して、リアルタイムシャドウとベイクシャドウのブレンドをより細かく制御できるからです。
このタイプのリニアゲームは一般に、パフォーマンスとメモリ消費の観点から非常に予測可能であるため、ベイクした GI とリアルタイムの GI システムの両方を同時にアクティベーションできます。ただし、GI のセクション で説明しているように、両方のシステムを同時に使用すると、パフォーマンスコストとベイクにかかる時間が大幅に増加します。すべての技術に精通している専門的知識のあるユーザーのみが使用してください。
If you plan to release a battle royale game for PC and consoles, that features large-scale environments and fully dynamic lighting, you should select the HDRP, or extend it to tailor the rendering pipeline to your project. You could consider the URP if you are not aiming for AAA visual fidelity and are targeting mobile devices or systems with lower specifications.
昼夜のサイクルに対応するために、HDRP を選択した場合、Realtime GI システムをアクティブにして、1 日の間の任意の時間の間接光をシミュレートする必要があります。特定の密集した状態で光を受ける内部でパフォーマンスを最大限に上げるには、Realtime GI システムが特定のライトを無視してレンダリングコストがかからないようにするように、特定のライトの Indirect Multiplier を 0 に設定します。
The URP does not support the Realtime Global Illumination system: the day-night cycle would have to be handled with a custom script that would, for instance, modulate the sun and ambient color throughout the day.
この特定のシナリオでは、Realtime GI とBaked GIシステムの両方をアクティブにすることはお勧めできません。なぜなら、パフォーマンスとシーン管理に重大なレベルの多大なオーバーヘッドが発生するからです。GI システムを両方使用することに対するもうひとつの議論は、このような大規模なマルチプレイヤーゲームの予測不可能な性質です。例えば、パフォーマンスの見積もりは、スクリプティングを多く使用したシングルプレイヤーの冒険よりもさらに困難です。
スクリプタブルレンダーパイプラインが導入されたことで、Unity のレンダリング環境は著しく変化しました。したがって、ライティングパイプラインのためのこれらのすべての変更とそれらの影響に追いつくことは、大変な作業です。
このガイドと多くの図が各レンダリングパイプライン の機能をよりよく理解する助けとなり、みなさんが Unity のプロジェクトを確実に適切な設定で自信をもってライティングできるよう願っています。
Unity のライティングとレンダリングパイプラインの詳細については、以下の記事を参照してください。