Version: 2022.1
言語: 日本語
カスタムの減衰
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 リアルタイムグローバルイルミネーションは、シーンを小さなサーフェスパッチに分割し、これらのパッチがお互いにどの程度見えるかを決定します。ランタイムに、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 リアルタイムグローバルイルミネーション