武漢做網(wǎng)站公司推薦怎樣去推廣自己的網(wǎng)店
提示:僅供參考,有誤之處,麻煩大佬指出,不勝感激!
文章目錄
- 前言
- 一、GPU Instancing使用方法
- 二、使用GPU Instancing的條件
- 三、GPU Instancing弊端
- 四、注意
- 五、檢查是否成功
- 總結(jié)
前言
GPU Instancing也是一種Draw call的優(yōu)化方案,使用一個(gè)Draw call就能渲染具有多個(gè)相同材質(zhì)的網(wǎng)格對(duì)象。而這些網(wǎng)格的每個(gè)copy稱為一個(gè)實(shí)例(Instancing)。
使用GPU Instancing可以在一個(gè)Draw Call中同時(shí)渲染多個(gè)相同或類似的物體,從而減少CPU和GPU的開(kāi)銷。
什么是Draw call這章有詳細(xì)介紹 Unity 性能優(yōu)化之?dāng)?shù)據(jù)面板(Statistics)(一) ):
Draw Call是指CPU向GPU發(fā)送繪制指令的過(guò)程,一個(gè)Draw Call就是CPU向GPU發(fā)送的一組繪制指令,可以繪制出一個(gè)或多個(gè)物體。
GPU Instancing比較適合場(chǎng)景中有大量重復(fù)的網(wǎng)格實(shí)例,例如:草、樹(shù)木、灌木叢 或者大量 重復(fù)性物體。
一、GPU Instancing使用方法
要啟用GPU Instancing,我們可以選中一個(gè)材質(zhì),然后在Inspector窗口勾選Enable GPU Instancing,這樣就可以了,如下圖:
二、使用GPU Instancing的條件
1、使用相同的材質(zhì)和網(wǎng)格。
2、材質(zhì)的著色器必須支持GPU Instancing。例如:標(biāo)準(zhǔn)著色器和表面著色器就支持GPU Instancing。
3、網(wǎng)格的頂點(diǎn)布局和著色器必須相同。如果網(wǎng)格的頂點(diǎn)布局或著色器不同,那么它們就無(wú)法被合并成一個(gè)實(shí)例。
4、每個(gè)實(shí)例需要有不同的變換信息(例如位置、旋轉(zhuǎn)、縮放)。雖然多個(gè)實(shí)例可以使用相同的材質(zhì)和網(wǎng)格,但是它們必須擁有不同的變換信息才能被正確地實(shí)例化并渲染出來(lái)。
5、GPU Instancing與SRP Batcher不兼容,如果項(xiàng)目使用了SRP Batcher,并且配置為優(yōu)先使用SRP Batcher而不是GPU實(shí)例化,啟用GPU實(shí)例化可能不會(huì)生效。SRP Batcher是Unity提供的一種渲染優(yōu)化技術(shù),它可以將多個(gè)網(wǎng)格合并成單個(gè)批次進(jìn)行渲染,從而提高性能。在這種情況下,GPU實(shí)例化將被忽略。
三、GPU Instancing弊端
所有得優(yōu)化技術(shù)都是有利有弊得,GPU Instancing雖然可以減少CPU的開(kāi)銷,優(yōu)化Draw Call次數(shù),提高性能。但是也會(huì)占用內(nèi)存,所以需要合理使用。
四、注意
1、URP渲染管線中,會(huì)發(fā)現(xiàn)GPU Instancing沒(méi)有生效,原因是UPR默認(rèn)開(kāi)啟SRP Batch,你可以選擇關(guān)閉它。
2、如果已經(jīng)GPU Instancing的物體 需要修改實(shí)例的一些屬性,需要使用MaterialPropertyBlock,也就是通過(guò)C#代碼來(lái)控制,這樣可以不破壞GPU Instancing
MaterialPropertyBlock是Unity3D引擎中用于動(dòng)態(tài)修改材質(zhì)屬性的類。它允許在運(yùn)行時(shí)修改材質(zhì)的屬性,而不用重新創(chuàng)建一個(gè)新的材質(zhì)實(shí)例。MaterialPropertyBlock可應(yīng)用于渲染管線的各個(gè)階段,如頂點(diǎn)著色器、片段著色器等,這意味著它可以被用于實(shí)現(xiàn)一些高級(jí)的渲染效果,如GPU實(shí)例化和動(dòng)態(tài)批處理等。
通過(guò)MaterialPropertyBlock,開(kāi)發(fā)者可以在運(yùn)行時(shí)修改材質(zhì)的屬性,例如顏色、紋理等,這些修改可以作用于單個(gè)對(duì)象或者整個(gè)場(chǎng)景中的所有對(duì)象。此外,使用MaterialPropertyBlock還可以提高性能,因?yàn)樗苊饬酥匦聞?chuàng)建材質(zhì)實(shí)例的開(kāi)銷。
所以MaterialPropertyBlock也是一種優(yōu)化方案。
五、檢查是否成功
以在Profiler窗口看到Instancing信息是否發(fā)生變化,如下圖
總結(jié)
好記性不如爛筆頭
上一章:鏈接: Unity 性能優(yōu)化之動(dòng)態(tài)批處理(四)
下一章:鏈接: Unity 性能優(yōu)化之遮擋剔除(Occlusion Culling)(六)