簡體   English   中英

OpenGL:渲染很多多維數據集

[英]OpenGL: Rendering lots of cubes

我正在嘗試創建一個包含單元立方體(或球體)的600x600x600網格。 僅存在一些多維數據集。 因此,基本上,我正在嘗試使類似以下內容的小立方體或小球組成。

3D陰影船體

問題1 :渲染這樣的結構成本很高。 它需要3個嵌套循環(每個循環600次)。 有什么辦法可以解決嗎?

我的想法是將附近的多維數據集合並為一個(八叉樹),因為在我的案例中不會有太多的空白。 但是我想要一個通用的解決方案。 您認為將這樣的場景渲染到上方會花費多長時間(好像是​​250x250x250的場景)?

問題2 :實例渲染與我的問題有關嗎?

注意 :在這里,我將體素表示為一個立方體,而該立方體又需要6個四邊形。

我過去曾經做過體素渲染引擎。 以下是一些我建議的快速優化方法,它們可以為您帶來良好的速度提升:

  1. 使用幾何剔除算法來剔除未渲染的位。 我使用八叉樹,因為它們可以很好地與體素配合使用。
  2. 從頭到尾對可見節點進行排序,並使用某種算法來確定哪些節點根本不可見。 另外,請充分利用遮擋剔除。
  3. 像其他人建議的那樣使用幾何着色器。
  4. 制定LOD方案。 簡而言之,如果可以將兩個多維數據集合並為一個,並且用戶看不到結果,那就去做。 好的LOD方案可以大大減少您正在渲染的數據量。
  5. 請記住,最好的多邊形是根本沒有繪制的多邊形:)。

正確完成這三件事,將為您帶來很大的提升。 之后,可以根據您的需求和要求進行微調。

確實,可以通過將各種多維數據集組合為一個大多維數據集來處理問題1。 體素引擎通常將多個單獨的盒子分組在一起。 那也許是最好的方法。 其次,可以為每個體素以及包含這些體素的塊使用布爾變量,並將其設置為1進行渲染,否則設置為0。 根據您的要求,您將需要一個體素類,一個塊類以及一些其他抽象。

也許創建一個幾何着色器,為網格中的每個點復制一個框。 對智能着色器進行編程,以使其不會輸出背離View的面,也不會輸出相鄰的“活動”框的面。

問題是為幾何着色器提供600 * 600 * 600大小的布爾值。 如果復合“對象”有些堅固,則可能只需要在多維數據集的每一行/列上提供開始和結束位置,因此:1,4,90,345表示使用多維數據集從1填充到4,從90填充到345。

問題1:

我不知道您如何提出3個嵌套循環。 我看到一個600 ^ 3體素的巨大循環。 您要做的最后一件事是逐個渲染每個體素,因為您的GPU是流式多核處理器,並且您的數據幾乎相同,除了空間轉換。 公平地說,這個數字可能有點太高了。 目前,在11ms的渲染時間大約需要64.000個多維數據集,但是如果您具有靜態場景設置,則可能會更快地獲得它。 請參閱: SVO渲染:OpenGL還是自定義渲染器?

您可以做的另一件事是將場景LOD,即僅渲染真正必要的場景。 您是否對遠處的體素感興趣? 如果它們具有亞像素大小,則可以代替渲染四元冒號。

問題2:

與VBO和VAO一樣,實例渲染無疑是解決方案的一部分,但還有其他方法,例如僅發送坐標並在幾何着色器中生成實際幾何。 另請參見http://sol.gfxile.net/instancing.html

如果您有靜態場景,則性能可以再提高近5倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM