Unity Draw Call優化學習

2021-09-25 15:42:06 字數 1654 閱讀 4805

本次優化的重點包括:層級關係和特效

drawcall,我得到的是一些並不完全正確的資訊,例如將n個紋理打包成乙個圖集,這個圖集就只會產生乙個drawcall,如果不打成圖集,那麼就會有n個drawcall,這個觀點在很多人的認識裡都是正確的,因為可以通過簡單的操作來驗證,但嚴格來說,這個觀點是錯誤的,因為它還受層級關係影響!

u3d的渲染是有順序的,u3d的渲染順序是由我們控制的,控制好u3d的渲染順序,你才能控制好drawcall

乙個drawcall,表示u3d使用這個材質/紋理,來進行一次渲染,那麼這次渲染假設有3個物件,那麼當3個物件都使用這乙個材質/紋理的時候,就會產生一次drawcall,可以理解為一次將紋理輸送到螢幕上的過程,(實際上引擎大多會使用如雙緩衝,快取這類的手段來優化這個過程,但在這裡我們只需要這樣子認識就可以了),假設3個物件使用不同的材質/紋理,那麼無疑會產生3個drawcall

接下來我們的3個物件使用2個材質,a和b使用材質1,c使用材質2,這時候來看,應該是有2個drawcall,或者3個drawcall。應該是2個drawcall啊,為什麼會有3個drawcall???而且是有時候2個,有時候3個。我們按照上面的drawcall分析流程來分析一下:

1.渲染a,使用材質1

2.渲染b,使用材質1

3.渲染c,使用材質2

在這種情況下是2個drawcall,在下面這種情況下,則是3個drawcall

1.渲染a,使用材質1

2.渲染c,使用材質2

3.渲染b,使用材質1

因為我們沒有控制好渲染順序(或者說沒有去特意控制),所以導致了額外的drawcall,因為a和b不是一次性渲染完的,而是被c打斷了,所以導致材質1被分為兩次渲染

那麼是什麼在控制這個渲染順序呢?首先在多個相機的情況下,u3d會根據相機的深度順序進行渲染,在每個相機中,它會根據你距離相機的距離,由遠到近進行渲染,在ui相機中,還會根據你ui物件的深度進行渲染

那麼我們要做的就是,對要渲染的物件進行一次規劃,正確地排列好它們,規則是,按照z軸或者深度,對空間進行劃分,然後確定好每個物件的z軸和深度,讓使用同乙個材質的東西,盡量保持在這個空間內,不要讓其他材質的物件進入這個空間,否則就會打斷這個空間的渲染順序

在這個基礎上,更細的規則有:

每個材質/紋理的渲染一定是會產生drawcall的,這個drawcall只能通過打包圖集來進行優化

製作圖集一般遵循幾個規則:

不要一股腦把所有東西打包到乙個圖集裡,特別是那些不可能同時出現的東西,它們就不應該在乙個圖集裡,這樣的圖集意義不大,減少不了drawcall,並且乙個你不需要顯示的,會一直占用你的記憶體,這讓我非常不爽

注意控制圖集的大小,不要讓圖集太大,乙個超級大圖集的drawcall消耗或許頂的上十幾個小圖集的消耗

字元圖集,在使用bmfont或者其他工具生成字的時候,我們往往是直接匯入一大串文字,然後直接生成,但實際上這上面的操作也有優化空間,例如bmfont生成的大小,是可以設定的,有兩個規則,乙個規則是匯出的盡量小,另乙個是匯出的盡量少,預設的大小應該是512x512,假設你生成的256x256就可以容納,那麼多做乙個操作你可以節省這麼多空間,另外當你輸入多幾個字,就導致增加一張時,例如1024變成2048,那麼你可以考慮使用3張512的,這樣也會節省空間

經過精心劃分的圖集在加上精心規劃的渲染順序,drawcall會有乙個質的優化

Mysql limit 優化優化

mysql 效能到底能有多高?用了php半年多,真正如此深入的去思考這個問題還是從前天開始。有過痛苦有過絕望,到現在充滿信心!mysql 這個資料庫絕對是適合dba級的高手去玩的,一般做一點1萬篇新聞的小型系統怎麼寫都可以,用xx框架可以實現快速開發。可是資料量到了10萬,百萬至千萬,他的效能還能那...

php優化 nginx優化 mysql優化

php優化 1 將類的方法定義為static。2 盡量使用單引號。3 修改php fpm程序數。4 修改單個指令碼最大可使用記憶體。5 大的陣列使用完之後要及時釋放。6 迴圈的時候,制定最大迴圈次數 7 不使用 遮蔽錯誤 8 盡量採用大量的 php 內建函式 9 使用require代替require...

約瑟夫問題(優化優化再優化)

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。1 模擬方法 2 數學方法 模擬方法就是所謂的乙個個模擬,乙個乙個出列...