渲染管線 學習摘錄

2021-10-17 03:20:22 字數 3321 閱讀 2091

本部落格為個人學習摘錄,內容摘錄自知乎:細說圖形學渲染管線

圖形渲染管線是實時渲染的核心元件。渲染管線的功能是通過給定虛擬相機、3d場景物體以及光源等場景要素來產生或者渲染一幅2d的影象。

將物體3d座標轉變為螢幕空間2d座標

為螢幕每個畫素點進行著色

頂點資料用來為後面的頂點著色器等階段提供處理的資料。是渲染管線的資料主要**。送入到渲染管線的資料報括頂點座標、紋理座標、頂點法線和頂點顏色等頂點屬性

為了讓opengl明白頂點資料構成的是什麼圖元,我們需要在繪製指令中傳遞相對應的圖元資訊。常見的圖元包括:點(gl_points)、線(gl_lines)、線條(gl_line_strip)、三角面(gl_********s)。

頂點著色器主要功能是進行座標變換。將輸入的區域性座標變換到世界座標、觀察座標和裁剪座標

雖然我們也會在頂點著色器進行光照計算(稱作高洛德著色),然後經過光柵化插值得到各個片段的顏色,但由於這種方法得到的光照比較不自然,所以一般在片段著色器進行光照計算

曲面細分是利用鑲嵌化處理技術對三角面進行細分,以此來增加物體表面的三角面數量,是渲染管線乙個可選的階段。

它由外殼著色器(hull shader)、鑲嵌器(tessellator)和域著色器(domain shader)構成,其中外殼著色器和域著色器是可程式設計的,而鑲嵌器是有硬體管理的。我們可以借助曲面細分的技術實現細節層次(lod)的機制,根據與攝像機的距離來進行鑲嵌,使得離攝像機越近的物體具有更加豐富的細節(第乙個lod通常稱為lod 0,代表最高程度的鑲嵌),而遠離攝像機的物體具有較少的細節,使得每個三角形的尺寸都小於1個畫素。

鑲嵌(tessellation)是指把表面分割為一組離散多邊形的過程,這些多邊形通常是三角形或四邊形。三角化(triangulation)專指把表面鑲嵌為三角形。

遊戲引擎會用使用動態鑲嵌技術來處理可擴充套件網格(如地形、水面),實現動態鑲嵌技術有兩種策略:1.將網格以高度場(height field)來表示,而高度場則在某種柵格模式上定義。2.漸近網格(progressive mesh)相關文獻

幾何著色器也是渲染管線乙個可選的階段。我們知道,頂點著色器的輸入是

單個頂點(以及屬性), 輸出的是經過變換後的頂點。

與頂點著色器不同,幾何著色器的輸入是完整的圖元(比如,點),輸出可以是乙個或多個其他的圖元(比如,三角面),或者不輸出任何的圖元。幾何著色器的拿手好戲就是將輸入的點或線擴充套件成多邊形

圖元組裝將輸入的頂點組裝成指定的圖元。

圖元組裝階段會進行裁剪和背面剔除相關的優化,以減少進入光柵化的圖元的數量,加速渲染過程

在光柵化之前,還會進行螢幕對映的操作:透視除法和視口變換。關於透視除法和視口變換到底屬於流水線的哪個階段並沒有乙個權威的說法,某些資料將這兩個操作歸入到圖元組裝階段,某些資料將它歸入到光柵化過程,但這對我們理解整個渲染管線並沒有太大的影響,我們只需要知道在光柵化前需要進行螢幕對映就可以了,所以我們這裡將螢幕對映放到了圖元組裝過程。這兩個操作主要是硬體實現,不同廠商會有不同的設計。

經過圖元組裝以及螢幕對映階段後,我們將物體座標變換到了視窗座標。光柵化是個離散化的過程 :將3d連續的物體轉化為離散螢幕畫素點的過程。包括三角形組裝三角形遍歷兩個階段。光柵化會確定圖元所覆蓋的片段,利用頂點屬性插值得到片段的屬性資訊,然後送到片段著色器進行顏色計算,我們這裡需要注意到片段的是畫素的候選者,只有通過後續的測試,片段才會成為最終顯示的畫素點。

片段像是培訓過程中的畫素,把乙個片段寫進最終的幀緩衝前,需要進行多道測試。

片段著色器在directx中也稱為畫素著色器(pixel shader)。片段著色器用來決定螢幕上畫素的最終顏色。在這個階段會進行光照計算以及陰影處理,是渲染管線高階效果產生的地方。

管線的最後乙個階段是測試混合階段。測試包括裁切測試、alpha測試、模板測試和深度測試。沒有經過測試的片段會被丟棄,不需要進行混合階段,經過測試的片段會進入混合階段。

測試混合階段雖然不是可程式設計階段,但是我們可以通過opengl或directx提供的介面進行配置,定製混合和測試的方式。

半透明物體的繪製需要遵循畫家演算法(painter algorithm)由遠及近進行繪製,因為半透明的混合跟物體的順序有嚴格的對應關係。在繪製半透明物體之前,我們可以按照距離遠近對場景中的物體進行嚴格排序,然後從後往前繪製。

但是這種做法的時間開銷很大、實現很複雜且並不適用於一些複雜的情況(比如幾個半透明幾何體互相鑲嵌),所以渲染半透明幾何體更通常使用oit((order-independent transparency),oit在光柵化後以畫素為單位對幾何形進行排序,它需要在進行排序和混合之前儲存所有的片段(fragments)以獲得精確的渲染效果。

OpenGL ES渲染管線

渲染管線 graphics pipeline 在 opengl es 1.0 版本中,支援固定管線,而 opengl es 2.0 版本不再支援固定管線,只支援可程式設計管線。什麼是管線?什麼又是固定管線和可程式設計管線?管線 pipeline 也稱渲染管線,因為 opengl es在渲染處理過程中...

opengl渲染管線

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。首先要知道幾個opengl的術語 渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 verte...

GPU渲染管線

3 光柵化階段 4總結 主要是為了得到三維頂點的法線,紋理等資料資訊 但是不能夠 幾何階段這個座標系轉化如下 這個階段主要做的事情事頂點著色器 模型變換,檢視變換,頂點著色 模型變換 將建模座標系轉化為世界座標系,相當於以物體為中心轉化為以世界為中心的轉化,可以理解為為模型統一乙個座標系 檢視變換 ...