圖形學筆記:光柵化圖形管線

圖形管線是目前使用最爲廣泛的渲染方式。

graphics pipeline

圖形管線

這裏寫圖片描述

圖形管線中,頂點處理將3D的頂點轉換到屏幕2D空間上,光柵化尋找每個圖元對應的像素生成未着色的片段(fragments),片段處理步驟將每個片段着色,最後混合每個片段生成最終顯示的圖像。

更形象的幾張圖用來幫助理解,從中可以看到每一個操作的輸入和輸出。

這裏寫圖片描述

這裏寫圖片描述

頂點處理

在頂點處理中,主要用到的技術是座標變換。

vertex

經過多次座標變化,物體從世界座標系中最終變換到2D的屏幕上。

這裏寫圖片描述

其間,還需要剔除視野之外的物體。

光柵化

屏幕是像素點陣組成,而變換得到的屏幕空間仍然是連續的。光柵化就是將連續空間分配到每個離散像素的過程。

直線

對於直線來說,根據像素中點決定哪個像素在直線上:

line

三角形

對於三角形,使用質心座標系計算每個像素的(α,β,γ) 值,然後進行插值處理。

triangle

片段處理

fragment

在光柵化步驟得到的片段是沒有顏色的,在片段處理階段給像素着色。

抗鋸齒

鋸齒的根本原因在於頻譜混疊,解決辦法是超採樣和使用重建濾波器。

着色

着色主要考慮的是光。和光線追蹤中的光照模型一樣,要考慮環境光、漫反射光和鏡面反射光。

每個像素處的顏色爲:

c=cr(ca+clmax(nl))+cl(hn)p

其中cr 是每個像素處的紋理特性。這個值可以由頂點顏色插值得到,也可以查詢紋理圖得到。

紋理映射

紋理映射的目的是爲了得到每個像素的紋理值。三角形的每個頂點需要記錄紋理圖中的查詢座標,然後通過數值插值得到每個像素的紋理圖座標,最後查詢紋理圖得到該像素的紋理信息。這些紋理信息帶入到上面的光照模型中可以得到最終的光照信息。

值得注意的是,在插值的時候會有一個問題:本來應該在3D世界座標系上進行插值,但是現在的做法是在屏幕空間上插值,這樣會導致透視錯誤。這一步需要引入透視校正,具體做法就是給(α,β,γ) 座標做一次校正再去插值。

和光線追蹤類似,在圖形流水線中也要考慮鏡面反射和陰影。這兩個效果分別通過環境貼圖和陰影貼圖來實現的。

環境貼圖的做法是,根據每個像素處的法線和入射光方向,計算反射光的方向,直接在環境貼圖中查詢。

environment maps

陰影貼圖的做法是先由光源處計算生成陰影貼圖,然後使用相同的座標變換得到每個頂點的深度,把這個深度和陰影貼圖對比,以此判斷這個頂點是否是陰影。

混合

上面得到的着色片段還是帶有深度信息的,根據這些深度信息最終確定每個像素的值,深度小的片段最終才能顯示在屏幕上。主要算法是z-buffer算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章