最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

URP | Unity圖形優(yōu)化

2022-02-18 14:01 作者:那個人真狗  | 我要投稿

什么影響渲染性能

  • URP性能優(yōu)化,主要是3個一個是Batches 和 Saved by Batching ,在加一個SetPass calls 渲染狀態(tài)的次數(shù)


Batches

渲染場景需要多少個批次(也就是需要渲染多少次)

Set Pass calls

設(shè)置渲染狀態(tài)的次數(shù)。

所以優(yōu)化效果,需要考慮這倆方面都很重要

unity為我們提供了哪些方法?


靜態(tài)批處理

批處理條件

  • 標記為 Batching Static 的物體

  • 在使用相同材質(zhì)的條件下

可以理解

打包的時候Unity會自動將這些物體合并到一個大Mesh里

(程序提取這些共享材質(zhì)的靜態(tài)模型的頂點和索引數(shù)據(jù)放到一個共享的Vertex buffer 和 Index Buffer里)

設(shè)置開啟

  • 標記為Batching Static物體,

注意: 不可以移動物體,比如場景物體設(shè)置這個模式,

標記后物體運動時不能移動,旋轉(zhuǎn),縮放。

  • 如果有子物體,會提示字物體是否改成一樣的。



優(yōu)點

  • 提高渲染效率

    • 并不減少Draw call ,減少了渲染狀態(tài)設(shè)置。

    • 但是編輯器會顯示Batches 減少


沒優(yōu)化前

優(yōu)化結(jié)果

缺點

  • 打包后體積增大

  • 運行時內(nèi)存占用增大

  • 多個不同的GameObject 引用同一個Mesh的情況下:

    • 不開啟Static batching ?Mesh會在應用程序,內(nèi)存里存在一份,繪制的時候提交模型頂點信息,然后設(shè)置每一個GameObjec材質(zhì)信息,分別調(diào)用渲染API繪制

    • 開啟Static batching ? ?unity 執(zhí)行編譯的時候,場景中所有引用相同模型的GameObject都必須將模型頂點信息復制,并且計算變化到一個大模型。

      包體和內(nèi)存占用都增大。

動態(tài)批處理

  • Unity 在運行時對符合條件的動態(tài)對象在一個Draw call內(nèi)繪制渲染,降低Draw Call數(shù)量。

基本條件

  • 不超過300個頂點(不超過總計900個屬性)

    • Shader使用頂點位置,法線,UV可以包含300個頂點(三個屬性就只能是300個頂點)

    • Shader使用頂點位置,法線,UV0,UV1,切線,則只能包含180個頂點 (五個屬性就只能是180個頂點)

  • 不包含鏡像的Scale縮放

    • 比如物體A ? Scale 為1 , ?物體B Scale 為 -1

  • 材質(zhì)一樣

  • 物體的loghtmap指向的位置一樣

開啟動態(tài)合批

  • 在URP管線里開啟動態(tài)合批

問題:消耗CPU

  • 動態(tài)批處理原理

    運行時,在進行場景繪制前,Cpu上將所有的共享同一材質(zhì)的模型,頂點信息變換到世界空間下。

    然后通過一次Draw call繪制多個模型,達到合批的目的。

缺點

  • 動態(tài)合批在降低Draw call的同時會導致額外的CPU性能消耗,所以僅僅合批操作的性能消耗小于不合批,

    動態(tài)合批才有意義。

  • 動態(tài)合批相當于靜態(tài)合批不需要預先復制模型頂點,所以在內(nèi)存占用和包體方面優(yōu)于靜態(tài)合批。

注意:如果包體大內(nèi)存占用多,使用動態(tài)合批,CPU壓力大,使用靜態(tài)合批。


合批中斷情況

因為動態(tài)合批要求高,所以在使用過程可能出現(xiàn)合批中斷問題。

  • 物體如果都符合條件優(yōu)先參與靜態(tài)批處理,再是GPU Instancing ,然后才是動態(tài)合批

  • 如果使用多Pass Shader的物體會禁用 動態(tài)合批(Dynamic batching)

  • 多個物體必須都是同一個材質(zhì),但是對于Shadow casters 的渲染是一個列外。

    盡管Shadow casters使用不同材質(zhì),但是只要他們的材質(zhì)中給Shadow Caster Pass 使用參數(shù)是相同的,

    他們也能夠進行 動態(tài)合批。

  • 在Unity中使用前向渲染(Forward Rendering Path) 中如果 一個模型接受多個光照,也不能進行合批。

    因為多個光照多次繪制。(URP中多光源是一次繪制)


GPU Instancin (GPU實例化)

GPU Instancin 是什么?

  • 使用少量diaw call 繪制多個相同的Mesh。

    比如場景中的建筑,樹,草,石頭等。

如何開啟

  • Unity 默認Shader 在材質(zhì)下方勾選,就可以開啟。

  • 自定義Shader 如何使用GPU Instancing

參考 : https://docs.unity3d.com/Manual/GPUInstancing.html

GPU Instancin原理

  • 同材質(zhì),同Mesh的物體,

  • 僅繪制一個

  • 其他物體”復制“出來,(其他物體儲存的頂點位置信息和頂點變化的數(shù)值,復制出來)

GPU Instancin限制

  • 同模型同材質(zhì)才能合并到一個Draw call中

  • 支持MeshRenderer和Graphics.DrawMesh調(diào)用

  • 不支持(SjinnedMerhRenderer)帶骨骼動畫的模型。

GPU Instancin無法合批的情況

  • 縮放為負值的情況

  • 代碼動態(tài)改變材質(zhì)變量后不算同一個材質(zhì),但可以通過將顏色變化等變量加入常量緩沖器中實現(xiàn)。

  • 受限于常量緩沖器在不同設(shè)備上的大小的上限,同批的個數(shù)可能不同。

  • 只支持一盞實時光,要在多個光源的情況下使用實例化,只能切換到延遲渲染路徑。

SRP Batcher

  • SRP Batcher 是一個渲染循環(huán),可加速相同著色器變體的多種材質(zhì)在場景中的CPU渲染速度。

原理

  • Shader中的變體一致

  • 降低Set Pass Call的消耗

SRP Batcher 通過批處理(batching)—— 系列綁定(Bind)和繪制(Draw)GPU 命令,來減少DrawCalls之間的GPU 設(shè)置(工作量)

設(shè)置

  • 首先在Pipeline Asset(渲染管線中)里勾選SRP Batcher。

  • 在下方勾選SRP Batcher

Shader 支持

  • 在Shader界面我們可以看到是否支持這個效果,才會起作用。

效果

  • 在渲染輸出里查看支持情況,

優(yōu)點

  • 支持模型帶骨骼動畫

SRP Batcher 無法合批情況

  • 對象不可以是粒子

  • Shader中變體不一致,如Suface Options不一致,導致變體不一致而無法合并

  • 一個不透明物體,一個是透明物體

  • 位置不相鄰且中間夾雜著不同Shader或者不同變體的其他物體,不會進行同批次處理。

總結(jié)

優(yōu)先順序

SRP Batcher > Static Batching > GPU Instancing > Dynamic Batching

  • 優(yōu)先使用SRP Batcher ?> 靜態(tài)合批 > ?GPU Instancing > 動態(tài)合批

資料

【直播回放】Unity 批處理/GPU Instancing/SRP Batcher_嗶哩嗶哩_bilibili

? ?Unity SRP Batcher的工作原理_zakerhero的博客-CSDN博客

? ?Unity 性能優(yōu)化 之 非??岬腟RP Batcher!_zakerhero的博客-CSDN博客

URP | Unity圖形優(yōu)化的評論 (共 條)

分享到微博請遵守國家法律
凌海市| 武强县| 民权县| 陇西县| 永修县| 色达县| 乌鲁木齐县| 同江市| 长垣县| 佛山市| 九寨沟县| 黄大仙区| 龙游县| 淮南市| 义乌市| 张家港市| 安吉县| 双城市| 京山县| 宁远县| 邵阳市| 宁德市| 宁波市| 平陆县| 西丰县| 吴忠市| 荥经县| 茂名市| 横峰县| 昔阳县| 陇川县| 潍坊市| 辽阳市| 漾濞| 汉源县| 惠东县| 武川县| 盐源县| 宝清县| 万山特区| 江阴市|