GPU:玩3D遊戲的必備

除了 CPU(中央處理器)以外,SoC(System On a Chip:片上系統)另一個重要的組成部分是圖像處理單元(Graphical Processing Unit),就是俗稱的 GPU。

大家或許都知道玩 3D 遊戲少不了它,但具體發揮什麼作用也許說不清楚,這回我們就來揭開 GPU 的神秘面紗。

3D 模型

GPU 專門用於快速完成一些特定類型的數學運算,特別是對於浮點、矢量和矩陣的計算,能將 3D 模型的信息轉換為 2D 表示,同時添加不同的紋理和陰影效果,所以 GPU 在硬件裡也是比較特殊的存在。

GPU:玩3D遊戲的必備

3D 模型是由許許多多小三角形組成的,通過 X、Y、Z 座標定義每個三角形的頂點。實際處理中,小三角形的頂點會相互重合,如果一個複雜的模型由 500 個小三角形組成,最後需要定義的頂點數並沒有 1500 個那麼多。

而要將一個抽象的 3D 模型展現出來,三種要素不可缺少:位移、旋轉(三軸)和縮放,所有這些操作統稱為轉換(transformation)。為了不陷入複雜繁瑣的數學運算,處理轉換(transformation)最佳的方式就是運用 4x4 的矩陣。

從 3D 建模到最終顯示在屏幕上,GPU 渲染場景使用的是流水線操作。早些時候流水線操作是固定不能作任何改動的,整個操作由讀取三角形的頂點數據開始,接著 GPU 處理完後進入幀緩衝區(frame buffer),準備發送給顯示器。GPU 也能對場景進行某些特定效果的處理,不過這些都是由工程師設計固定好的,能提供的選項很少。

可編程著色器(Programmable shaders)

在 Android 仍在萌芽之時,桌面級的 GPU 就開始可以對流水線部分的操作進行編程。隨著 OpenGL ES 2.0 標準的推出,移動版的 GPU 也開始支持可編程操作,這些可編程的部分被稱作著色器(shaders)。

最重要的兩個著色器是頂點著色器(vertex shader)和片段著色器(fragment shader)。每個頂點都會調用一次頂點著色器,所以在渲染一個三角形時頂點著色器需要被調用三次;而片段著色器,我們可以簡單的將每個片段(fragment)想象成屏幕上的每一個像素點,因此每生成一個像素片段著色器就被會調用一次。

GPU:玩3D遊戲的必備

兩個著色器充當不同的角色,頂點著色器主要負責將 3D 模型的數據轉化為現實世界中的位置以及紋理貼圖或者光源,再進行轉換(transformation);片段著色器則用於為每個像素設置相關的顏色。簡單一點的說明:頂點著色器就是處理頂點相關的信息,片段著色器就是處理畫面的顏色信息。

仔細觀察你會注意到每個頂點的處理都是相互獨立的,同樣每個片段的處理也是如此,這意味著 GPU 能夠並行運行著色器,事實上 GPU 也是這麼幹的,絕大多數的移動 GPU 都有多個著色器核心(可編程執行著色器功能的獨立單元稱之為著色器核心),至於 GPU 廠商宣稱對於著色器調用優於別家則屬於市場營銷的問題了。


分享到:


相關文章: