# 2D tilemap 光影效果 approach
簡單的說就是要下面這個效果

### 背景知識
2D 環境中想要用渲染的方式進行光影效果的設定
一般的做法就是安裝 `Universal RP` (前身是 `light-weight RP`)
基本步驟大概是
1. 安裝 plugin
2. 設定 project setting 中的渲染設置 (2個地方要改)
3. Covert 原本的個物件上的 material
4. 設定光源
* 設定 global 光線
* 設定 額外需要的光源
* 額外設定 shadow 等
可以參考下面這片的做法,你就可以完成背景設定
https://www.youtube.com/watch?v=nkgGyO9VG54
但是... tilemap 還是沒辦法用啊 XD
**self shadow 定義**
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/2DShadows.html
### 實際狀況
目前找到最完整的 solution 還是要花錢錢
https://medium.com/@pjlegendre/dynamic-2d-lighting-in-2d-unity-games-ac5350f27b47
https://assetstore.unity.com/packages/tools/particles-effects/smart-lighting-2d-112535
但我認為花錢錢也不知道底層作法、
所以我還是繼續在網路上搜尋有沒有合適的做法
最後我採取了這個作法
https://www.youtube.com/watch?v=0F8boyFinOk
他是很暴力的寫了一個 Editor 讓你可以用 Composite Collider 把 Tilemap 裡面的元件拆成複數個 Shadow Caster 2D
看起來是挺簡單美好的、但是我實作之後發現會有很多 bug 的現象
#### 問題1
像是轉角應該要可以閉鎖的

但有時候會這樣

確認成因是因為 Generator 無法支援閉鎖的 Tilemap
這樣的圖形會出問題的原因是因為

會被拆成下面三種牆面、而實際上應該要有一個牆面是回字形
而不是三個牆



在外圈去掉任何一角都可以解除閉鎖抓到下面這樣正常的牆面

#### 問題2
在奇數格原本應該要像這樣的光

在靠近牆面到一定距離的時候會出現奇怪的三角陰影

也是這個原因讓我原本到處都是單格牆面的地方看起來完全爛掉不能用
做了幾個實驗之後猜測是浮點數造成的計算問題
因為讓光源座標偏移 一點點 這問題就會消失,所以我先用這個方法鴕鳥心態了一下

update:
這個發現跟奇數偶數無關
只要光源跟一片直線牆的邊緣或正中心完全對齊就會出現這個狀況
我目前認為這是 shadow caster 底層就有寫壞的問題
如果是都正常的運算的話,切上緣跟切下緣至少要對稱啊 XD
感覺就是因為切正邊緣所以判定當作沒有反射的鍋,
就算用offset把邊緣處理掉其實在物件移動過程運氣不好的話
還是會露出一兩幀出現這個影子



* 另一個 我沒有嘗試的 repo
* https://github.com/BrianCraig/Tilemap-Shadow-Caster
#### 其他過程中發現的毛
* Bug - 2D shadow caster 2022/4 月的 bug
* https://forum.unity.com/threads/2d-shadow-caster-not-working-correctly.1268912/
### 結論
目前商業作品也是去買
https://assetstore.unity.com/packages/tools/particles-effects/smart-lighting-2d-112535
目前的免費解就是沒有正確的柔光、也會有效能問題 (如果牆面沒有接在一起的話),但...暫時我會先用免費解啦。
以目前只是要做原型的角度來看夠用了
### 其他種類的 View 光影效果相關影片
2D 部件部分上色 in RDP
https://www.youtube.com/watch?v=WiDVoj5VQ4c
Shader Graph
https://www.youtube.com/watch?v=5dzGj9k8Qy8
https://www.youtube.com/watch?v=xpL44Ztyy1Q