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

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

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

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

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

レンダーパイプライン間での Enlighten を使ったリアルタイムグローバルイルミネーションのサポートについて詳しくは、レンダーパイプライン機能比較 を参照してください。

いつ 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 のチェックを外します。

Enlighten リアルタイムグローバルイルミネーションの詳しい使い方は、Unity チュートリアルの Precomputed Realtime GI を参照してください。

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

Enlighten Realtime Global Illumination does the following:

  1. Splits the scene into small surface patches (clusters).
  2. Determines the degree to which the patches are visible to each other.
  3. Groups patches visible to each other into systems.

At runtime, Enlighten Realtime Global Illumination uses this precomputed visibility information to approximate how Realtime Lights bounce in the Scene, saves the results in a set of lightmaps, and then uses these lightmaps to apply indirect lighting to the Scene. It is computationally intensive to update the lightmaps, and so the process is split across several frames. It takes Enlighten Realtime Global Illumination several frames to propagate changes to indirect lighting throughout the Scene.

ライトプローブと 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 時間を増減することができます。
カスタムの減衰
LOD と Enlighten リアルタイムグローバルイルミネーション