當前位置:編程學習大全網 - 編程語言 - unity中圖形渲染管道什麽意思,怎麽應用

unity中圖形渲染管道什麽意思,怎麽應用

所謂GPU的渲染管線,聽起來好像很高深的樣子,其實我們可以把它理解為壹個流程,就是我們告訴GPU壹堆數據,最後得出來壹副二維圖像,而這些數據就包括了”視點、三維物體、光源、照明模型、紋理”等元素。

在各種圖形學的書中,渲染管線主要分為三個階段:應用程序階段、幾何階段、光柵階段。

1,應用程序階段。

這個階段相對比較好理解,就比如我們在Unity裏開發了壹個遊戲,其實很多底層的東西Unity都幫我們實現好了,例如碰撞檢測、視錐剪裁等等,這個階段主要是和CPU、內存打交道,在把該計算的都計算完以後,在這個階段的末端,這些計算好的數據(頂點坐標、法向量、紋理坐標、紋理)就會通過數據總線傳給圖形硬件,作為我們進壹步處理的源數據。

2,幾何階段。

主要負責頂點坐標變換、光照、裁剪、投影以及屏幕映射,改階段基於GPU進行運算,在該階段的末端得到了經過變換和投影之後的頂點坐標、顏色、以及紋理坐標。簡而言之,幾何階段的主要工作就是“變換三維頂點坐標”和“光照計算”。

問題隨之而來,為什麽要變換頂點坐標?我是這麽理解的,比如妳有壹個三維遊戲場景,場景中的每個模型都可以用壹個向量來確定它的位置,但如何讓計算機根據這些坐標把模型正確的、有層次的畫在屏幕上?這就是我們需要變換三維頂點坐標的原因,最終目的就是讓GPU可以將這些三維數據繪制到二維屏幕上。

根據頂點坐標變換的先後順序,主要有如下幾個坐標空間:Object space,模型坐標空間;World space,世界坐標空間;Eye space,觀察坐標空間;Clip and Project space,屏幕坐標空間。下圖就是GPU的整個處理流程,深色區域就是頂點坐標空間的變換流程,大家了解壹下即可,我們需要關註的是每個坐標空間的具體含義和坐標空間之間轉換的方法。

2.1,從object space到world space

object space有兩層核心含義,第壹,object space中的坐標值就是模型文件中的頂點值,這些值是在建立模型時得到的,例如壹個.max文件,裏面包含的數據就是object space的坐標。第二,object space的坐標與其他物體沒有任何參照關系,這是object space和world space區分的關鍵。world space坐標的實際意義就有有壹個坐標原點,物體跟坐標原點相比較才能知道自己的確切位置。例如在unity中,我們將壹個模型導入到場景中以後,它的transform就是世界坐標。

2.2,從world space到eye space

所謂eye space,就是以攝像機為原點,由視線方向、視角和遠近平面,***同組成的壹個梯形體,如下圖,稱之為視錐(viewing frustum)。近平面,是梯形體較小的矩形面,也是靠近攝像機的平面,遠平面就是梯形體較大的矩形,作為投影平面。在這個梯形體的內的數據是可見的,超出的部分會被視點去除,也叫視錐剪裁。

例如在遊戲中的漫遊功能,屏幕的內容隨攝像機的移動而變化,這是因為GPU將物體的頂點坐標從world space轉換到了eye space。

2.3,從eye space到project and clip space

eye space坐標轉換到project and clip space坐標的過程其實就是壹個投影、剪裁、映射的過程。因為在不規則的視錐體內剪裁是壹件非常困難的事,所以前人們將剪裁安排到壹個單位立方體中進行,這個立方體被稱為規範立方體(CCV),CVV的近平面(對應視錐體的近平面)的x、y坐標對應屏幕像素坐標(左下角0、0),z代表畫面像素深度。所以這個轉換過程事實上由三步組成:

(1),用透視變換矩陣把頂點從視錐體變換到CVV中;

(2),在CVV內進行剪裁;

(3),屏幕映射:將經過前兩步得到的坐標映射到屏幕坐標系上。

2.4,primitive assembly(圖元裝配)和triangle setup(三角形處理)

到目前為止我們得到了壹堆頂點的數據,這壹步就是根據這些頂點的原始連接關系還原出網格結構。網格由頂點和索引組成,這個階段就是根據索引將頂點鏈接到壹起,組成線、面單元,然後進行剪裁,如果壹個三角形超出屏幕以外,例如兩個頂點在屏幕內,壹個頂點在屏幕外,這時我們在屏幕上看到的就是壹個四邊形,然後把這個四邊形切成兩個小的三角形。

現在我們得到了壹堆在屏幕坐標上的三角形面片,這些面片是用於光柵化的。

3,光柵化階段。

經過上面的步驟之後,我們得到了每個點的屏幕坐標值,和我們需要繪制的圖元,但此時還有兩個問題:

(1)屏幕坐標是浮點數,但像素是用整數來表示的,如何確定屏幕坐標值所對應的像素?

(2)如何根據已確定位置的點,在屏幕上畫出線段或者三角形?

對於問題1,繪制的位置只能接近兩指定端點間的實際線段位置,例如,壹條線段的位置是(10.48, 20.51),轉換為像素位置就是(10,21)。

問題2,涉及到具體的畫線和填充算法,有興趣的話可以研究。

這個過程結束後,頂點和圖元已經對應到像素,之後的流程就是如何處理像素,即給像素賦予顏色值。

給像素賦予顏色的階段稱為Pixel Operation,是在更新幀緩存之前,執行最後壹系列針對每個片段的操作,其目的是計算出每個像素的顏色值。在這個階段,被遮擋的面通過壹個被稱為深度測試的過程消除。

pixel operation包含下面這些流程:

(1)消除遮擋面;

(2)Texture operation,紋理操作,根據像素的紋理坐標,查詢對應的紋理值;

(3)Blending,通常稱為alpha blending,根據目前已經畫好的顏色,與正在計算的顏色的alpha值混合,形成新的顏色。

(4)Filtering,將正在計算的顏色經過某種濾鏡後輸出。

該階段之後,像素的顏色值被寫入幀緩存中。

  • 上一篇:老年帽子的編織方法
  • 下一篇:幼兒園中班體育跑教案
  • copyright 2024編程學習大全網