2013-06-21 56 views
8

我目前正在升級和重構OpenGL渲染引擎。該引擎用於可視化建築數據的大型場景(建築物內部),並且物體的數量可能變得相當大。與任何建築物一樣,牆內有很多遮擋物體,而且你自然只能看到與你在同一個房間內的物體,或者如果你在外面,則只能看到外部的物體。這留下了大量應該通過遮擋剔除和平截頭體剔除而被遮擋的對象。最先進的剔除和批處理技術渲染

同時,有很多可以在渲染批處理中進行批處理的重複幾何,以及許多可以使用實例化渲染進行渲染的對象。

我看到它的方式,可能很難以最佳方式組合渲染和剔除。如果在同一個VBO中批量過多的對象,則很難挑選CPU上的對象以跳過渲染該批處理。同時,如果你跳過對cpu的剔除,很多對象將在GPU不可見時處理。如果你爲了更容易在CPU上剔除而瘋狂地跳過批處理,將會有不必要的大量渲染調用。

我已經對現有技術和理論進行了一些研究,以瞭解這些問題在現代圖形中如何解決,但是我一直沒有找到具體的解決方案。我和同事提出的一個想法是將批次限制在距離彼此相對較近的對象上,例如房間內或n個半徑範圍內的所有椅子。這可以通過使用八叉樹來簡化和優化。

有沒有人有任何指針用於現代藝術的現代圖形引擎的現場管理,剔除,配料等技術?

+0

讓我開始說我不懂任何最先進的現代圖形引擎。但是,這聽起來像是一個沒有單一解決方案的問題,相反,它通常可以通過修補和切換多個方法來解決,以提供給定場景的最佳質量/性能。只是因爲質量和性能總是互相排斥,受到壓力。我通常通過使用紋理數組和非靜態架構環境中的非常有用的方法將所有(!)以斜體友好塊(對於您:房間)進行批處理來解決我的繪製調用。 –

回答

5

在互聯網上有很多關於平截頭體和咬合剔除的信息。 它大部分來自遊戲開發者。 這裏的一些文章,將讓你開始的列表:

我的(非常快)渲染的工作原理與此類似:

  1. 收藏:發送所有的道具,要渲染,在渲染器。
  2. Fr c 012 012:渲染器使用多個線程並行地從列表中清除不可見的道具。
  3. 遮擋剔除:現在你可以在CPU上做遮擋剔除(我還沒有實現它,因爲我現在不需要它)。關於如何有效地做到這一點的詳細信息可以在殺戮地帶和孤島危機幻燈片中找到。一種解決方案是從GPU讀回前一幀的深度緩衝區,然後柵格化其上的對象的邊界框以檢查該對象是否可見。
  4. 分裂:由於您現在知道哪些對象實際上必須呈現,因爲它們是可見的,所以您必須將它們按網格分割,因爲每個網格具有不同的材質或紋理(否則它們將合併成單個目)。
  5. 批處理:現在你有一個要渲染的網格列表。你可以對它們進行排序:
    • 通過深度(這可以在道具級別而不是網格級別完成)來保存填充率(如果片段着色器非常簡單,我不建議這樣做)。
    • 通過網格劃分(因爲可能存在多個相同網格的實例並且可以很容易地添加實例)。
    • 通過紋理,因爲紋理開關非常昂貴。
  6. 渲染:遍歷你的分區網格並渲染它們。

而且「Full Frontal Nudity」已經說過:沒有完美的解決方案。