Light のトラブルシューティングとパフォーマンス
ライティングウィンドウ

グローバルイルミネーション

グローバルイルミネーション(GI)は光源から直接表面に当たる光(直接光)だけでなく、面から他の面へ、光がどのように照り返すか(間接光)をモデルにしたシステムです。間接光のモデリングでは、オブジェクトが互いの外観に影響を与えるので、仮想世界をよりリアルに、連続性・一貫性があるように見せる効果を与えます。1つの古典的な例は‘ color bleeding (色にじみ)’で、例えば赤いソファに当たった太陽光は、その背後にある壁に、赤い光をはね返します。他の例としては、太陽光が洞窟の開口部の床面に当たって内部ではね返り、洞窟内のパーツも明るくなるような場合があります。

シーンビューの GI。白い球の表面に色移りした赤と青色の精微な効果に注目してください。
シーンビューの GI。白い球の表面に“色移り”した赤と青色の精微な効果に注目してください。

GI のコンセプト

伝統的に、間接照明の計算が非常に遅く、CG アニメ映画のような非リアルタイムのもので使われるだけだった頃は、テレビゲームやその他のリアルタイムグラフィックスアプリケーションでは直接照明の利用だけに限られていました。ゲームにおいて、この制限を回避する方法は、事前に動き回らない事が判っている( static な)物体と面のみに、間接光を計算することです。この方法で遅い計算を事前に済ませておく事ができ、実行ときこの方法で事前計算された間接光は、オブジェクトが動くまでは正しい状態を保ちます。Unity はこの “the bake” - 間接光を事前に計算し、保存するプロセス(=baked) - にちなんで命名された、Baked GI と呼ばれる( Baked Lightmaps としても知られる)技術をサポートしています。Baked GI は、間接光だけでなく、通常はリアルタイム技法で実現する、エリアライトと間接光からのよりリアルなソフトシャドウ生成でも、その膨大な計算時間について優位性があります。

さらに、Unity 5.0では、事前計算リアルタイム GI と呼ばれる新しい技術をサポートしています。これは上記のベイクと同様、未だ事前計算のフェーズを必要とし、静的オブジェクトに限られています。ですが、これはシーンの中でどのように光が反射しているかをビルド時に事前計算するのではなく、考えられる光の反射を全て事前に計算し、実行時に使用するためにこの情報をコード化します。そのため、基本的には全ての静的なオブジェクトに対し「このサーフェイスに何か光が当たった場合、どこに向かって反射するのか?」という問いに答えます。それから Unity は、後で利用するために、どの経路で光が伝わっていくか、という情報を保存します。実行時に、これらの事前計算された光の伝搬経路に向けて実際に光を放つことで、最終的なライティングが行われます。

これは、光源の数とタイプ、位置や方向、その他プロパティは全て変更する事が可能で、その変更に応じて間接光も更新されるという事です。同様に、カラー、光の吸収量や発光量などオブジェクトのマテリアルプロパティを変更する事も可能です。

事前計算リアルタイム GI が計算の結果ソフトシャドウになる場合、シーンがとても小さいのでなければ、一般的には、 Baked GI で実現する陰よりも粒度が粗くなるでしょう。また、事前計算リアルタイム GI が実行時に行う最終的なライティング計算は、何フレームかにわたって反復して行われるので、ライティングに大きな変更が行われた場合には、完全に計算を終えるために、より多くのフレームが必要です。また、これはリアルタイムアプリケーションでは十分高速ですが、ターゲットプラットフォームで使えるリソースが非常に限られている場合は、実行時により良いパフォーマンスを得るために Baked GI を使用した方がよいかもしれません。

GI の制限事項

Baked GI および事前計算リアルタイム GI には、どちらも静的オブジェクトしかベイク/事前計算に含めることができないという制限があります。そのため、動的なオブジェクトは他のオブジェクトへ光をバウンスできません。また、その逆もできません。ですが、ライトプローブ を使用すれば、動的なオブジェクトも静的なオブジェクトからのバウンスを受けることができます。ライトプローブは、ベイク/事前計算中に光が測定された(プローブされた)シーン内の座標で、静的でないオブジェクトに当たる間接光は、その時オブジェクトに最も近いプローブの値を用いて、実行時に近似されます。例えば、白い壁の横に転がってきた赤いボールは、壁面にその赤色を投射しませんが、赤い壁の横に白いボールがある場合、ライトプローブを使う事によって、壁の赤色をボールに投射することができます。

GI エフェクトの例

  • 空を横断する太陽の効果をシミュレートするために、平行光源の方向と色を変更してみます。平行光源とあわせて、スカイボックスを調整することにより、時間が刻々と変わっていくリアルな効果を作成できます(実際は、新しく搭載されたプロシージャルなスカイボックスを使うと、簡単に実現できます)。

  • 日が進み、窓を通って中に差し込む日光は床を横切ります。この光は部屋の中を、そして天井に現実的に跳ねます。日光が赤いソファーに達するとき、赤い光はそれの背後に壁に跳ねます。 ソファの色を赤から緑に変更すると、それの背後にある壁に色移りが赤から緑に替わって発生します。

  • ネオンサインのマテリアルの発光をアニメーション化します。それがオンになっているときには、その周囲が光り始めます。

Light のトラブルシューティングとパフォーマンス
ライティングウィンドウ