Unity SRP Batcher的工作原理

2021-10-08 17:40:30 字數 2683 閱讀 8189

抓手

根據我的理解總結,srp batcher就是

1、把呼叫draw call前,一大堆cpu的設定工作給一口氣處理了,增加了效率。

2、把材質的屬性資料直接永久放入到顯示卡的cbuffer裡,那只要資料不變,cpu就可以

不需要把這些資料重新做設定工作。節省了cpu呼叫,增加了效率。

3、用專用的**將引擎的屬性(比如objects transform)直接放入到gpu視訊記憶體,這個專用的**是不是更快更強呢,

官方是這樣麼說的,用的詞語是quickly,就是快。

4、srp batcher並沒有減少drawcalls,而僅僅是提高了效率。相當於乙個人**了,減去了多餘的脂肪和水分,但是器官結構啥的乙個沒少。總之就是有用。

具體的解釋

srp batcher定義:

srp batcher是乙個渲染迴圈(loop),可在有很多使用相同的shader variant的材質 的場景中,加速你的cpu渲染。

注意它的定義,也就是用的同乙個shader,但是不同的材質,也能加速。

如果想使用srp batcher,必須符合以下任意乙個管線:

1、urp管線(the universal render pipeline)

2、hdrp管線(the high definition render pipeline)

3、乙個自定義的srp(也就是自己寫的srp,手打牛肉丸)。

srp batcher的工作原理

srp batcher誕生的原因:

在乙個drawcall被乙個新的material使用的時候,有很多任務作要做。

所以如果場景有越多的materials,就會有越多的cpu必須使用去設定gpu 資料。

傳統的方法是減少drawcalls的數量去優化cpu渲染效能。

因為unity必須在呼叫drawcall前設定很多東西。

並且真正的cpu消耗來自那些設定工作,而不是gpu drawcall本身。

drawcall只是一些unity向gpu command buffer傳送的bytes。

srp batcher 通過批處理(batching)一系列繫結(bind)和繪製(draw)gpu 命令,來減少drawcalls之間的gpu 設定(工作量)。也就是之前一堆繫結和繪製的gpu命令,老子一口氣給它處理完。不需要一步步設定。

上面的圖是我翻譯的,可能有些不好理解,但是左右圖比較看看的話,右圖的工作量確實大大減少了,

畢竟從6個設定步驟減少成了2個。

為了讓你的渲染達到最大的效能,這些批處理必須盡可能大。

為了達到這樣的效果,你可以使用盡量多的同乙個shader,但不同的材質,但是盡量少的shader變體。

srp batcher 是乙個低階渲染迴圈,它使得material 資料長久在gpu記憶體裡。

如果material內容不變,srp batcher就不需要設定並上傳buffer到gpu裡。

相反( 如果material內容有變),srp batcher 使用專用的**路徑去快速更新unity engine屬性到乙個大型的gpu bufer裡。如下:

上圖,cpu僅僅處理unity engine 屬性,

所有materials 有長久的cbuffers在gpu 視訊記憶體裡,並準備去使用了。

這會加速渲染,因為所有的material 內容現在長久在gpu視訊記憶體裡。

專用的**管理大型的每個object gpu cbuffer,給所有的objecct 屬性。

srp batcher 相容性

用srp batcher去渲染乙個物體的條件如下:

1、渲染的物體必須是乙個mesh或者skinned mesh。不能是粒子。

2、shader**必須相容srp batcher。

3、該材質不能在執行中被**修改materialpropertyblock,否則也無法compatible srp batcher。(12月24號更新)

相容srp batcher的shader的條件如下:

1、必須宣告所有內建引擎properties 在乙個名為"unityperdraw"的cbuffer裡。

例如:urp內建的unityinput.hlsl裡。也就是說,如果你的**有引用或間接引用unityinput.hlsl,那就不用做這一步了。

2、必須宣告所有材質properties在乙個名為"unitypermaterial"的cbuffer裡。

在c#**中,可以用以下**在遊戲執行時開啟srp batcher.

graphicssettings.usescriptablerenderpipelinebatching = true;

支援的手機平台:

ios metal

opengl es 3.1以上

vulkan

以上,希望本文能給正在使用urp和hdrp的人提供一些幫助。

uWSGI django nginx的工作原理流程

wsgi 一種實現python解析的通用介面標準 協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了 uwsgi 同ws...

Write Ahead Log(WAL)的工作原理

在儲存系統的執行過程中,每時每刻都發生著資料的更新,背後意味著諸如建立,刪除,修改檔案等資料的操作。拋開物理檔案資料的改變,對於中心控制節點而言,這些都會涉及到元資料的更新操作。而為了保持系統元資料和物理資料間的狀態一致性,系統所有的資料操作對應的元資料變更都需要持久化到元資料db內,但其實這裡有乙...

Read Write spinlock工作原理

1 假設臨界區內沒有任何的thread,這時候任何read thread或者write thread可以進入,但是只能是其一。2 假設臨界區內有乙個read thread,這時候新來的read thread可以任意進入,但是write thread不可以進入 3 假設臨界區內有乙個write thr...