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