[Unity] 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/[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 的現象

像是轉角應該要可以閉鎖的

但有時候會這樣

在奇數格原本應該要像這樣的光

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

也是這個原因讓我原本到處都是單格牆面的地方看起來完全爛掉不能用

做了幾個實驗之後猜測是浮點數造成的計算問題
因為讓光源座標偏移 一點點 這問題就會消失,所以我先用這個方法鴕鳥心態了一下

其他過程中發現的毛

結論

目前商業作品也是去買
https://assetstore.unity.com/packages/tools/particles-effects/smart-lighting-2d-112535

目前的免費解就是沒有正確的柔光、也會有效能問題 (如果牆面沒有接在一起的話),但…暫時我會先用免費解啦。

以目前只是要做原型的角度來看夠用了

其他種類的 View 光影效果相關影片

https://www.youtube.com/watch?v=xpL44Ztyy1Q

關於

登山嚮導 / IT / 武術/網頁工程 - 貪多而正努力咀嚼的人生小吃貨