GPU Gems2 - 3 几何体实例化的内幕(Inside Geometry Instancing)
文章部分內(nèi)容摘自?https://zhuanlan.zhihu.com/p/38411575
【章節(jié)概覽】
?
本章討論了在Direct3D中渲染一個(gè)幾何體的許多獨(dú)特實(shí)例(Instance)的技術(shù)細(xì)節(jié)問題,對幾何體實(shí)例(Geometry Instancing)的技術(shù)內(nèi)幕進(jìn)行了分析。
?
【核心要點(diǎn)】
?
使用幾何體實(shí)例(Geometry Instancing)的優(yōu)勢在于可以對渲染性能進(jìn)行優(yōu)化(最小化花費(fèi)在提交渲染批次上的CPU時(shí)間)。
想要使用應(yīng)用程序最小化狀態(tài)和紋理變化次數(shù),并在一次Direct3D調(diào)用中把統(tǒng)一批次中的同一個(gè)三角形渲染多次。這樣就能最小化花費(fèi)在提交批次上的CPU時(shí)間。
這章描述了4種不同的技術(shù)來實(shí)現(xiàn)Geometry Batch:
- 靜態(tài)批次(Static batching)。最快的實(shí)例化幾何體的方法。每個(gè)實(shí)例一旦轉(zhuǎn)換到世界空間,則應(yīng)用它的屬性,然后每一幀把已經(jīng)轉(zhuǎn)換的數(shù)據(jù)發(fā)送給GPU。雖然簡單,但靜態(tài)批次是最不具靈活性的技術(shù)。(只一次轉(zhuǎn)換)
- 動態(tài)批次(Dynamic batching)。最慢的實(shí)例化幾何體的方法。每個(gè)實(shí)例在每幀都流向GPU存儲器,已經(jīng)轉(zhuǎn)換并應(yīng)用了屬性。動態(tài)批次無縫地支持蒙皮并提供了最靈活的實(shí)現(xiàn)。(每一幀都要轉(zhuǎn)換數(shù)據(jù)并傳輸)
- 頂點(diǎn)常量實(shí)例(Vertex constants instancing)。每個(gè)實(shí)例的幾何體有多份副本一次復(fù)制到GPU存儲器中的混合實(shí)現(xiàn)。然后實(shí)例屬性在每一幀通過頂點(diǎn)常量設(shè)置,而由于頂點(diǎn)著色器完成幾何體的實(shí)例化。
?
- 通過幾何體實(shí)例化API的批次(Batching with Geometry Instancing API)。使用DirectX等圖形API提供并支持的幾何體實(shí)例化,此實(shí)現(xiàn)提供了靈活快速的幾何體實(shí)例化解決方案。與其他方法不同的是,這不需要在Direct3D頂點(diǎn)流中復(fù)制幾何體包。
高效地渲染相同的幾何體(靜態(tài)批次、動態(tài)批次、頂點(diǎn)常量實(shí)例化,通過幾何體實(shí)例化API的批次),他們各有優(yōu)劣,根據(jù)應(yīng)用和渲染的物體類型分別選取。一些建議:
有相同幾何體的許多靜態(tài)實(shí)例的室內(nèi)場景,很少或從不移動的實(shí)例(比如墻壁或家具),采用靜態(tài)批次較為理想。
有許多動畫物體實(shí)例的一個(gè)室外景物,如策略游戲中有上百個(gè)士兵的大戰(zhàn)場,在這種情況下,動態(tài)批次或許是最好的解決方案。
有許多植被和樹以及許多粒子系統(tǒng)的室外場景,其中有很多經(jīng)常需要修改的屬性(例如,樹和草隨風(fēng)搖擺),幾何體實(shí)例API可能是最好的解決方案。
總結(jié)
以上是生活随笔為你收集整理的GPU Gems2 - 3 几何体实例化的内幕(Inside Geometry Instancing)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 磁盘性能,你可能不知道的IOPS计算方法
- 下一篇: GPU Gems2 - 4 分段缓冲(S