999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OpenGL ES的3D圖形繪制管線優化問題

2007-01-01 00:00:00陳雷霆
計算機應用研究 2007年1期

摘要:目前,在嵌入式設備上(如手機)的3D游戲開發總是基于一定的圖形API來進行的。OpenGL ES是為嵌入式系統而開發的3D圖形繪制編程接口。在基于嵌入式的3D游戲開發過程中,由于硬件資源的相對不足,要得到繪制效果較理想的圖形,就需要優化3D圖形繪制過程。采用最新的圖形管線理論,將OpenGL ES的3D圖形管線繪制過程劃分為七個管線繪制部分(這七個部分歸屬于三個繪制階段),分析每個繪制部分的主要工作,在此基礎上針對各個階段提出了相應的優化方法。

關鍵詞:OpenGL ES; 圖形管線 ; 嵌入式3D游戲

中圖法分類號:TP391.4文獻標識碼:A

文章編號:1001-3695(2007)01-0215-03

目前,在嵌入式設備上(如手機)的3D游戲開發總是基于一定的圖形API來進行的,OpenGL ES是其中性能卓越的一種API,它被廣泛地使用在許多手機3D游戲中,如MotoGP2,SpeedGun Stadium,GalacticRealms等。由于當前手機硬件性能相對較低,游戲總是會受到一些軟硬件的限制,影響游戲畫面的繪制效果和表現力。為了增強游戲的表現力,有必要對圖形繪制過程的優化方法進行研究。本文在分析OpenGL ES圖形管線繪制過程的基礎上總結了3D游戲開發過程中相應的優化方法。

1OpenGL ES 3D圖形管線繪制過程

在現實世界中,管線概念的表現方式非常多,如輸油管道、車間流水線、纜車等。一條管線通常包括多個階段,無論其中某個階段速度有多快,管線的整體快慢程度是由管線中最慢的那個階段決定的。在圖形繪制中也存在這種管線結構,最慢的管線階段決定繪制速度,即圖像更新速度。最慢的管線階段稱為瓶頸。瓶頸階段會限制繪制過程中的整個吞吐量,從而影響總體繪制性能,因此它成為優化的主要對象。

圖1是OpenGL ES 3D圖形管線的繪制過程[1]。圖中頂點部分是3D幾何學所處理的頂點世界,像素部分是存儲在幀緩沖里的像素世界。

CPU部分負責圖形管線繪制過程中幾何數據進出的轉換。幾何存儲部分是連接設備驅動內存和圖形內存的橋梁,它負責在處理過程中臨時保存頂點的幾何數據,為后面的處理作準備。OpenGL ES的幾何存儲支持的數據類型有Byte,Short,Fixed,Float[2]。幾何處理器部分負責頂點和紋理坐標的對應轉換。幾何處理器與光柵器之間存在著一種稱之為浮點型數據處理管線的結構,通過它把各種數據類型的坐標值轉換成內部浮點數形式。光柵器要將每一個三角形的邊及其內部區域光柵化,同時要負責圖形管線的像素插值。片段處理器就是分析像素片段的陰影、著色,然后把這些結果放入幀緩沖。紋理存儲就是采用某種格式保存紋理數據。OpenGL ES支持的格式有每像素8位,16位和32位[2]。紋理過濾采用LOD驅動。幀緩沖所處理的圖形數據直接提供給LCD顯示設備所用。外置存儲芯片用于幀緩沖、VBO(Vertex Buffer Object)和紋理數據。OpenGL ES的驅動程序為這三者在外置存儲芯片上分配空間。

23D圖形管線繪制的優化

3D圖形管線繪制的優化包含兩個主要步驟:①對管線的瓶頸位置進行定位;②以某種方式對該瓶頸階段進行優化處理后,如果沒有達到預期的性能目標,就繼續重復步驟①。需要注意的是,瓶頸位置在優化之后有可能還處于優化前的位置。比較理想的狀況是盡可能對瓶頸進行優化,保證瓶頸位置能夠轉移到另外一個階段。在這個階段再次成為瓶頸之前,必須對其他階段進行優化處理。

2.1瓶頸定位

由于優化過程非常耗時,因此要對圖形管線中的每個階段進行最優化處理,這在實際操作中是不可行的。如果對每個階段均進行優化,雖然可以提高一定的性能,但同時會花費開發人員大量的時間,甚至還可能犧牲繪制質量;此外對每個階段都進行優化的另一個缺點,那就是不知道管線的哪個階段是瓶頸。實際上可以通過對瓶頸階段進行優化處理來大幅度提高繪制質量而不影響總體性能。

一種瓶頸定位的方法是進行大量的階段測試。階段測試的一個方法是每測試一次只影響一個階段,如果總的繪制時間受到影響,就可以找到瓶頸位置;階段測試還有一個方法,就是在保持被測階段工作負載的情況下,減少其他階段的工作量,如果性能沒有變化,那么瓶頸所在的位置就是工作量沒有改變的階段。

因此瓶頸定位的方法可轉換為階段測試問題。為了闡述方便,將圖1的七個管線階段粗略劃分為三個階段,即CPU階段(CPU部分)、幾何階段(幾何存儲、幾何處理器部分)和光柵階段(光柵器、片段處理器、紋理存儲和過濾、幀緩沖部分)。

CPU階段的測試。如果當前使用的平臺提供一種具有測量處理器工作負載的功能,就可以使用這個功能來考查當前程序是否使用了或接近100%的CPU處理能力。另一種測試CPU受限的巧妙方法是,將導致其他階段工作量極小甚至不工作的數據向下發送。由于不需要用圖形硬件,因此可以有效地為當前運行程序設置一個速度上限。這樣CPU就成為了瓶頸。

幾何階段的測試(所有階段中最困難的)。因為如果改變這個階段的工作負載,那么其他階段的工作負載也會相應改變。只對幾何階段工作負載有影響的參數是光源類型和數量,如果禁止或移去場景中的所有光源,可使性能提高,那么瓶頸位置就在幾何階段。如果硬件中存在可編程的頂點著色器,就可以簡單地使用頂點程序對每個頂點進行變換,而不需要計算光照,從而可以降低幾何階段的負荷。另外如果在此基礎上性能有所提高,那么瓶頸就在幾何階段。

光柵階段的測試。其最容易且最快,只需要簡單地降低圖像繪制的分辨率即可。由于填充像素的減少,從而減少了光柵階段的工作負載。隨著繪制分辨率的降低,如果總的繪制性能提高了,就可以說圖形管線是填充受限,可以確定瓶頸就在光柵階段。此外還可以通過關閉混合操作和深度緩沖來改變光柵階段的工作負載,從而確定瓶頸位置是否在光柵階段。

2.2優化方法

一旦確定了瓶頸位置,就可以對瓶頸所處的階段進行優化,提高整體性能。在優化過程中,如果實際性能已經接近圖形硬件廠商所宣稱的性能指標,就不需要對管線中的硬件加速部分進行優化[3]。

2.2.1CPU階段的優化方法

對不同的CPU廠商而言,最優化技術通常也不盡相同,下面討論一些通用的優化方法。

(1)避免使用浮點數類型。雖然OpenGL ES支持浮點數,但是當前手機上的CPU還沒有一款是支持浮點數類型的。軟件中的浮點數最終都必須轉換成定點數,否則CPU不能處理,這一轉換過程需要消耗大量CPU資源。由于避免使用浮點數類型,因此也要盡量避免使用除法和某些基本數學函數(如sin,arcsin等),因為它們都可能帶來大量的浮點數類型的數據。對于數學函數,我們可以采用兩種方法來解決:①函數查找表。這樣不需要使用硬件資源來進行計算,其缺點是增加了CPU訪問內存的次數。②使用麥克勞林或泰勒級數的前幾項取得函數的近似值,其缺點是精度可能不夠。

(2)采用更優化的編譯模式。例如基于ARM的CPU,可以選擇兩種編譯代碼模式,即ARM和Thumb。具體選擇哪種編譯模式依靠內存帶寬和內存與CPU之間的總線帶寬決定。ARM是32位指令集,它比運行在32位平臺上的Thumb指令集更快;此外Thumb模式下整型數據為16位,而ARM是32位[1]。

(3)減少條件分支和多重循環。條件分支的開銷非常高,減少條件分支的辦法是采用條件移動指令,如這樣的代碼就有效地減少了分支:re=a>b?choice1: choice2。便多重循環導致高速緩存的性能下降,應盡量避免使用多重循環。

2.2.2幾何階段的優化方法

幾何階段主要負責幾何數據的存儲、變換、光照、裁減、投影、屏幕映射。幾何數據存儲、變換、光照比較容易優化,而剩余部分的優化就比較困難,甚至是不可能的。

(1)采用壓縮圖元方式存儲頂點數據。這樣可以減少數據阻塞,降低內存的使用。例如對于表面法向量來說,不需要使用全浮點型精度,因為全浮點型精度主要用于由字節值表示的明暗效果計算。

(2)使用索引頂點數組。OpenGL ES支持索引頂點數組(調用glDrawArrays函數)和非索引頂點數組(調用glDrawElements函數)[2]。例如,一個三角形需要傳送三個頂點,由兩個三角形組成的四邊形在索引頂點數組中只需要傳送四個頂點,而在非索引頂點數組中需要傳送六個頂點。索引頂點數組中的頂點都是唯一的、不重復的。此外在調用glDrawArrays函數和glDrawElements函數時要注意,調用次數少但每次傳送頂點數量多要比調用次數多但每次傳送頂點數量少快些。

(3)使用頂點緩沖對象VBO。VBO可以避免重復發送存在于系統RAM中的頂點。在OpenGL ES擴展中調用ARB_vertex_buffer_objet來實現VBO。并非所有的硬件都支持VBO,在使用它之前要注意查詢OpenGL ES驅動程序,以確定該硬件對其是否支持。

(4)光照計算的優化。①考慮光源類型。例如平行光源比點光源速度快,點光源要比聚光源速度快。②在計算光照時,需要對模型所有法線進行歸一化處理。③如果把光源或材質的鏡面反射分量設為(0,0,0),將可以避免光照方程中的高光計算,這部分的計算開銷相當高。

2.2.3在光柵階段的優化方法

光柵階段主要包括光柵器、片段處理器、紋理的存儲與過濾、幀緩沖。在這一階段有較多的優化方法,這里只討論部分基本優化方法。

(1) 打開背面裁減開關。對于封閉體和看不到背面的物體,應該打開背面裁減開關,這樣可以將需要光柵化處理的三角形數量減少近50%。

(2) 合理利用Z緩沖器。一種不影響繪制質量的優化技術是在特定時間關閉Z緩沖器,如在清除幀緩沖器之后,不需要進行深度測試也可以直接繪制任何背景圖像。諸如多邊形對齊的BSP樹之類的算法就不需要使用Z緩沖器。合理利用Z緩沖器還有另外一種情況。如果可以保證屏幕上的每個像素都被某個物體覆蓋(如天空),就不需要清除顏色緩沖器,還可以通過犧牲一個比特的深度精度避免對Z緩沖器進行清除。在第一幀,正確地清除Z緩沖器,而且只繪制緩沖器的前面一半,即將深度歸一化的設備坐標重新調節到-1.0~0.0范圍;在第二幀,不用清除Z緩沖器,翻轉觀察方向和深度測試,然后設置深度范圍,1.0為近平面,0.0為遠平面;在第三幀,再次使用-1.0~0.0范圍,隨后每一幀都在這兩個范圍之間切換。這樣,前一幀的Z深度值通常會被在這一幀中繪制的物體所覆蓋,就好像清除了Z深度值[4]。

(3)采用圖形硬件內部的紋理和像素格式。這樣可以避免從一種格式轉換到另外一種格式。當需要更新紋理時,在OpenGL ES中可以使用glTextSubImage2D函數來代替glText ̄Image2D函數,這樣就可以避免內存分配與回收問題[2]。此外還可以采用紋理壓縮技術,在OpenGL ES中可以調用glCompressedTextImage2D函數和glCompressedTextSubImage2D函數來壓縮紋理[2]。壓縮紋理的優點在于使用內存較小,可以提高高速緩存的利用率。

3總結

本文分析了基于OpenGL ES的圖形管線流程,初步討論了各個階段的圖形管線優化方法,為在嵌入式設備上開發表現力更強的3D游戲進行了積極探索。在優化過程中還需要注意,如果不能對最慢的階段作進一步優化,就要使其他階段與最慢階段的工作負載盡可能一樣多,從而保持圖形管線的平衡,這樣并不影響整體性能,還充分利用了硬件資源。在3D游戲開發過程中要充分了解硬件平臺的性能,任何超越硬件特性的優化都是不能實現的。例如,OpenGL ES具有一個VBO的擴展,VBO把數據加載到顯卡的高性能顯存中,這樣大大降低了渲染時間,但是擴展要依賴較新的硬件,不是所有的圖形卡都支持。

綜上所述,圖形管線優化的總體思路是:控制顯存和帶寬使用,保持圖形管線的平衡,充分發揮硬件性能,軟件優化不能超出硬件局限。

參考文獻:

[1]Dave Astle, Dave Durnil. OpenGL ES Game Development[M]. Thomson Course Technology, 2005.95107.

[2]OpenGL ES Common/CommonLite Profile Specification version 1.0.02[DB/OL].http://www.opengles.org/translations/chinese_simple/opengles/ eglspec[1].1.1.pdf,20-040911.

[3]Cok Keith, Roger Corron, et al. Developing Efficient Graphics Software: The Yin and Yang of Graphics[EB/OL]. Course 6 Notes at SIGGRAPH 2000,http://www.sgi.com/software/opengl/advanced ̄00/notes/00_yin_yang.pdf,2000.

[4]Lindholm Erik,Mark Kilgard. A UserProgrammable Vertex Engine[C].Proceedings of SIGGRAPH 2001,2001.149158.

作者簡介:

莫軍(1974),男,碩士研究生,主要研究方向為嵌入式三維游戲引擎相關技術;陳雷霆(1966),男,教授,主要研究方向為數字圖像處理、三維圖形技術。

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 91 九色视频丝袜| 制服丝袜一区| 色九九视频| 重口调教一区二区视频| 亚洲精品桃花岛av在线| 国产乱子伦无码精品小说| 浮力影院国产第一页| 亚洲精品国产综合99| 亚洲三级成人| 激情乱人伦| 五月综合色婷婷| 久久国产av麻豆| 在线观看国产精品第一区免费| 全免费a级毛片免费看不卡| 欧美五月婷婷| 国产亚洲视频免费播放| 波多野结衣久久高清免费| 精品一区二区三区水蜜桃| 这里只有精品在线| 波多野结衣在线se| 一区二区三区四区精品视频| 欧美激情综合一区二区| 国产一区免费在线观看| 国产精品原创不卡在线| 青青网在线国产| 色综合久久88色综合天天提莫| 五月婷婷丁香色| 婷婷综合缴情亚洲五月伊| 免费A级毛片无码免费视频| 成人免费视频一区二区三区 | 国产精品三级专区| 日本免费精品| 夜夜操狠狠操| 久久国产精品嫖妓| 国产乱子伦无码精品小说| 精品成人一区二区| 狠狠色狠狠色综合久久第一次| 欧美人与性动交a欧美精品| a级毛片网| 不卡视频国产| 人妻丝袜无码视频| 国产成人精品一区二区三在线观看| 亚洲国产第一区二区香蕉| 亚洲精品视频在线观看视频| 国内毛片视频| 青草免费在线观看| 高清免费毛片| 精品无码人妻一区二区| 欧美午夜一区| 国产主播在线一区| 91人妻日韩人妻无码专区精品| 青草视频免费在线观看| 国产精品男人的天堂| www.狠狠| 成年女人a毛片免费视频| 国产精品浪潮Av| 国产精品99一区不卡| 一级毛片免费观看不卡视频| 色悠久久综合| 一级毛片免费观看久| 美女被操黄色视频网站| 亚洲男人在线天堂| 人与鲁专区| 黄片一区二区三区| 欧美日韩国产在线播放| 日本午夜精品一本在线观看 | 狠狠亚洲婷婷综合色香| 亚洲动漫h| 九色视频在线免费观看| 精品久久蜜桃| 精品成人一区二区| 亚洲精品视频免费| 亚洲第一色视频| 国产91特黄特色A级毛片| 91九色视频网| 免费在线色| 久久青草精品一区二区三区| 国产噜噜噜| 播五月综合| 国产尤物视频网址导航| 一级全免费视频播放| 视频一本大道香蕉久在线播放|