關於Unity 特效粒子的自動合批


  最近發現運行時特效的drawcall有點高,測試了一下發現有些情況下不會自動合批。

  最后的結論如下:

  1. 如果特效在同一位置,(猜測應該是PRS都相同,不過沒具體測試,當時只是復制粘貼出來幾個)一定會自動合批。

  2. 特效中相同材質的,應該是可以被自動合批的,但是如果是半透的情況下,如果渲染隊列不同,會合批失敗,需要手動的將渲染隊列變更為3000+1,+2..以此類推,只要不同即可。猜測原因可能是,當渲染隊列相同是,半透物體的前后無法確認,底層需要對其排序(可能要渲染預處理之類的?),導致合批失敗;當渲染隊列不同的時候,底層可能無腦使用了渲染隊列來作為渲染順序,所以就不用自己排序了,所以相同材質的就可以被合批了。

  當然,這個只是猜測。另外,ParticleSystem的order in layer也能手動划分渲染次序使得合批成功,但是根據我自己的測試情況來看,這個時候drawcall數目比修改渲染隊列來的多(也能合批,但是感覺有一些還是合批失敗了),目前不知道原因,可能也跟特效有關系?

  另外,經過自己研究,ParticleSystem的order in layer排序優先級比渲染隊列高,並且當兩個都相同時,會隨機決定渲染順序(測試下來好像是先創建的先被渲染,不怎么清楚)。

  使用這個優化后的效果圖:

  這是最初的,189dc。

  80個特效時的dc,431dc,大概特效240個dc,一個fx3個dc。

 

  優化后的,特效大概70個dc,而且這里不小心開了右邊的debug UI,多了一些dc,反正差不多優化后一個特效不到一個dc吧。效果還是不錯的~

  最后,提供兩篇參考資料:

  Unity 半透明粒子特效無法動態合批問題

  Unity 特效drawcall優化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM