「ライトのベイク処理」は、レベル内のオブジェクトのライティングを再計算して、ディスクのテクスチャに保存するプロセスです。 これらのテクスチャは、「ライトマップ」といいます。ゲームはランタイムでライトマップをロードして、事前に計算されたイルミネーションをレベル内のオブジェクトに適用します。ゲームのフレームごとに実際のライティングをリアルタイムで計算する必要はありません。
シーンのライティングをベイク処理する理由として適切なものを、次にいくつか示します。
毎年新しいリアルタイム レンダリング アルゴリズムや、さらに強力な GPU が登場しますが、ライトの事前計算によって得られる微妙なライティング エフェクトを、リアルタイム レンダリングでは生成することができません。たとえば、ライティングをベイク処理することによってレベルに導入できるライティング エフェクトには次のようなものがあります。
シーン内のオブジェクトを照らすライトの一部または全体を事前計算することによって、ゲームが各フレーム内で実行する必要がある作業量が減ります。シーン内のライトを動的に処理する代わりに、すべてのゲームで各オブジェクトに追加のテクスチャを適用する必要がありますが、これによって処理能力に与える負担は比較的小さくなります。この方法を使用すると、デバイスの GPU および CPU のサイクルが解放されて、他の作業を実行できるようになります。
複数の異なる種類のデバイスに対応するゲームを開発する場合は、異なる機能、能力、およびリソースを持つ複数の GPU を利用します。そのため、デバイスごとに異なるように見える結果が生成されることがあります。また、特定のデバイスでは適切に機能するリアルタイム ライティングの設定が、別のデバイスではリソースに過剰な負担がかかる原因となることがあります。
ライティングを事前に計算すると、すべてのプラットフォームで考え得る最高の結果を使用することができ、パフォーマンスのレベルを予測できるようになります。
上記に示すすべてのメリットを考慮して、常にライティングをベイク処理するようにしてください。ただし、次に示すいくつかのトレードオフがあります。ゲームのニーズに応じて、これらのトレードオフが許容できるかどうかを判別する必要があります。
テクスチャはランタイムで大量のメモリを使用します。ライトマップをベイク処理すると、ゲームにロードする必要があるテクスチャが追加されるため、ゲームのメモリ フットプリントが大幅に増加します。
この問題を回避するには、複数のプラットフォームに対してライトマップのメモリ サイズを選択的に減らします。また、テクスチャを圧縮して、最大ミップ マップのステップを破棄することができます。詳細については、「メモリ使用量を最適化する」および「テクスチャを使用する」を参照してください。
リアルなグローバル イルミネーションの事前計算には時間がかかります。大規模なシーンで極めて高い品質の結果を得るには、非常に長い時間がかかることがあります。最終ベイク処理を実行するたびに、数時間、あるいは数日間かかることがあります。レベルの設計および制作ワークフローにこの追加時間を取り入れる必要があります。
組み込みの GPU アクセラレーション Stingray ライト ベイカーは複数のパスを反復することによって最終結果に収束させるため、実行するたびにレンダリング品質は上がります。これにより、暫定的な結果を短時間で得ることが可能になるため、ベイク処理が必要となる回数を減らすことができます。 「Bake lightmaps」を参照してください。
ライトマップは事前に計算されるため、静的オブジェクトを照らす静的ライトに対してのみ効果があります。ただし、ゲームには通常、シーン内を移動する動的な要素があります。
本と書類が置かれている机を照らすようにランプが設定されたシーンで、ライティングをベイク処理するとします。オブジェクトのライトマップ テクスチャは明るく照らされます。机のライトマップ テクスチャにはランプからの明るいライトが当たり、本と書類によるシャドウが生じます。ゲーム中にこのランプが移動した場合、机とオブジェクトには、ランプが元の場所に存続する場合と同様に、同じ場所に同じライトが当たります。逆に、本や書類が移動した場合は、引き続きライトで照らされるように表示され、机上の元々あった場所にシャドウが生じます。
これを処理する一般的な方法は、間接光のみをベイク処理し、比較的静的なオブジェクトとライトのみを対象とすることです。すべてのオブジェクトの直接照明は、一般にリアル タイムで処理されます。このようにして、移動するオブジェクトは動的なシャドウを受け取り、ベイク処理されたグローバル ライティングからの間接照明を使用します。ただし、静止しているオブジェクトは、より高品質のライトマップから間接光を取得します。