Project Decal蠻常用來處理彈孔、魔法陣(AE範圍)、圓圓影…等貼花效果,在Unity下目前提供的方案是Projector,但目前這個方式使用MultiPass的做法,會造成畫二次(三角面暴增)及打斷Batching的問題。
未使用Projector的狀況:
使用Projector的狀況:
很明顯的,使用過Projector後,Draw Batches從39提升到56,而Tris從29.3K提升到42.1K。
有沒有其他的做法呢?目前主流的做法是用一個Volume範圍(通常是用Box)加上深度貼圖來處理,在腳本運行的時候,時時計算這個投射矩陣,並帶入Shader,之後利用深度貼圖來計算投影的UV,最後只要把這個Volumle畫就來就行。其實這個概念跟Unity的Original Projector是差不多的,差別是在前者利用深度圖貼來計算投影UV,而後者則是利用多畫一次自己,再用自己的位置資料來當深度。
使用Volume Projector的狀況如下:
結果Draw Batches是40,只有增加1,而Tris只有多畫一個Box,所以看不出任何提升。
另外還有一種做法,是Polygon Projector,他是採用碰撞處理的方式,動態取得鄰近的三角面,並攤提UV的做法,這樣的方式最大的好處是比較不會發生投影超過二次以上的狀況(比方上下疊層),但缺點就是要算碰撞,如果碰撞引擎性能很好的話,其實效能也不錯,這是我當時在Ogre+Bullet引擎的實作,目前還沒實作出Unity的版本,相關影片如下…
Dream continues in...
沒有留言:
張貼留言