GPU渲染管線與shader

2022-06-18 10:30:15 字數 1663 閱讀 2875

模型座標空間-世界座標空間-觀察座標空間-螢幕座標空間

其中從觀察空間 到 螢幕空間需要經過3步(cvv單位立方體,規範立方體)

a用透視變換矩陣把頂點從視錐體中變換到裁剪空間(齊次空間,用齊次座標表示);

b在 裁剪空間進行圖元裁剪;(這裡就是視域剔除view frustum culling),然後齊次空間除w把點轉換到cvv中

c螢幕對映:將經過前述過程得到的座標對映到螢幕座標系上

頂點著色程式從gpu 前端模組(暫存器)中提取圖元資訊(頂點位置、法

向量、紋理座標等),並完成頂點座標空間轉換、法向量空間轉換、光照計算等

操作,最後將計算好的資料傳送到指定暫存器中;然後片斷著色程式從中獲取需

要的資料,通常為「紋理座標、光照資訊等」,並根據這些資訊以及從應用程式傳

遞的紋理資訊(如果有的話)進行每個片斷的顏色計算,最後將處理後的資料送

光柵操作模組。

就是處理頂點連線關係(這裡會進行背面剔除back-face culling,以減少頂點)

決定哪些畫素被集合圖形覆蓋的過程

光柵化前,圖形都是連續的,需要通過光柵化把這些連續的圖形轉換為螢幕上對應的畫素點

光柵化後會進行片段操作(片段shader處理這部分)

a 遮擋剔除,消除遮擋面

b 紋理操作texture operation

c 混合 blending,透明處理

d 濾鏡或濾波 filtering ,一種顏色經過某種濾波或濾鏡處理後再輸出

這裡特殊說明下,unity shader 的surf 和自定義光照部分都是在這裡處理的,surf可以處理紋理,而光照在幾何階段猜測只是記錄光照資料,這裡計算光照對顏色的影響

光柵化過程用到的4個緩衝

1 深度緩衝區 z buffer                儲存頂點深度

2 模板緩衝區 stencil buffer      儲存頂點是否處於陰影體內的標識,有的說模板緩衝室深度緩衝的一部分

3 幀緩衝區 frame buffer           儲存深度緩衝和顏色緩衝的混合

4 顏色緩衝區 color buffer         

另外最後會進行個視口裁減

片斷著色程式對每個片斷進行獨立的顏色計算,最後輸出顏色值的就是該片

段最終顯示的顏色。可以這樣說,頂點著色程式主要進行幾何方面的運算,而片

段著色程式主要針對最終的顏色值進行計算。

片段著色程式還有乙個突出的特點是:擁有檢索紋理的能力。對於gpu 而言,

紋理等價於陣列,這意味著,如果要做通用計算,例如陣列排序、字串檢索等,

就必須使用到片段著色程式

片斷和畫素有什麼不一樣?所謂片斷就是所有的三維頂點

在光柵化之後的資料集合,這些資料還沒有經過深度值比較,而螢幕顯示的畫素

都是經過深度比較的。

每個頂點資料都會執行一次頂點程式;每個片段都會執行一次片段程式。

unity shaderlab中alphatest的位置是在fragment函式之後可以阻止最終渲染到幀快取,

stenciltest是在fragment之前可以阻止fragment函式執行

下圖culling depthtest是深度測試(不包括senciltest的說明)

GPU渲染管線

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

固定渲染管線Shader

固定渲染管線是標準的幾何 光照 t l 管線,功能是固定的,它控制著世界 視 投影變換及固定光照控制和紋理混合 t l管線可以被渲染狀態控制,矩陣,光照及採製引數 固定渲染管線一般用於shader在老顯示卡無法顯示時的fallback 在shader的subshader都無法使用的時候呼叫 命令小括...

Shader筆記(渲染管線)

頂點處理,面處理,光柵化,畫素處理 本地座標系 以模型自己為中心。比如旋轉 胳膊的擺動,等是以本地座標係為參考。觀察座標系 以攝像機作為原點。觀察座標系轉投影座標系 將每個物體模型的位置從觀察者所在的座標體系中,轉到觀察者投影平面上。包括 面組裝 面擷取 面剔除 面組裝 通常採用 strip 面擷取...