GPU 圖形繪製管線——讀書筆記之《gpu程式設計與cg語言之陽春白雪下里巴人》
GPU 圖形繪製管線
本章描述GPU渲染流程和實時繪製技術的基本原理,由圖形繪製管線到各個階段的工作和原理自頂向下。比較偏向於概念科普,所涉及到的知識點由下圖顯示:
如上圖所示,GPU渲染流程可概括為:應用程式 -> 幾何 -> 光柵
- 應用程式階段:使用高階程式語言進行開發,主要和CPU、記憶體打交道
- 幾何階段:主要負責頂點座標變換、光照、裁剪、投影以及螢幕對映
- 光柵階段:基於幾何階段資料,為每個畫素計算顏色值
幾何階段
這個階段的工作為的是將現實世界人類所理解的3D轉換為計算機可以理解的2D資料,繪製在螢幕上形成3D效果
流程如下圖所示:
-
從object到world:
-
從world到eye:eye space以相機為原點,由視線方向、視角和遠近螢幕組成梯形體——視錐(viewing frustum),超出這個梯形體的資料會被裁剪(frustum culling)![image-20211031173337514](/Users/zxin/Library/Application Support/typora-user-images/image-20211031173337514.png)
-
從eye到project & clip:
-
投影:用透視變換矩陣把頂點從視錐體中變換到裁剪空間的 CVV 中;
-
圖元裁剪;
-
螢幕對映:將經過前述過程得到的座標對映到螢幕座標系上。
-
-
Primitive Assembly && Triangle setup:根據索引將頂點連線組成線、面,得到一堆在螢幕座標上的三角面片,用於光柵化
光柵化
- Rasterization
- 將浮點型別的螢幕座標值確定為整數型別的畫素值(四捨五入?)
- 根據畫素點繪製線、面(DDA、Bresenham;多邊形填充演算法、邊界填充演算法)
- Pixel Operation
- 消除遮擋面
- 紋理操作
- 混色(Blending):alpha值(透明度),需要利用z buffer對物體進行排序
- Filtering
補充緩衝區概念:
- Z Buffer:存放深度資料,判斷空間點的遮擋關係,z值不一定是線性變化的
- Stencil Buffer:模版緩衝區,用於做記號,例如存放1表示該畫素點處於陰影體
- Frame Buffer:幀緩衝區,用於存放顯示輸出的資料,一般是畫素顏色值(對於集顯,存放在記憶體中)
最後想記錄一下自己在這本書開頭看到的一段話:
Alice 羞澀地說:“呲牙貓,請問你能告訴我應該走哪條路嗎?”呲牙貓說: “這取決於你想去哪兒。”Alice 說:“我不怎麼介意到哪兒去。”呲牙貓回答說: “那你走哪條路都可以”Alice 說:“只要我能到某個地方”呲牙貓說:“只要你 走的足夠遠,你肯定能到某個地方”。
-------Lewis Carroll 的 Alice’s adventures in Wonderland 借用上面的一句話,只要你走的足夠遠,你肯定能到某個地方。加油!
最近受外部環境和自身心情影響,處於一段非常的焦慮的時期,以至於不敢於去嘗試自己感興趣的事情、不願走出舒適圈。當我看到這段話的時候,內心被勇氣填滿——或許是時候做出一些改變了。正如康大在本章開頭寫下的“欲登高而窮目,勿駐臺於浮沙”。感謝作者給予正處於浮躁與低迷的我力量與指引。