[Unity] 2D tilemap 光影效果 approach
簡單的說就是要下面這個效果
背景知識
2D 環境中想要用渲染的方式進行光影效果的設定
一般的做法就是安裝 Universal RP
(前身是 light-weight RP
)
基本步驟大概是
- 安裝 plugin
- 設定 project setting 中的渲染設置 (2個地方要改)
- Covert 原本的個物件上的 material
- 設定光源
- 設定 global 光線
- 設定 額外需要的光源
- 額外設定 shadow 等
可以參考下面這片的做法,你就可以完成背景設定
https://www.youtube.com/watch?v=nkgGyO9VG54
但是… tilemap 還是沒辦法用啊 XD
self shadow 定義
https://docs.unity3d.com/Packages/[email protected]/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 的現象
像是轉角應該要可以閉鎖的
但有時候會這樣
在奇數格原本應該要像這樣的光
在靠近牆面到一定距離的時候會出現奇怪的三角陰影
也是這個原因讓我原本到處都是單格牆面的地方看起來完全爛掉不能用
做了幾個實驗之後猜測是浮點數造成的計算問題
因為讓光源座標偏移 一點點 這問題就會消失,所以我先用這個方法鴕鳥心態了一下
- 另一個 我沒有嘗試的 repo
其他過程中發現的毛
- Bug – 2D shadow caster 2022/4 月的 bug
結論
目前商業作品也是去買
https://assetstore.unity.com/packages/tools/particles-effects/smart-lighting-2d-112535
目前的免費解就是沒有正確的柔光、也會有效能問題 (如果牆面沒有接在一起的話),但…暫時我會先用免費解啦。
以目前只是要做原型的角度來看夠用了