計算機圖形學筆記---GPU圖形繪製管線

暑假到啦,大三博主選了可視化方向,就想着在暑假提前進行學習啦。而且哦,博主前幾天偶然看到了一個研究生小姐姐寫的關於shader的特別棒的博客教程,簡直像個天使!博主覺得如果自己在學習過程中記錄下的筆記也能幫助到其他人,給大家一個大致的框架與總結,那就再好不過了。所以,出於拋磚引玉的本意,博主覺得不能這樣懶啦!要更博,努力記錄下重點,同時也能激勵下自己嘛φ(>ω<*) 好的,我們一起加油!
呃作爲學習筆記的博客在排版上可能不會很美觀,圖片也不會很有趣,(畢竟博主看著作要消耗很多時間qwq)但文字都是乾貨,其中還有一些自己的理解。


圖形繪製管線 分爲三個主要階段:
應用程序階段——用高級編程語言進行開發,主要和CPU和內存打交道,執行的有碰撞檢測、場景圖建立、空間八叉樹更新、視錐裁剪等經典算法。在該階段末端,幾何體數據(頂點座標、法向量、紋理座標、紋理等)通過數據總線傳遞到圖形硬件(時間瓶頸)
幾何階段——主要負責頂點座標變換、光照、裁剪、投影以及屏幕映射,該階段末端可以得到經過變換和投影后的頂點座標、顏色、以及紋理座標。
光柵階段——基於幾何階段的輸出數據,爲像素正確配色,繪製完整圖像 進行的都是單個像素的操作,每個像素的信息存儲在顏色緩衝器中
注意:光照計算屬於幾何階段,因爲涉及視點、光源、物體的世界座標;
霧化以及涉及物體透明度的計算屬於光柵階段,因爲都需要深度值信息(在幾何階段計算從而傳遞到光柵階段)

  • 幾何階段

座標空間(類型)——模型座標空間、世界座標系空間、觀察座標空間、屏幕座標空間

從object space到world space(必須與一個固定的座標原點進行參照)

object space coordinate 是模型文件中的頂點值,建模時得到;與其他物體無參照關係
從object space coordinate到world spacecoordinate 轉換由一個四階矩陣控制——world matrix
光照計算在世界座標中進行
注意:頂點法向量在模型文件中屬於 object space,在GPU的頂點程序中必須將法向量轉換到world space中才行,其轉換矩陣是world matrix的轉置矩陣的逆矩陣

從world space到eye space

*在計算機中每次只能從唯一的視角出發渲染物體
eye space 以視點或相機爲原點,由視線方向、視角和遠近平面共同組成一個梯形體的三維空間,稱之爲視錐(viewing frustum)
梯形體較小的近平面是投影平面;梯形體較大的遠平面
此梯形體中所有頂點數據可見,超出之外的場景數據會被視點去除(frustum culling視錐裁剪) 裁剪clip

從eye space 到project and clip space

多邊形裁剪在CVV中進行;投影與剪裁的先後?
CVV(canonical view volume)規範立方體–一個單位立方體,對角頂點分別是(-1,-1,-1),(1,1,1)
它的近平面的x,y座標對應屏幕像素座標,z座標則代表畫面像素深度
兩個空間轉換的步驟——
1.用透視變換矩陣把頂點從視錐體中變換到裁剪空間的CVV中—這纔是所說的投影,主要有正投影(平行投影)和透視投影
2.在CVV中進行圖元裁剪
3.屏幕映射:將前述過程得到的座標映射到屏幕座標系上
當一個圖元 (圖元指的是圖形數據,所對應的就是繪圖界面上看得見的實體)完全位於視體內時,可以直接進入下一個階段;完全在外部的被剔除;對部分位於視體內的進行裁剪

對裁剪算法的理解——爲減少需要繪製的頂點個數,而識別指定區域內或指定區域外的圖形部分的算法,主要包括:視域剔除、背面剔除、遮擋剔除、視口裁減等
Primitive Assembly 圖元裝配——將頂點根據原始的連接關係還原出網格結構。
網格由頂點和索引組成,在之前的流水線中是對頂點的處理,這裏是根據索引將頂點鏈接在一起,組成線、面單元。然後對超出屏幕的三角形進行裁剪(處理三角形的過程Triangle Setup)
三角面片的法向量朝向視點(法向量與視點方向的點積爲正)——正面!若是反面,則進行背面剔除
最後得到一堆在屏幕座標上的三角面片(用於做光柵化的)

- 光柵化階段

光柵化:決定哪些像素被集合圖元覆蓋的過程(將頂點以及繪製圖元對應到像素)
點的屏幕座標值(浮點數)四捨五入得到像素位置(整數點)

那如何處理像素?給其賦顏色值呢?
Pixel Operation(Raster Operation)— 在更新幀緩存前,執行最後一系列對每個片段的操作;目的是計算出每個像素的顏色值 在這個階段,被遮擋面通過深度測試消除
所做的工作包含——
1)消除遮擋面
2)Texture operation 紋理操作 根據像素的紋理座標查詢對應紋理值
3)Blending混色 目前顏色+正計算的顏色的透明度Alpha(alpha混合技術 0爲透明)
4)Filtering 將正在算的顏色經過某種濾波或者濾鏡輸出==經過一種數學運算後變成新的顏色值

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

這裏寫圖片描述

Z Buffer(depth buffer)深度緩衝區 存放深度值(視點到每個像素所對應的空間點的距離衡量)
接近眼睛的Z值爲0.0,遠裁減面上爲1.0 可以用其來判斷空間點的遮擋關係
在透視投影中同一圖元相鄰像素的Z值並不是線性關係,非線性程度隨空間點到視點增加越發明顯,Z值決定了物體之間的相互遮擋關係
Z-fighting(flimmering)——沒有足夠的精度,兩個相距很近的物體會出現隨機遮擋的現象

Stencil Buffer 模板緩衝區 通常附加到z buffer中,用來做記號 eg.在一個像素的Stencil Buffer中存1,表示該像素對應空間點處於陰影體(shadow volume)中

Frame Buffer 幀緩衝器——用於存放輸出數據,一般是像素顏色值 在顯卡或內存上;有時被認爲是顏色緩衝器和Z Buffer的組合

發佈了32 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章