GI(Global Illumination) を無効化する

GI(Global Illumination) はUnity 5 から使えるようになったライティングの機能です。
光源からの光が物体に当たり、物体が反射する光がさらに周りの物体を照らす様子を再現するという機能です。
具体的に言うと、青い立方体に白い光を当てた時周りにある物体は白い光と青い立方体が反射した青い光が当たりうっすらと青くなるということが起きます。どれくらいの影響があるかは反射光の相対的な強さ次第なので、調整が必要です。
GI を使えば万能かというと違います。なぜならGI は現実の法則に則っていないからです。物理的な法則を計算するには計算しなければならないことが多すぎて現実的な時間では解けないのです。そのため、それらしい絵を作ることができるのがGI ということになります。

GI の説明をしたところでなんですが、今回はGI を無効化する話になります。Unity 5 ではデフォルトでGI が有効になります。シーンごとにこれは設定できるものです。GI 自体もそれなりに重い処理なので、あらかじめテクスチャに計算結果を書き込んでおきそれを実行時に使うということをして高速化を図っています。
そのテクスチャはシーン内の情報を書き込んだものなので、かなり大きなテクスチャになりがちです。シーンを多用したモバイル向けのアプリではこれを見過ごすことができないくらいの容量になっていくと思います。(私の場合だとシーンごとで1MB くらいとっていました)

アプリの大きさが大きくなるのは提出できなくなる恐れもあるので困ります。Google Play に提出するなら50MB が限度です。描画の質を下げたとしてもGIを切ることで容量制限を回避できるので、GIを切ろうということになります。以下がその手順です。


Menu からWindow->Lighting を選びます。

Lighting Window が開くので、ここのPrecomputed Realtime GI とBaked GI のチェックを外します。

これによりGIを実行しなくなり、ビルドした後のファイルにGI用のテクスチャが作られなくなります。GIは当然機能しなくなりますが、出来上がったファイルの容量は小さくなります。

AndroidやiOSではGIを切った方が容量的な問題を回避できるため、切っておいた方が良いと思います。GI用のファイルが作られる条件というのは、Lightmap Static なゲームオブジェクトがいる場合などになりますが、良くわからなければLighting Window から設定した方が簡単です。


GI を切ったときどのような見た目になるかを画像で比較してみます。

上の画像はGI (Light Probeの効果)がない場合、下の方はある場合です。
比べてみると、 下の方は薄らと全体的に青く見えるはずです。これは床の青色が反射によって他の物体を色づけているためです。GI がなくてもあまり問題はないと思います。写実的な絵を目指すのであれば、GI を使うというのは良いと思います。ただ効果は画面全体の印象を変えるものだということであり、ゲーム的に重要かというつそうでもないはずです。

グラフィックスの質を上げるためにやるべき優先度としては、

  1. リアルタイムの影を出す
  2. Skyboxを設定する
  3. リフレクションプローブを使う
  4. ライトプローブを使う
といった順にやっていくと良いと思います。4を行うにはGI を有効化しなくてはいけないので、モバイルでは現実的ではないでしょう。1のリアルタイムシャドウは非常に重いのですが、3Dゲームでこれを使わないと画面が写実的でなくなります。代替表現もありますが、結構面倒なので影をなくすという思い切った方法も悪くありません。