在制作上一篇的 Toon shader 的時候,
發現一個不大不小的問題困擾了幾天,
在製作 Unlit shader + transparent 時發覺 Unity 提供的 Shadow 資訊一直未能正確地取得,
所以為何人家的 Shader 可以而我自己的不行呢?
答案原來在於 Render Queue, 因為沒有想到是這方面的影響所以一直搜尋不到答案.
Reference #1: https://forum.unity.com/threads/shadow-attenuation-problems-with-transparent-queue.138513/
按上面的講解, 是因為 Transparent (3000) 沒有把影子寫入到 depth buffer, 所以 shader 取不到影子的資料…
Reference #2: https://forum.unity.com/threads/difference-between-alphatest-and-transparent-renderqueue.458750/
而這邊把有人提到 AlphaTest, 其實並不是 Transparent (廢話…), 重點是它根本不是透明. 是實色來的.
AlphaTest is an opaque queue, like Geometry, Background, and any queue 0 through 2500. Opaque queues are rendered in front to back order.
簡單的說法就是 AlphaTest 它把背後的東西在自己的表面重畫一次.
正正因為這樣自己是沒有受光的 (因為還沒有算 shadow 那一個 pass)