Unity はリアルタイム GI (グローバルイルミネーション) に Enlighten と呼ばれるミドルウェアを使用します。
デフォルトでは、リアルタイムライト はシーンへ直接ライティングしか与えません。シーンで リアルタイムグローバルイルミネーション を有効にすると、リアルタイムライトもシーンに間接ライティングを行います。
リアルタイム GI は、ゆっくりと変化し、シーンに大きな視覚的影響を与えるライト (空を横切る太陽の光や、閉じた廊下でゆっくりと脈打つライトなど) に役立ちます。リアルタイム GI は、パフォーマンスのコストと待ち時間がかかるため、急速に変化するライトや特殊効果を目的とするものではありません。
リアルタイム GI は、中間レベルからハイエンドの PC システムやコンソールをターゲットとしたゲームに適しています。一部のハイエンドモバイルデバイスでも十分この機能に適応するものもありますが、シーンを小さく、リアルタイムライトマップの解像度を低く保ち、システムリソースを節約する必要があります。
シーンでリアルタイム GI を使用するには、Lighting window を開き (Window > Rendering > Lighting Settings)、Realtime Global Illumination を有効にします。
特定のライトで リアルタイム GI の効果を無効にするには Light ゲームオブジェクトを選択し、Light コンポーネントで Indirect Multiplier を 0 に設定します。つまり、ライトがシーンへ間接ライティングを行わないということです。
リアルタイム GI をまとめて無効にするには、Lighting ウィンドウを開き (Window > Rendering > Lighting Settings)、Realtime Global Illumination のチェックを外します。
リアルタイム GI の使用に関する詳しい手順は、Unity チュートリアルの Precomputed Realtime GI を参照してください。
Unity エディターでは、Enlighten はシーンを小さなサーフェスパッチに分割し、これらのパッチが互いに見える度合いを決定します。ランタイムに、Enlighten はこの事前計算された可視性情報を使用して、シーン内でリアルタイムライトがどのように反射するかを概算し、結果を一群のライトマップに保存し、これらのライトマップを使用してシーンに間接ライティングを適用します。
ライトマップの更新は計算負荷が高いため、処理は複数のフレームに分割されます。言い換えると、Enlighten がシーンを通して間接ライティングに変更を伝播するには、2–3 フレームかかります。
リアルタイム GI を有効にすると、ライトプローブ の動作が異なることに注意してください。
シーンでリアルタイム GI を有効にすると、ライトプローブはランタイムにライティングを繰り返しサンプリングします。つまり、シーンライティングのランタイムの変更に対応します。
シーンでリアルタイム GI を無効にすると、ライトプローブはベイクしたライティングデータのみを使用します。つまり、シーンライティングのランタイムの変更に対応しません。
また、ライトが影を作る場合、Unity はシーン内の動的ゲームオブジェクトと静的ゲームオブジェクトの両方をライトの シャドウマップ にレンダリングします。静的ゲームオブジェクトと動的ゲームオブジェクトの両方の マテリアルシェーダー はこのシャドウマップをサンプリングし、リアルタイムのシャドウを互いに投影します。Shadow Distance (Edit > Project Settings の順に選択し、Quality カテゴリを選択し、Shadows セクションに移動) は、シャドウがフェードアウトして完全に消える最大距離を制御し、パフォーマンスと画質に影響します。
リアルタイム GI でもソフトシャドウが生成されますが、シーンが非常に小さい場合を除いて、通常、ライトマッピングで得られるよりも粗い粒子になります。
Enlighten は追加の一群のライトマップを使用してリアルタイムの間接の反射を格納するため、リアルタイム GI はメモリ要件を増加させる可能性があります。
Enlighten は追加の一群のライトマップとプローブをサンプリングするため、リアルタイム GI はシェーダー計算を増加させます。
リアルタイム GI がシーンのライティングの変化にすばやく反応しない場合は、この問題に対処する方法がいくつかあります。