ライティングウィンドウ
ライトプローブ

事前計算されたライティングの利用

Unity では、ライティングの事前計算を自動または手動のどちらかで開始して、バックグラウンドで計算を続ける事ができます。どちらの場合でも、シーンの裏でプロセスを走らせたまま、エディター上での作業を続ける事ができます。

事前計算している間は、青色のプログレスバーがエディターの右下に表示されます。ベイク GI か、事前計算によるリアルタイム GI か、どちらを有効にしているかによって、完了するまでに必要な段階が異なります。現在の進行状況はプログレスバーの上に表示されています。

Unity による事前計算の現在の進行状況を示すプログレスバー

上の例では、現在、全部で 11 ある事前計算処理の 5 番目の「Clustering」(クラスタリング) という処理中で、それが完了して次の処理に移る前に 6 つのジョブが残っていることがわかります。以下はさまざまな処理段階です。

Precomputed Realtime GI

  1. Create Geometry (ジオメトリの作成)
  2. Layout Systems (システムのレイアウト)\t\t\t\t
  3. Create Baked Systems (ベイクしたシステムの作成) スプライトアトラス: {0}
  4. Clustering (クラスタリング)
  5. Bake Visibility (Visibility のベイク)
  6. Light Transport (ライトトランスポート)\t\t\t
  7. Tetrahedralize Probes (プローブの四面体分割)\t
  8. Create ProbeSet (プローブセットの作成)\t\t\t

Probes (プローブ)

アンビエントプローブ 2. Baked/Realtime Ref. Probes (ベイクした/リアルタイムのリフレクションプローブ)\t

Baked GI (ベイク GI)

  1. Create Geometry (ジオメトリの作成)
  2. Atlassing (アトラス化)
  3. Create Baked Systems (ベイクしたシステムの作成)
  4. Baked Resources (ベイクしたリソース)
  5. Bake AO (AO をベイク)
  6. Export Baked Texture (ベイクしたテクスチャをエクスポート)
  7. Bake Visibility (Visibility のベイク)
  8. Bake Direct (Direct のベイク)
  9. Ambient and Emissive (アンビエントと Emissive)
  10. Create Bake Systems (ベイクシステムの作成)
  11. Bake Runtime (Runtime のベイク)
  12. Upsampling Visibility (Visibility のアップサンプリング)
  13. Bake Indirect (Indirect のベイク)
  14. Final Gather
  15. Bake ProbesSet (プローブセットのベイク)
  16. コンポジット

事前計算の開始

Unity のライティング事前計算では、静的なジオメトリしか考慮しません。ライティングの事前計算を始めるためには、シーン内にあるゲームオブジェクトの少なくとも 1 つを「static」にする必要があります。設定はヒエラルキーウィンドウ上でオブジェクト個別に行うか、シフト選択で複数のゲームオブジェクトを選択して、まとめて設定することができます。

Static チェックボックスを、インスペクターウィンドウで選びます (Inspector > Static)。こうすることによりすべてのゲームオブジェクトを static に設定します。これにより、不要に、ナビゲーションやバッチを静的にしてしまう場合もあります。事前計算によるリアルタイム GI には、‘Lightmap Static’ を有効にすることのみが必要です。

さらに細かい制御が必要な場合は、インスペクターウィンドウの Static チェックボックスの右側にあるドロップダウンリストによって、個々の static オプションを設定できます。また、オブジェクトもライティングウィンドウの Object エリアで Static に設定できます。

シーンが Auto (Lighting > Scene > Auto) に設定されている場合は、Unity のライティングの事前計算は現在、自動的に開始するようになっています。そうでない場合は、以下に説明するように手動で開始する必要があります。

自動/手動の事前計算

Unity のライティングウィンドウの下の方にある Auto がチェックされている場合 (Lighting > Scene > Auto)、シーンの静的ジオメトリに変更があると、事前計算はバックグラウンド処理として自動的に始まります。

ただし、Auto が選択されていない場合は、その横の Build ボタンをクリックして手動で事前計算を開始する必要があります。この方法は、ほとんど自動と同じように事前計算を開始できますが、いつ事前計算を開始するタイミングを制御できます。

手動で事前計算を始めるとシーンライティングのすべてが評価され、再計算される原因となります。選択したリフレクションプローブのみを再計算したい場合は、Build ボタンの隣のドロップダウンメニューで Bake Reflection Probes を選択します。

ベイク GI または、事前計算によるリアルタイム GI を有効にする

デフォルトで、Precomputed Realtime GI (事前計算されたリアルタイム GI) と Baked GI (ベイク GI) は Unity の Lighting ウィンドウ (Lighting > Scene) で有効にされています。両方が有効のとき、どのテクニックが使用されるかはそれぞれのライトで制御されます (Inspector > Light > Baking)。

Baked GI (ベイク GI) と Precomputed Realtime GI (事前計算されたリアルタイム GI) をシーンでいっしょに使用することは、パフォーマンスにとって有害です。効率のよい使用法は、他の GI をグローバルで無効にして、同時に複数のシステムを使わないようにします。そうするには、Lighting ウィンドウ ( Lighting > Scene ) の Precomputed Realtime GI か Baked GI の横のボックスのチェックを外します。すると、チェックしたオプションのみがシーンに表われ、ライトごとの設定はすべてオーバーライドされます。

ライトごとの設定

各ライトのデフォルトの Baking モードは「Realtime」(リアルタイム) です。つまり、選択されたライトは、Unity の事前計算によるリアルタイム GI システムで処理される関節ライトをもちながら、シーンに直接照明も与えます。

ただし、Baking モードが「Baked」に設定されている場合は、そのライトは Unity のベイクした GI システムにしか利用できません。選択したライトの直接と間接の両方のライトがライトマップに「ベイク」され、ゲームの間は変更できません。

ライトごとの Baking モードを「Realtime」に設定して ModePoint ライトをベイク

Baking モード「Mixed」を選ぶと、Static とマークされているゲームオブジェクトはベイクした GI ライトマップにもこのライトを含みます。ただし、「Baked」に選択したライトと異なり、 Mixed ライトは、シーン内の静的でないゲームオブジェクトにリアルタイムの直接光も供給します。これは、静的な環境ではライトマップを使用する一方、この同じライトをキャラクターに使って、リアルタイムの影をライトマップしたジオメトリに落としたい場合に有用です。

GI キャッシュ

ベイク GI や事前計算によるリアルタイム GI いずれかで、Unity はシーンのライティングに関するデータを 「GI Cache」に「キャッシュ」(保存) します。そして、事前計算の時に時間を節約するために、可能な限りこのデータを再利用しようとします。変更したものの数量と性質によって、可能な場合どれだけのデータが再利用されるのかが決まります。

このキャッシュは Unity プロジェクトの外側に保存され、Preference > GI Cache > Clear Cache でクリアされます。クリアするということはつまり、事前計算はすべての段階で最初から再計算が必要になり、したがって、時間がかかるということです。ただし、ある場合では、たぶんディスクの使用を軽減するためには、これは役に立つ場合があります。

ベイクした GI の LOD

Unity がベイクしたライトマップを生成するとき、Level-of-detail (LOD) を考慮する必要があります。直接照明はすべての LOD の実際の表面を使用して計算されます。LOD の値が低いと、間接光をフェッチするためにライトプローブを使用します。その結果のライトはライトマップにベイクされます。

つまり、間接照明をキャプチャするためには、ライトプローブを LOD の周辺に置かなくてはならない、という事です。完全にベイクした GI を使用する場合は、オブジェクトが実行時にライトプローブを使用する事はありません。

ライティングウィンドウ
ライトプローブ