グローバルイルミネーション(GI)は光源から直接表面に当たる光(直接光)だけでなく、面から他の面へ、光がどのように照り返すか(間接光)をモデルにしたシステムです。間接光のモデリングでは、オブジェクトが互いの外観に影響を与えるので、仮想世界をよりリアルに、連続性・一貫性があるように見せる効果を与えます。1つの古典的な例は色のにじみで、例えば赤いソファに当たった太陽光は、その背後にある壁に、赤い光をはね返します。他の例としては、太陽光が洞窟の開口部の床面に当たって内部ではね返り、洞窟内のパーツも明るくなるような場合があります。
シーンビューのグローバルイルミネーション。間接光の繊細な効果に注目してください。
伝統的に、間接照明の計算が非常に遅く、CG アニメ映画のような非リアルタイムのもので使われるだけだった頃は、テレビゲームやその他のリアルタイムグラフィックスアプリケーションでは直接照明の利用だけに限られていました。ゲームにおいて、この制限を回避する方法は、事前に動き回らない事が判っている(つまり静的な)物体と面のみに、間接光を計算することです。この方法で遅い計算を事前に済ませておく事ができ、実行ときこの方法で事前計算された間接光は、オブジェクトが動くまでは正しい状態を保ちます。Unity はこの “the bake” - 間接光を事前に計算し、保存するプロセス(=baked) - にちなんで命名された、Baked GI と呼ばれる( Baked Lightmaps としても知られる)技術をサポートしています。Baked GI は、間接光だけでなく、通常はリアルタイム技法で実現する、エリアライトと間接光からのよりリアルなソフトシャドウ生成でも、その膨大な計算時間について優位性があります。
さらに、Unity 5.0では、事前計算リアルタイム GI と呼ばれる新しい技術をサポートしています。これは上記のベイクと同様、未だ事前計算のフェーズを必要とし、静的オブジェクトに限られています。ですが、これはシーンの中でどのように光が反射しているかをビルド時に事前計算するのではなく、考えられる光の反射を全て事前に計算し、実行時に使用するためにこの情報をコード化します。そのため、基本的には全ての静的なオブジェクトに対し「このサーフェイスに何か光が当たった場合、どこに向かって反射するのか?」という問いに答えます。それから Unity は、後で利用するために、どの経路で光が伝わっていくか、という情報を保存します。実行時に、これらの事前計算された光の伝搬経路に向けて実際に光を放つことで、最終的なライティングが行われます。
これは、光源の数とタイプ、位置や方向、その他プロパティは全て変更する事が可能で、その変更に応じて間接光も更新されるという事です。同様に、カラー、光の吸収量や発光量などオブジェクトのマテリアルプロパティを変更する事も可能です。
事前計算リアルタイム GI が計算の結果ソフトシャドウになる場合、シーンがとても小さいのでなければ、一般的には、 Baked GI で実現する陰よりも粒度が粗くなるでしょう。また、事前計算リアルタイム GI が実行時に行う最終的なライティング計算は、何フレームかにわたって反復して行われるので、ライティングに大きな変更が行われた場合には、完全に計算を終えるために、より多くのフレームが必要です。また、これはリアルタイムアプリケーションでは十分高速ですが、ターゲットプラットフォームで使えるリソースが非常に限られている場合は、実行時により良いパフォーマンスを得るために Baked GI を使用した方がよいかもしれません。
Baked GI および事前計算リアルタイム GI には、どちらも静的オブジェクトしかベイク/事前計算に含めることができないという制限があります。そのため、動的なオブジェクトは他のオブジェクトへ光をバウンスできません。また、その逆もできません。ですが、ライトプローブ を使用すれば、動的なオブジェクトも静的なオブジェクトからのバウンスを受けることができます。ライトプローブは、ベイク/事前計算中に光が測定された(プローブされた)シーン内の座標で、静的でないオブジェクトに当たる間接光は、その時オブジェクトに最も近いプローブの値を用いて、実行時に近似されます。例えば、白い壁の横に転がってきた赤いボールは、壁面にその赤色を投射しませんが、赤い壁の横に白いボールがある場合、ライトプローブを使う事によって、壁の赤色をボールに投射することができます。
空を横断する太陽の効果をシミュレートするために、平行光源の方向と色を変更してみます。平行光源とあわせて、スカイボックスを調整することにより、時間が刻々と変わっていくリアルな効果を作成できます(実際は、新しく搭載されたプロシージャルなスカイボックスを使うと、簡単に実現できます)。
日が進み、窓を通って中に差し込む日光は床を横切ります。この光は部屋の中を、そして天井に現実的に跳ねます。日光が赤いソファーに達するとき、赤い光はそれの背後に壁に跳ねます。 ソファの色を赤から緑に変更すると、それの背後にある壁に色移りが赤から緑に変わって発生します。
ネオンサインのマテリアルの発光をアニメーション化します。それがオンになっているときには、その周囲が光り始めます。
以下のセクションでは、この機能の使い方について詳しく説明します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.