Unity優化的幾點

2021-07-31 02:29:56 字數 1336 閱讀 7052

drawcall實際上就是乙個命令,是cpu想gpu發起的渲染命令。

所以優化drawcall的數目,實際上就要減少cpu對gpu發起的渲染命令,舉個例子,如果我們要渲染一千個三角形,把他們按乙個單獨的網格進行渲染所花費的時間要遠大於渲染乙個包含了一千個三角面的網格,而主要的問題就是在cpu塊,呼叫了太多次的drawcall,gpu可能並沒有太大的差別。

動態批處理

如果乙個場景一些模型共享了同乙個材質並且滿足動態批處理的條件,unity會自動對它們進行動態批處理,從而只要花費乙個drawcall就可以渲染這些模型。動態批處理的原理是,每一幀都把這部分可以進行動態批處理的模型進行模型網格合併,所以我們依然可以在**裡面移動這些物理。

限制的條件

靜態批處理

靜態批處理相對於動態批處理,沒有了模型大小的限制,實現原理只在執行開始的階段,把需要靜態批處理的模型合併到乙個新的網格結構中,這就意味著在靜態批處理的模型無法在執行時刻移動,旋轉等。

注意:批處理是有缺點的,它會占用個多的記憶體來儲存合併後的幾何結構,例如,如果在乙個使用了1000個相同樹模型的森林中使用靜態批處理,會多使用1000倍的記憶體!!原本相同的模型會因為座標位置不同,同時合併到乙個新的網格結構中,這會造成嚴重的記憶體影響。

使用方法:只需要對物體勾選static 為靜態

共享材質

如果兩個材質之間只有使用的紋理不同,我們可以把這些紋理合併到一張更大的紋理中(圖集),一旦使用了同一張紋理,我們就可以使用同乙個材質再使用不同的取樣座標對紋理取樣就可以。

從美術上減少頂點的數目

unity模型的lod技術(level of detail),類似於 mipmap的技術,當物體離攝像機很遠時,模型上的很多細節無法被察覺到,因此,lod允許當物件逐漸遠離攝像機時,減少模型上的麵片數量。在unity中使用lod很簡單,準備細節的美術模型,然後為物體新增乙個lod group進行調整就可以

遮擋剔除技術(occlusion culling),相關(

控制渲染順序最大的避免overdraw,盡量避免使用半透明佇列

減少實時關照和陰影

合併紋理圖集

紋理的長寬比最好是正方形,而且是2的整數冪

使用mipmaps,unity會自動生成mipmap,可以節省gpu訪問的畫素數目

利用解析度縮放

shader中的lod

subshader

lod 200

}

預設的diffuse lod值為200,bumper specular lod值為400,我們可以使用shader.maximunlod / shader.globalmaxinumlod來設定徐云的最大lod值,大於該lod值的shader會禁用掉

MySQL優化的幾點建議

設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來決定字...

MySQL優化的幾點建議

本文 設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來...

Mysql優化的幾點總結

正常情況下,初創公司的流量並不是很大,mysql資料庫在未做優化的情況依然可以滿足效能要求,特別是5.6版本後mysql在效能上還是有了很大提公升,所以在初期並沒有花精力在此上面。但後來發生的一系列問題還是說明mysql效能優化在專案啟動時就應該重視起來。下面就出現問題的原因和需要注意的地方說明如下...