本主題與任何優化問題一樣,受到很大沖擊,但我無法找到我想要的東西。OpenGL低級性能問題
很多教程,甚至SO問題都有類似的提示;通常覆蓋:
- 使用GL面剔除(OpenGL的函數,而不是現場邏輯)
- 僅發送1點矩陣到GPU(projectionModelView組合),因此每個模型減小MVP計算從每個頂點到一次(因爲它應該是)。
- 使用交錯頂點
- 儘量減少多達GL調用越好,一批酌情
,可能幾個/許多其他問題。我(出於好奇的原因)使用幾個頂點緩衝區在我的應用程序中渲染了2800萬個三角形。我已經嘗試了所有上述技術(據我所知),並且幾乎沒有收到性能改變。
雖然我在我的執行過程中接收到大約40FPS的數據,但這並不是問題,我仍然對這些優化的「提示」實際使用的位置感到好奇嗎?
我的CPU在渲染過程中空轉大約20-50%,因此我假設爲我是用GPU來提高性能的。
注:我期待到gDEBugger此刻
跨張貼在Game Development
非常好!謝謝。 – 2011-03-09 10:36:25
非常好的答案。有一個問題,在你對第2點的回答中,我有點困惑。我比較了着色器內部具有「model * projection * view」的差異(因爲統一變量,每次模型更改時發送模型視圖);與每個模型更新的單個統一矩陣變量(模型視圖投影)相比較,該模型由CPU而不是每個頂點計算(一次)。當然,這會節省很多計算? – dcousens 2011-03-09 11:25:45
@Daniel:你通常不會在着色器中計算MVP矩陣。你所做的是首先執行計算modelview_position = MV * vertex_position,然後clip_position = P * modelview_position。這背後的原因是,對於某些算法,您需要模型視圖中轉換的頂點位置,而不僅僅是整個投影過程的最終結果。此外,頂點法線僅由MV的逆轉置來轉換,而不是完整的MVP^T^-1,所以這是另一個原因:如果要實現光線良好,則需要這些轉換後的法線。 – datenwolf 2011-03-09 11:33:00