三維場景的渲染優化(二)

2021-06-15 22:41:39 字數 1802 閱讀 5599

靜態場景包括了地形、植被、建築物等一般不改變位置的實體集合,對它的優化是場景優化中最重主要的內容。本文就靜態場景優化的常見問題進行了**。

1 批的優化

批是場景優化中的最重要的概念之一,它指的是一次渲染呼叫(dp),批的尺寸是這次渲染呼叫所能渲染的多邊形數量。每個批的呼叫都會消耗一定的cpu時間,對於顯示卡來說,乙個批里的多邊形數量遠達不到最大繪製數量。因此盡可能將更多的多邊形放在乙個批里渲染,以此來減少批的數目,最終降低cpu時間,是批的優化基本原則。然而事情往往不盡如人意,有些情況下原有的批會被打破,造成額外的開銷,如紋理的改變或不同的矩陣狀態。針對這些問題,我們可以採用一些方法來盡量避免它,已達到批尺寸的最大化。

(1)合併多個小紋理為一張大紋理     在某個場景中,地面上有十多種不同的植被,它們除了紋理不同外,渲染狀態都是一樣。我們就可以把它們的紋理打包成乙個大紋理,再為每個植被模型指定uv,這樣我們就可以用乙個渲染呼叫來渲染所有的物體,批的數量就從十多個降為乙個。這種方法比較適合對紋理精度要求不高,面數不會太多的物體。

(2)利用頂點shader 來統一不同矩陣的情況   即使場景中的所有物體材質都一樣,如果它們的矩陣狀態不同(特別是場景圖管理的引擎),也會打碎原有的批。利用頂點shader技術可以避免這種情況,因為可以把要乘的變換矩陣通過常量暫存器傳到shader程式中,這樣統一了物體的矩陣狀態,可以放在乙個批里渲染。

2 渲染狀態管理

渲染狀態是用來控制渲染器的渲染行為,在d3d中是setrenderstate,通過改變渲染狀態,我們可以設定紋理狀態、深度寫入等等。改變渲染狀態對顯示卡來說,是個比較耗時的工作,因為顯示卡執行api必須嚴格按照渲染路徑,當渲染狀態變化時,顯示卡就必須執行浮點運算來改變渲染路徑,因此給cpu和gpu帶來時間消耗(cpu必須等待),渲染狀態變化越大,所要進行的浮點運算越多。因此將渲染狀態進行有效的管理,盡可能 減少其變化,對渲染效能影響巨大。(新六代的顯示卡geforce8系列中將一些常見的狀態引數集儲存在顯示卡核心中,當渲染狀態狀態發生變化,可以直接讀取儲存的引數集,以消除不必要的開銷)。絕大部分的3d引擎都會按照渲染狀態對pass進行分組渲染。

3 lod

lod這個已經被人討論爛掉的技術我就不多廢話了,簡單談談一些實際應用。地形的lod我就不多說了,方法太多了,不過感覺目前情況下最實用的還是連鎖分片的方法。對於模型lod,自動減面的演算法,如vdpm(漸近網格子)並不少見,但是效果都很一般。常規的做法還是讓美工做低模進行替換,對於複雜場景來說,模型lod的效果還是比較明顯的。材質lod就需要一些技巧,例如可以將霧後的物體,包括地形等統一成一種材質,採用霧的顏色,這樣就統一了渲染狀態,至於是否要打包成乙個dp就要看具體情況了(這個統一的材質最好把光照影響關掉,這也是比較費時的)。至於角色模型的lod和普通模型lod相類似,低模減少了頂點數,自然減少了蒙皮計算量。個人認為骨骼lod不是特別的必要,看具體的情況。

4 場景管理的優化

場景管理的優化包括場景分割,可見性剔除等,有很多的參考文章,這裡就不多說了,談些個人的心得。現在的室外場景一般採用quadtree或octree,當我們在效能評測時發現遍歷樹的過程比較慢時,有可能有兩個原因。一是樹的深度設定的不合理,我們可以很容易尋找到乙個最佳的深度。另乙個原因可能是我們為太多數量 眾多,但體積很小的物體分配了結點,造成結點數量的冗餘。解決方法是把這些小物體劃分到他們所在的大的結點中。

可見性剔除是最常見優化方法,我們常用的是視錐裁減,這也是非常有效的。視錐裁減也是許多優化方法,這裡就不詳說了。遮擋裁減也是經常被用到的方法,常見的有地平線裁減。但是在有些情況下,遮擋裁減的效果並不明顯,如當cpu使用率已經是100%時,cpu端是瓶頸,這時進行遮擋裁減計算消耗cpu時間,效果就不明顯。但是有些情況下利用一些預生成資訊的方法,降低遮擋裁減計算的複雜度,提高遮擋裁減計算的效率,對場景效能會一定的改善。

三維場景的渲染優化

對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於3d應用程式來說,影...

三維場景的渲染優化(一)

三維場景的渲染優化 一 如何進行有效的效能評測 對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評...

三維渲染之地形渲染

地形渲染是三維場景的重點,地形渲染的質量和效率直接影響整個場景渲染的質量和效率。一般來說,為了渲染出更加真實的地形,則地形的單個網格要盡量小,這樣才能保證地形各個部分更加的精細。但如果網格變小,則對系統的開銷也就大了,從而會影響渲染的效率。因此地形演算法的設計實際上就是圍繞著渲染質量和渲染效率這兩方...