簡體   English   中英

GLSL幾何着色器的性能意外降低

[英]Performance of GLSL geometry shaders unexpectedly slow

我正在嘗試學習如何對GLSL幾何着色器進行編程。 我的測試項目是這樣的:我有N個VBO正在建模“草葉”。 如果沒有着色器,則每個草葉基本上只是具有20個線段的線帶。 我幾乎可以使用N = 10k的刀片使此動畫大致平滑,因此有200,000行。

着色器獲取每個線段並將其吹到以該線段為中心的相同長度的圓柱體,因此草葉現在是具有尺寸的管。 因此,CPU沒有任何變化,但是現在我試圖利用GPU添加更多的幾何圖形,以便為刀片着色。 圓柱體有30個部分,因此有60個三角形,每個葉片1200個三角形。

關鍵是,要使其平滑地動畫,我只能縮小到25個刀片。 那只有3萬個三角形,基本上比以前根本不使用着色器時要處理的幾何少。

它可以在Macbook Pro,Snow Leopard,AMD Radeon HD 6750M上運行。 不知道那是不是一張好牌。

着色器代碼非常簡單-頂點着色器僅具有gl_Position = gl_Vertex。 幾何着色器中正在發生照明:簡單的環境,鏡面反射和漫反射組件,基本上直接來自教程。 片段着色器也類似地簡化了,只是將草顏色乘以從幾何着色器傳遞過來的光強度。

順便說一下,這是OpenGL的舊版本2.1,所以它是GLSL 1.2,因此要使用geo着色器,則需要GL_EXT。 如果相關的話。

同樣,堆棧是在Java之上的JOGL之上,在GLGraphics之上的Processing之上。 如果這是一個因素,我會感到驚訝,除非以某種方式在CPU上模擬了着色器代碼,但我不認為OpenGL會自動為您完成這種工作。

無論如何,這些數字看起來合理嗎,還是我做錯了什么? 我是否不切實際地期望地理着色器能夠創造奇跡?

沒有人曾指責過“幾何着色器”過快。 特別是在增加幾何尺寸時。

您的GS正在繪制一條線,不僅要對頂點數據進行30倍的放大,而且還要對每個新頂點進行光照計算。 這並不是很快,主要是由於缺乏並行性。 每個GS調用必須執行60次光照計算,而不是具有60個單獨的頂點着色器調用並行執行60次光照計算。

您基本上是在幾何着色器中創建一個巨大的瓶頸。

將照明內容放入片段着色器中可能會更快(是的,確實)。

暫無
暫無

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

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