Version: 2021.2
言語: 日本語
カスタムの減衰
LOD と Enlighten リアルタイムグローバルイルミネーション

Enlighten を使用したリアルタイムのグローバルイルミネーション

Unity では、リアルタイムグローバルイルミネーションに Enlighten というミドルウェアソリューションを使用しています。

デフォルトでは、リアルタイムライト はシーンへ直接ライティングの効果しか与えません。シーンで Realtime Global Illumination (Enlighten リアルタイムフローバルイルミネーション) を有効にすると、リアルタイムライトもシーンに間接ライティングの効果を与えるようになります。

レンダリングパイプラインのサポート

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.

いつ Enlighten リアルタイムグローバルイルミネーションを使用するべきか

Enlighten リアルタイムグローバルイルミネーション (リアルタイム GI) は、ゆっくりと変化し、シーンに大きな影響を与えるライトに有効です。例えば、空を横切る太陽や、閉ざされた廊下でゆっくりと点滅するライトなどです。この機能は、必要な待ち時間と CPU サイクル数のため、特殊効果や急に変わるライトを目的とするものではありません。Enlighten リアルタイムグローバルイルミネーションは、ミッドレベルからハイエンドの PC システムやコンソールをターゲットにしたゲームに適しています。ハイエンドのモバイルデバイスは、この機能を使用するのに十分な性能を持っていますが、パフォーマンスを確保するために、シーンを小さくし、リアルタイムライトマップの解像度を低く保つ必要があります。

Enlighten リアルタイムグローバルイルミネーションの使用

シーンで Enlighten リアルタイム GI を使用するには、Lighting を開き (Window > Rendering > Lighting)、Realtime Global Illumination を有効にします。

特定のライトで リアルタイム GI の効果を無効にするには Light ゲームオブジェクトを選択し、Light コンポーネントで _Indirect Multiplier___を 0 に設定します。つまり、ライトがシーンへ間接ライティングを行わないということです。

リアルタイム GI をまとめて無効にするには、Lighting ウィンドウを開き (Window > Rendering > Lighting)、Realtime Global Illumination のチェックを外します。

For detailed step-by-step advice on using Enlighten Realtime Global Illumination, see the Unity tutorial on Precomputed Realtime GI.

Enlighten リアルタイムグローバルイルミネーションの仕組み

Enlighten リアルタイムグローバルイルミネーションは、シーンを小さなサーフェスパッチに分割し、これらのパッチがお互いにどの程度見えるかを決定します。ランタイムに、Enlighten リアルタイムグローバルイルミネーションは、この事前に計算された可視性の情報を使って、リアルタイムのライトがシーンでどのように跳ね返るかを近似し、結果を一揃いのライトマップに保存し、これらのライトマップを使ってシーンに間接照明を適用します。 ライトマップの更新は計算量が多いので、いくつかのフレームに分割して処理されます。Enlighten リアルタイムグローバルイルミネーションは、間接照明の変更をシーン全体に伝えるのに、数フレームかかります。

ライトプローブと Enlighten リアルタイムグローバルイルミネーション

Enlighten リアルタイム GI を有効にすると、ライトプローブ の動作が変わることに注意してください。

ランタイムのシーンライティングの変化に対応するため。ランタイムに反復的にライトをサンプリングします。

シーンでリアルタイム GI を無効にすると、ライトプローブはベイクしたライティングデータのみを使用します。つまり、ランタイムのシーンのライティングの変更に対応しません。

影と Enlighten リアルタイムグローバルイルミネーション

ライトが影も生成する場合、シーンの動的と静的ゲームオブジェクトの両方がライトの シャドウマップ に描画されます。静的ゲームオブジェクトと動的ゲームオブジェクトの両方の マテリアルシェーダー はこのシャドウマップをサンプリングして、これらのゲームオブジェクトが互いにリアルタイムの影を作るようにします。 Shadow Distance 設定は、影がフェードアウトし始めて完全に消えるまでの最大距離を決定します。これは、パフォーマンスと画質に影響します。

Enlighten リアルタイムグローバルイルミネーションの結果には、シーンが非常に小さい場合を除き、ソフトシャドウも含まれます。これらの影は、通常、ライトマッピングで実現できるものよりも粗い粒度です。

Shadow Distance の設定を変更するには、Edit > Project Settings > Quality > Shadows の順に移動します。

パフォーマンスの考慮点

Enlighten リアルタイムグローバルイルミネーションは、一揃いのライトマップを使用して、リアルタイムの間接バウンスを保存します。このため、ベイクしたグローバルイルミネーションと一緒に使用する場合でも、Enlighten リアルタイムグローバルイルミネーションを有効にするとメモリ要件が増加します。

Enlighten リアルタイムグローバルイルミネーションを使用すると、ライトマップとライトプローブを余分にサンプリングするため、ライティング生成に必要なシェーダー計算の回数も増えます。

Enlighten リアルタイムグローバルイルミネーションの最適化

Enlighten リアルタイム GI がシーンのライティングの変化にすばやく反応しない場合は、この問題に対処する方法がいくつかあります。

  • リアルタイムのライトマップの解像度を下げ、ランタイム時の計算にかかる時間を短くします。
  • Quality Settings ウィンドウで Realtime GI の CPU Usage 設定を増加します。トレードオフとして、他のシステムは CPU 処理時間を短縮できます。これが許容できるかどうかは、プロジェクトによって異なります。これはシーンごとの設定なので、プロジェクトの個々のシーンの複雑さに基づいて、CPU 時間を増減することができます。

デフォルトの環境ライティング寄与の無効化

Unity は、自動的に アンビエントプローブデフォルトのリフレクションプローブ を生成することで、環境ライティングがデフォルトでシーンとその中のゲームオブジェクトに影響を与えるようにします。

手動作成のライトマップとライトプローブがないシーンやゲームオブジェクトで、ライティング結果への環境ライティングの寄与を無効にするには、デフォルトのリフレクションプローブとアンビエントプローブを無効化します。詳細は SkyManager の無効化 を参照してください。

カスタムの減衰
LOD と Enlighten リアルタイムグローバルイルミネーション