ShaderTips

シェーダーTips

主にUnityシェーダーについての記事を書いています。

Unity GI(大域照明)ライティング

GI(大域照明)ライティングとは

負荷が大きい間接光[1]の計算をビルド前に済ませておき、ゲーム実行時にはその計算結果を使う手法。

 

ライトマップ 

計算結果を保存するテクスチャ

 

ベイク

間接光などの計算結果をライトマップに書き込む行為

 

 [1]間接光とは壁や天井といった他の物体からの反射を経て入射する光のこと。逆に光源から直接照射される光を直接光とよぶ。

 

UnityではGIの方式としてBakedGIとRealTimeGIが採用されている。

 

BakedGI

ビルド前にライトマップをベイクし、ゲーム実行時にそのライトマップの情報を元に描画を行う。

良い点

ゲームの実行時にはライトマップをサンプリングすることで間接光のカラー値を極めて高速に取得することができる

実行時に多くの計算を省略出来るので、広大な空間全体にライトの効果が及び、そこにあるオブジェクトによって複雑な影を投影し得るシーンにおいて特に有効。

悪い点

一度ベイクされたライトマップは更新されないため、Baked GIではゲームの実行中にライトの情報を変更することはできない。

商業ゲーム規模になると、1シーンのベイクに数時間~数十時間かかることもある。

 

RealTimeGI

リアルタイムライトマップと呼ばれる別のテクスチャマップにベイクされる。

特徴的なのはゲーム実行時にも、限定的ながら更新されること。

良い点

光源の変化に対応できる。

悪い点

間接光の演算には時間が掛かるため、フレームを跨いで一つの演算を行う。

その為、光源の瞬時の変化などには対応できない。

※RealTimeGIはデフォルトでONになっているので使わないのであればOFFにすれば処理負荷軽減に繋がる。

 

今回はここまで。

GIライティングについてはまた詳しく書きます。