2009-08-17 11 views
25

我一直在嘗試執行一些OpenGL ES性能優化,試圖增加我能夠在iPhone應用程序中呈現的每秒三角形數量,但是我碰到了一堵磚牆。我已經嘗試將我的OpenGL ES數據類型從固定值轉換爲浮點值(根據Apple's recommendation),交錯我的頂點緩衝區對象,並儘量減少繪圖狀態的變化,但這些變化都沒有改變渲染速度。無論如何,我似乎無法在運行3.0操作系統的iPhone 3G上將我的應用程序推到32萬個三角形以上。根據this benchmark,我應該能夠在這個硬件上打出687,000個三角形/ s,並使用我正在使用的平滑着色。在我的測試中,當我在Instruments中運行OpenGL ES性能工具以對抗運行設備時,我看到統計「Tiler Utilization」在渲染我的基準測試時達到近100%,但「Renderer Utilization」僅爲達到約30%。這可能提供了顯示過程中瓶頸的線索,但我不知道這些值是什麼意思,並且我沒有找到任何文檔。有人能夠很好地描述iPhone OpenGL ES儀器中的這些數據和其他統計數據嗎?我知道iPhone 3G中的PowerVR MBX Lite是tile-based deferred renderer,但我不確定該架構中的Renderer和Tiler之間會有什麼不同。Tiler Utilization統計在iPhone OpenGL ES儀器中的含義是什麼?

如果它有任何幫助,(BSD許可的)源代碼到這個應用程序is available如果你想自己下載和測試它。在當前的配置中,每次載入新的分子結構並輸出三角形到控制檯時,它都會啓動一個基準測試。

+0

你的三角形有多大?我認爲其中的一個統計數據更多的是關於#個像素,另一個關於三角形的數量。如果縮小屏幕以減少屏幕填充,相對利用率數字是否會發生變化? – 2009-08-17 12:59:12

+1

這取決於我加載的模型,但它們往往很小。無論模型的縮放級別如何,數字似乎都保持不變。另外,我嘗試將OpenGL視圖大小降低到現在的一半,但沒有效果,似乎排除了填充率限制。 – 2009-08-17 14:24:08

回答

25

瓦楞紙利用率和渲染器利用率百分比分別測量頂點和碎片處理硬件的工作週期。在MBX上,Tiler利用率通常隨着發送到GPU的頂點數據量而變化(就頂點數量和每個頂點發送的屬性大小而言),並且碎片利用通常隨着透支和紋理採樣而增加。

在你的情況下,最好的辦法是減少你發送的每個頂點的大小。對於初學者,我會嘗試按顏色對原子和鍵進行分類,並使用常量顏色而不是數組發送每個分箱。如果適當縮放,我還建議調查短褲是否適合您的位置和法線。在這種情況下,如果按比例縮放以提供足夠精度的短褲未覆蓋您需要的範圍,則可能還必須按位置放置。這些技術可能需要額外的繪圖調用,但我懷疑頂點吞吐量的改進將超過額外的每繪製調用CPU開銷。

請注意,爲確保每個頂點屬性在32位邊界上開始,這意味着如果將它們切換爲短路,則應該將位置和法線填充到4個組件,這通常是有益的(在MBX和其他位置)。 MBX平臺的特性也使得在這種情況下,您希望在調用glVertexPointer時實際包含該位置的W分量。

你也可以考慮爲你的多邊形數據,特別是球體追求像DOT3這樣的替代光照方法,但是這需要特別小心,以確保你不會讓你的渲染片段綁定,或無意中發送更多的頂點數據之前。

+2

這與我第一次提問時的經驗一致。我將頂點數據和普通數據縮減爲短褲,用附加組件填充以達到32位邊界,並將渲染性能提高了30%。剔除背景和調整深度測試增加了10%。我會看看色彩分檔,看看有什麼影響。感謝您的詳細回覆。 – 2009-08-22 18:11:28

+1

我有一個愚蠢的問題.....動詞「bin」在整個Pivot的答案中使用的含義是什麼? – 2010-03-09 03:29:02

+3

@Andrew Garrison:在這種情況下,它意味着對某種類型的項目進行分組。當他說「按顏色分類你的原子和鍵」時,他的意思是我應該將所有共享相同顏色的項目的頂點進行分組,然後僅提交那些顏色的項目。這避免了必須爲每個頂點指定一種顏色,從而減少了正在發送的幾何圖形的大小。 – 2010-03-30 01:23:29

4

很好的回答@Pivot!作爲參考,this Apple doc定義了這些術語:

  • 渲染器利用率%。 GPU花費在執行碎片處理的時間百分比。
  • 鋪布機利用率%。 GPU花在執行頂點處理和平鋪上的時間百分比。
  • 設備利用率%。 GPU花在做任何平鋪或渲染工作上的時間百分比。
相關問題