【Unity】ライティング(GI)を軽く触ってみた

# はじめに
Unityのライティングの勉強として、ライティング周りの機能を軽く触って記事にまとめてみました。

# 環境
Unity 5.6.1f1
Windows 10

# アジェンダ
1. ライティングをリッチな感じにする
2. 点光源を部屋の中に置いてみる
3. ライトプローブを試してみる

#1. ライティングをリッチな感じにする
左側のチープなライティングの部屋を右側のリッチな感じのライティングにしていきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/95122960-be95-0480-e938-f6c149bdcbce.png)

## Directional Lightは削除
Directional Lightは不要なので削除します。

## 6枚のPlaneで部屋をつくる
Planeを6枚組み合わせて立方体を作ります。
外からの光が差し込むように天井は少し横へずらしておきます。

<img height = 350 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/f6987913-6e60-b7c5-bc4d-decad48264e5.png">

## StaticチェックをONにする
6枚のPlaneのStaticのチェックボックスをすべてONにします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/9cddf081-77a7-b814-ae57-b47eada0d708.png)

<br>
ONにするとライトのベイクが始まります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/d9796428-45b5-1bae-68ba-909406079448.png)

<br>
少し待つとベイクが完了してリアルな感じのライティングになって**完成**です。
<img height = 350 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/920fa85f-be94-25d7-d676-cd01dc4a0698.png">

# 外からの光の差し込みを強くしてみる
Lightingタブの**Environment Lighting**の**Intensity Multipluer**を上げると外からの光の差し込みが強くなります

![2_lighting_edit.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/bf2bb270-697b-93a2-7683-38eaec3ded6a.gif)

# 反射光を弱くしてみる
Lightingタブの**Environment Reclections**の**Intensity Multipluer**を下げると反射光が弱くなります

![1_lighting_edit.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/2639be01-6e45-6266-da5f-8aadd0d3d999.gif)

#2. 点光源を部屋の中に置いてみる
以下のように部屋の中に点光源を置いてみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/60c987fe-2d0f-3102-7c67-7db0d1896fc1.png)

## 部屋の中に球を置く
Sphereを作成して部屋の中に配置します。

<img height = 300 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/521379a0-7e9e-4a19-7e63-350b34caf0a1.png">

<br>
Standardマテリアルを作成し、Emissionを以下のように設定して球にアタッチします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/3a8a737b-907f-792e-a62a-378e1d66f2a2.png)

<br>
球のstaticチェックを入れてライトをベイクすると以下のような見た目になります。

<img height = 350 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/4e8cb71a-5c3c-313f-7a18-429f15fdd70d.png">

<br>

部屋の真ん中に球を新しく作成して、天井を閉じて**完成**です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/d7b3ed9a-4963-c9a7-24c6-223d0e8ca028.png)

# 3. ライトプローブをさわる
## ライトプローブ？
通常、非staticなオブジェクトはライトマップを適用することができません。
**ライトプローブ**を利用するとライトマップを適用したときと似たような見た目を作り出すことができるそうです。

参考: https://docs.unity3d.com/jp/540/Manual/LightProbes.html

## ライトプローブを試してみる
### 準備
ライトプローブの挙動を見るための準備として、staticではないオブジェクトを部屋にいくつか配置します。

<img height = 350 src ="https://qiita-image-store.s3.amazonaws.com/0/44288/2f5c0f14-b583-d2cd-4e5c-20211f39373f.png">


### ライトプローブを配置する
Create -> Light -> LightProbe Groupを選択してライトプローブを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/c236e7ca-bc54-134c-36b8-192321b01e8a.png)

そしてライトプローブ(黄色の球体)を以下のように配置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/953cf81e-a8b0-c794-067c-22d0d1637390.png)

これで準備完了です。

## 環境光を変えたときキューブがどう変化するかを確認してみる
環境光の強さを変えながら非staticなオブジェクトの色味がどのように変化するかをみていきます。
Lightingタブの**Environment Lighting**の**Intensity Multipluer**を変えると環境光の強さが変化します。


### ライトプローブありの場合
<img height = 256 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/98614c70-592e-fbbd-989d-2195b78cb5cc.gif">

### ライトプローブなしの場合
<img height = 256 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/c4497024-9ac5-faac-8268-360eef5f6c96.gif">


### 両者の比較
**ライトプローブあり**の場合、明るいところのキューブは明るく、暗いところのキューブは暗くなっていることが分かります。

**ライトプローブなし**の場合は、部屋の明るさとは無関係に一様に色が変化しているが分かります。

### ライトプローブのまとめ
ライトプローブを配置していると、ライトマップを焼いたときと似たような色味を出すことができるということが確認できました。

# まとめ
・**static**なオブジェクトはライトマップの対象にできる
・非staticなオブジェクトは**ライトプローブ**を使うことで似たような効果を出せる
・ライティングの設定は**Lightingタブ**から変更できる。

# 追記: ライトプローブの配置を間違えると色がおかしくなる
ライトプローブの置き方がおかしいとライティングもおかしくなります。

## 正しい置き方
ライトプローブがすべて部屋の中に納まるように置いた場合、ライティングは正しくなります。
<img height = 300 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/c09e9315-92d6-7fd7-8873-90e756e6477a.png">

## 間違った置き方
ライトプローブの一部が**部屋の外**にはみ出てしまうとライティング結果がおかしくなります。
<img height = 300 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/24460611-b5b8-3c4c-f018-a0ee3bfbfdac.png">

影になって暗くなるはずのオブジェクトが逆に明るくなっています。

## 原因
ライトプローブのサンプリング結果が**明るく**なってしまったのが原因と考えられます。


## ライトプローブの原理
参考: https://docs.unity3d.com/ja/500/Manual/LightProbes.html

上記のURLによると、
ライトプローブを使ったライティングを行うとき、まずプローブの位置でライトの**サンプリング**が行われるそうです。

そしてライトのサンプリング値を使って**補間計算**をすることでオブジェクトのライティングを間接的に求めているそうです。

ライトプローブの一部を**部屋の外**に置いた場合、そこのプローブのサンプリング結果も**明るく**なってしまいます。
結果としてオブジェクトのライティングも明るくなってしまってこの現象が発生していると考えられます。