Version: 2017.3
グローバルイルミネーション
ベイクしたアンビエントオクルージョン

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

Unity では、事前計算によるライティングは自動処理として、または、手動で開始して、バックグラウンドで計算されます。いずれの場合も、これらのプロセスがバックグラウンドで実行されている間、エディターで作業を続けることが可能です。

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

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

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

Precomputed Realtime GI

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

Probes (プローブ)

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

ベイクした 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. Compositing (コンポジット)

事前計算の開始

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

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

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

シーンを Auto Generate ( Window > Lighting > Settings > Scene > Auto Generate) に設定すると、Unity のライティングの事前計算が自動的に始まります。そして、シーンの静的なジオメトリが変更されると、事前計算は自動更新されます。Auto Generate を有効にできない場合は、ライティングの事前計算を手動で開始する必要があります。

自動/手動の事前計算

Unity の Lighting ウインドウ (Window > Lighting > Settings > Scene) の一番下にある Auto Generate を選択すると、シーンの静的ジオメトリが変更されるたびに、この事前計算がバックグラウンド処理として自動的に開始します。

ただし、Auto Generate を有効にしていない場合は、その横にある Build ボタンをクリックして、ライティングの事前計算処理を手動で開始する必要があります。こうすることにより、事前計算を同じように開始し、処理を開始する時間を制御することができます。

Auto Generate __ はより小さめの複雑でないシーンで作業する場合に便利です。なぜなら、Auto Generate __ はシーンの静的なゲームオブジェクトを移動または編集している間に、素早く正確なライティングの結果を生成するからです。ただし、大きな、または、複雑なシーンで作業する場合は、手動オプションに切り替える方がよい場合があります。そうすることにより、シーンを変更するたびにコンピューターの CPU 使用率が高くなったり、ライティングの事前計算が繰り返し開始されることを避けることができます。

事前計算を手動で開始すると、シーンライティングのすべての面が評価され計算されます。リフレクションプローブ のみを再計算してベイクするには、Generate Lighting __ ボタン (Window__ > Lighting > Settings > Scene > Generate Lighting) のドロップダウンメニューをクリックし、Bake Reflection Probes を選択します。

Auto Generate を使用すると、Unity はライティングデータを限られたサイズの一時的なキャッシュに保存します。つまり、キャッシュのサイズを超えると、Unity は古いライティングデータを削除します。シーンの中に、削除された自動生成のライティングデータに依存しているものがあると、プロジェクトをビルドするときに問題が発生することがあります。この場合、ビルドされたプロジェクトのシーンでライティングが正しくない場合があります。したがって、ゲームをビルドする前に、 Auto Generate のチェックを外し、すべてのシーンのライティングデータを手動で生成します。すると、Unity は、ライティングデータをアセットファイルとして Project フォルダーに保存します。つまり、プロジェクトの一部として保存し、ビルドに加えます。

Baked GI か Realtime GI を有効にする

Unity はデフォルトで Baked GIRealtime GI の両方を有効にします。Baked GI はすべて事前計算されています。Realtime GI は、間接照明を使用する場合に事前計算を実行します。両方を有効にすると、シーンの個々のライトでどちらの GI システムを使用するかを制御します (これを行うには、ライトコンポーネントで Mode 設定を使用します)。詳細は、Lighting ウインドウグローバルイルミネーション に関するドキュメントを参照してください。

ライティングシステムを使用する最も柔軟な方法は、Baked GIRealtime GI を一緒に使用することです。ただし、これは最もパフォーマンス負荷の高いオプションでもあります。ゲームのリソース負荷をより軽くするために、Baked GI か __Realtime GI__を無効にすることができます。これにより、ライティングシステムの柔軟性と機能性は低下します。

グローバルイルミネーションを手動で有効または無効にするには、Lighting ウィンドウ (Window > Lighting > Settings > Scene) を開きます。Realtime GI を有効にするには Realtime Global Illumination をチェックし、Baked GI を有効にするには Baked Global Illumination をチェックします。これらのチェックを外すと、それぞれの GI システムは無効になります。ライトが無効にしたモードに設定されている場合はオーバーライドされ、アクティブな GI システムに設定されます。

ライトごとの設定

各ライトのプロパティーを設定するには、シーンまたは Hierarchy ウィンドウでそれを選択し、インスペクターウィンドウの Light コンポーネント の設定を編集します。

各ライトのデフォルトの ModeDynamic です。つまり、ライトはシーンに直接ライティングを与え、Unity の Realtime GI が間接ライティングを処理します。

Light の ModeStatic に設定すると、そのライトは Unity の Baked GI システムにのみライティングを与えます。ライトからの直接ライティングと間接ライティングの両方がライトマップにベイクされ、ゲーム中に変更することはできません。

Light の ModeStationary に設定すると、Static とマークされたゲームオブジェクトは、このライトを__Baked GI__ ライトマップに加えます。ただし、 Static としてマークされたライトとは異なり、Stationary のライトは、Lighting ウィンドウ (Window > Lighting > Settings) の静止のベイクモードに基づいて、リアルタイムライティングに貢献します。これは、静的環境でライトマップを使用するとき、動的なライティングとライトマップの静的ジオメトリをうまく統合したい場合に便利です。

Mode を Dynamic に設定したディレクショナルライト
ModeDynamic に設定したディレクショナルライト

詳細については、ライティングモード に関するドキュメントを参照してください。

GI キャッシュ

Baked GI または Precomputed Realtime GI のいずれかで、Unity はシーンライティングに関するデータを GI Cache にキャッシュ (保存) し、可能な限りこのデータを再利用して事前計算中に時間を節約しようとします。シーンに加えた変更の数と性質によって、このデータをどれだけ再利用できるかどうかが決まります。

このキャッシュは Unity プロジェクトの外に保存され、Preference > GI Cache > Clear Cache で削除できます。これを削除すると、事前計算のすべての段階を最初から再計算する必要があるため時間がかかります。ただし、ある場合、おそらくディスク使用量を減らす必要がある場合などでは、これが役に立ちます。

ベイクした GI の LOD

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

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


  • 2017–06–08 限られた 編集レビュー でパブリッシュされたページ

  • Light Modes、 5.6に追加

グローバルイルミネーション
ベイクしたアンビエントオクルージョン