2012-12-18 66 views
2

我已經讀過很多次了,從三角形到三角形條或三角形風扇的幾何合併可以提高3D渲染的性能,因爲較少的頂點需要處理等等......在VBO的使用環境中,所有這些考慮因素如何相關,索引渲染?剝離劑技術是否可以提高性能?

例如,我有一個由三角形組成的原始球體。我有VBO,我只存儲唯一的頂點,我有VBO(綁定到GL_ELEMENT_ARRAY_BUFFER),我存儲索引從頂點構建基元。所有渲染都通過glDrawElementsInstanced()完成。應用某些剝離技術並在啓用基元重新啓動的情況下將我的基元渲染爲GL_TRIANGLE_STRIP後,是否會獲得任何性能提升?

該文檔說,OpenGL流水線在所有頂點操作之後和光柵化之前組裝基元。正如我所能猜到的,這意味着驅動程序首先調用所有頂點的頂點(幾何等)着色器,然後纔開始使用索引數組來獲取三角形。如果確實如此,則剝離可能會降低進程速度,因爲將會應用對原始重新啓動的額外檢查。

我試圖找到一些分離器庫,但是我發現在幾年前我發現了所有的分離器庫。所以人們突然失去了對這個領域的興趣...

考慮到所有這些考慮,沒有必要在剝離。我是對的還是錯過了一些重要的東西?是否需要在現代硬件上剝離?

回答

2

一般來說不,你不會從tri-strips中獲得優勢。現代硬件期望索引數據,併爲此進行了優化。

這並不是說索引可以隨機訪問 - 當數據被緩存時,位置很重要。所以按照條形碼排列三角形可能會有所改進。

性能也會有所不同,這取決於實際花費多少時間來擔心三角形設置和頂點處理,以及實際着色有多少。

就像所有東西一樣 - 描述你的表現,看看你自己的情況有什麼作用,但是我沒有因爲PS2而剝去三角形。

+0

謝謝。你能指點我一些關於生成好的索引數組的東西嗎?例如,我有一個三角形的湯,需要考慮數據的局部性來消除所有重複的三角形。有沒有什麼好的算法,或者最好的辦法是做脫衣服並獲得當地性? –

+3

@OlegTitov誠實地說,我們不會爲我們的數據做任何事情。我懷疑我們只是偶然得到足夠的地點,因爲導出的模型數據完全是隨機的,這很少見。除非我知道那裏存在真正的性能瓶頸,否則我甚至不會去想它。 – JasonD

+2

@JasonD:除此之外,如果您確實需要本地化您的數據,那麼很容易:將面部填充到八叉樹中並將其寫入深度優先遍歷的樹中。 – datenwolf