抓手
根據我的理解總結,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...