這段時間作unity3d的優化,主要的入手是減小draw call。
一、代碼上主要是把一些零碎的同材質的合併成一個大的mesh。
二、減小沒必要要的全屏後期處理。把攝像機的rendering path,由deferred修改成forward。這樣修改的緣由是,咱們場景中只是使用了一個燈光,延遲渲染並無頗有發揮其優點,另外使用向前渲染的話,引擎的動態合併會有很好的做用。
通過上面兩部分的操做,draw call 減小的很是多,而且遊戲在目標平臺上也能流暢的運行。可是發現一個很是明顯的問題: 在兩個物體牢牢挨着的邊緣會明顯的有裂痕在閃爍,好比一個賽段拼接另外一個賽段的鏈接處。
一開始覺得是depth buffer 的精度問題致使的 depth fighting。因此調整了攝像機的near clip,但也仍是會出現,只是調整near clip也有限制,不然會影響遊戲,在調整near clip和把抗鋸齒anti aliasing設置調整4* 或8* 裂縫的閃現會沒那麼明顯,可是一樣存在。想使用w buffer 來代替depth buffer來試下,可是無奈不清楚unity怎麼處理,(當時想,若是最後沒辦法就程序把鏈接的網格本身合併,這樣就不會出現裂縫了)因此先停下作其餘的了。後來想到以前這種裂縫現象怎麼沒注意到呢,至少是不明顯的。因此以爲會不會是rendering path,不一樣致使的呢。
分別build兩個程序,使用不一樣的rendering path。確實是使用延遲渲染的不會有裂縫閃現的現象,而向前渲染會有,這真是令人摸不着頭腦呀,兩種不一樣的渲染方式 怎麼會出現這樣的狀況呢?仍是不相信是因爲不一樣的渲染方式致使的,繼續找緣由,發現兩個有裂縫閃現的mesh,是用的相同材質,想到會不會是動態批處理的緣由呢?
使用向前渲染時在play setting中去掉Dynamic batching 裂縫閃爍的現象就不會出現了,最終肯定是引擎提供的動態批處理致使的問題。那爲何用延遲渲染時沒呢,那是由於用延遲渲染的話,引擎對動態批處理頗有限,(你在4.x版本的unity上,每添加一個cube,就要增長兩個draw call,而向前渲染的話,會幫你動態批處理,並不會每一個cube都增長draw call)。
知道問題所在,修改也比較容易了,可是爲何其Dynamic batching 會致使裂縫閃爍,這個問題仍是有待研究,可是unity內部是如何實現的不知道。但願瞭解這方面的人能指點一二!優化