開放世界,大地形的繪製可以說一向是遊戲渲染開發的難點,其難度大概在三個方面:提交繪製,LOD控制與流式載入。繪製提交表現在當地形較大較複雜時,常需要使用數個Pass繪製同一片地形,這就導致Drawcall爆炸,造成的CPU消耗難以控制。遠處的物體本身難以看清,然而造成的頂點繪製消耗依然高昂,因此Level Of Detail和Streaming Load,秉承看不見的就模糊,然後卸載掉的概念,對於開放地形的繪製也是必須的。
在之前的GPU Drivne Rendering Pipeline中,我們已經實現了高效的繪製,徹底解放了CPU,在GDC 2015 Ubisoft的分享中,也指出GPU RP在繪製大地形時的性能提升:
然而GPU RP的實現方法卻著實有種拆了東牆補西牆的思想,將內存的使用轉到顯存,然後將CPU的工作轉移到GPU,這就又有幾個新的問題暴露出來:首先PCIE的性能短板,PCIE的IO性能可能只有顯存的1/10,這意味著之前不需要考慮的內存短板(因為一般大多數都是硬碟或CPU是短板),也在我們的考慮範圍內。同時GPU的數據結構與邏輯處理方法更加單一,只能使用線性的數據結構與統一併行調用的函數,這就需要在上層邏輯做許多複雜的工作來完成對資源的卸載,處理等。
因此在這一系列文章中,我們將著手研究基於GPU Driven RP的大地形繪製,管理等。
文章的進度會分以下幾部分進行,長時間不定時更新(除非難度太高,信心爆炸,一般不會棄坑):
目前Unity3D缺乏有效的開放世界與大地形的實現方案,這一系列嘗試希望可以打破這個僵局,做到從零到一,並爭取將這套方案完整實現並投入到生產中。
推薦閱讀: