unity3d游戲開發(fā)之優(yōu)化技術(2)

unity3d游戲開發(fā)之優(yōu)化技術(2)

ID:39891072

大?。?50.55 KB

頁數:6頁

時間:2019-07-14

unity3d游戲開發(fā)之優(yōu)化技術(2)_第1頁
unity3d游戲開發(fā)之優(yōu)化技術(2)_第2頁
unity3d游戲開發(fā)之優(yōu)化技術(2)_第3頁
unity3d游戲開發(fā)之優(yōu)化技術(2)_第4頁
unity3d游戲開發(fā)之優(yōu)化技術(2)_第5頁
資源描述:

《unity3d游戲開發(fā)之優(yōu)化技術(2)》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。

1、可以看到DrawCalls一下子變成了5。這是因為新添加的箱子模型中,包含了474個頂點,而它使用的頂點屬性有位置、UV坐標、法線等信息,使用的總和超過了900。動態(tài)批處理的條件這么多,一不小心它就不干了,因此Unity提供了另一個方法,靜態(tài)批處理。接著上面的例子,我們保持修改后的縮放,但把四個物體的“StaticFlag”勾選上:點擊Static后面的三角下拉框,我們會看到其實這一步設置了很多東西,這里我們想要的只是“Batchingstatic”一項。這時我們再看DrawCalls,恩,還是沒有變化。但是不要急,我們點擊運行,變化出現了。DrawCalls又回到了3,并且顯示Saveb

2、ybatching是1。這就是得利于靜態(tài)批處理。而且,如果我們在運行時刻查看模型的網格,會發(fā)現它們都變成了一個名為CombinedMesh(roo:scene)的東西。這個網格是Unity合并了所有標識為“Static”的物體的結果,在我們的例子里,就是四個物體:你可以要問了,這四個對象明明不是都使用了一個材質,為什么可以合并成一個呢?如果你仔細觀察上圖的話,會發(fā)現里面標明了“4submeshes”,也就是說,這個合并后的網格其實包含了4個子網格,也就是我們的四個對象。對于合并后后的網格,Unity會判斷其中使用同一個材質的子網格,然后對它們進行批處理。但是,我們再細心點可以發(fā)現,我們的箱

3、子使用的其實是同一個網格,但合并后卻變成了兩個。而且,我們觀察運行前后Stats窗口中的“VBOtotal”,它的大小由241.6KB變成了286.2KB,變大了!還記得靜態(tài)批處理的缺點嗎?就是可能會占用更多的內存。文檔中是這樣寫的:“Usingstaticbatchingwillrequireadditionalmemoryforstoringthecombinedgeometry.Ifseveralobjectssharedthesamegeometrybeforestaticbatching,thenacopyofgeometrywillbecreatedforeachobject,

4、eitherintheEditororatruntime.Thismightnotalwaysbeagoodidea–sometimesyouwillhavetosacrificerenderingperformancebyavoidingstaticbatchingforsomeobjectstokeepasmallermemoryfootprint.Forexample,markingtreesasstaticinadenseforestlevelcanhaveseriousmemoryimpact.”也就是說,如果在靜態(tài)批處理前有一些物體共享了相同的網格(例如這里的兩個箱子),那么每

5、一個物體都會有一個該網格的復制品,即一個網格會變成多個網格被發(fā)送給GPU。在上面的例子看來,就是VBO的大小明顯增大了。如果這類使用同一網格的對象很多,那么這就是一個問題了,這種時候我們可能需要避免使用靜態(tài)批處理,這意味著犧牲一定的渲染性能。例如,如果在一個使用了1000個重復樹模型的森林中使用靜態(tài)批處理,那么結果就會產生1000倍的內存,這會造成嚴重的內存影響。這種時候,解決方法要么我們可以忍受這種犧牲內存換取性能的方法,要么不要使用靜態(tài)批處理,而使用動態(tài)批處理(前提是大家使用相同的縮放大小,或者大家都使用不同的非統(tǒng)一縮放大?。?,或者自己編寫批處理的方法。當然,我認為最好的還是使用動態(tài)批

6、處理來解決。有一些小提示可以使用:盡可能選擇靜態(tài)批處理,但得時刻小心對內存的消耗。如果無法進行靜態(tài)批處理,而要使用動態(tài)批處理的話,那么請小心上面提到的各種注意事項。例如:盡可能讓這樣的物體少并且盡可能讓這些物體包含少量的頂點屬性。不要使用統(tǒng)一縮放,或者都使用不同的非統(tǒng)一縮放。對于游戲中的小道具,例如可以撿拾的金幣等,可以使用動態(tài)批處理。對于包含動畫的這類物體,我們無法全部使用靜態(tài)批處理,但其中如果有不動的部分,可以把這部分標識成“Static”。一些討論:HowstaticbatchingworksStaticbatchinguseatonofmemory?Unity3Ddrawcallo

7、ptimization[color=ize:14px]合并紋理(Atlas)雖然批處理是個很好的方式,但很容易就打破它的規(guī)定。例如,場景中的物體都使用Diffuse材質,但它們可能會使用不同的紋理。因此,盡可能把多張小紋理合并到一張大紋理(Atlas)中是一個好主意。[color=ize:14px]利用網格的頂點數據但有時,除了紋理不同外,還有對于不同的物體,它們在材質上還有一些微小的參數變化,例如顏色不同、某些浮點參數

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。