精選文章

SmallBurger Asset Home

  SmallBurger

2019年7月3日 星期三

關於Unity Project Decal的做法分析

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...

沒有留言:

張貼留言