今天過年回家了,不過要準備面試,認真學習下《Shader入門精要》因爲裏面不單涉及到shader的知識,還有一些渲染的知識,對我來說很有幫助。
渲染流水線:
渲染流水線的目的是把場景從3維空間轉化到2維空間,並最終在屏幕上顯示的過程。之所以稱之爲流水線,是因爲渲染有並行性,每個渲染圖元可以並行處理,相互之間沒有必然的前後順序。渲染流水線的過程分爲:應用階段,幾何階段,光柵化階段。
應用階段:
應用階段是由CPU負責處理的,主要目的是得到模型,光源,攝像機位置和視錐體,材質,紋理,shader等,最終輸出渲染圖元。
幾何階段:
主要目的是把模型的遊戲座標空間轉化爲屏幕空間座標。幾何階段細分爲:
1 頂點着色器:遊戲座標轉化爲齊次裁剪座標,頂點着色,以及紋理座標。
2 曲面細分着色器:細分圖元。
3 幾何着色器:執行逐片元的着色操作。
4 裁剪:將不在攝像機範圍的頂點裁剪掉,部分在視野範圍內的進行裁剪得到新的頂點。
5 屏幕映射:圖元從裁剪座標變換到屏幕座標。
光柵化階段:
主要目的是決定哪些渲染圖會被繪製在屏幕上,並對這些頂點進行座標,顏色插值,最終得到要在屏幕上繪製的每個像素的信息。光柵化階段細分爲:
1 三角形設置:光柵化一個三角形網格,得到它的3條邊的邊界像素座標信息,爲下一步做準備。
2 三角形遍歷:遍歷每一個像素被哪些圖元所覆蓋,被覆蓋就生成一個片元。
3 片元着色器:片元着色器的輸入是從頂點着色器輸出插值得到的數據,它的最重要操作是紋理採樣。
4 逐片元操作:進行深度測試,模板測試等決定片元的可見性。對片元和已存在的顏色進行混合。
Draw Call:
Draw Call其實是一個命令,是CPU通知GPU執行渲染的命令,這個命令包含了一個渲染圖元列表。GPU收到這個圖元列表後從顯卡緩存中找到數據,並傳入渲染流水線。
渲染圖元:
最基本的圖形渲染元素,比如點,線段,三角網格這些。
片元:
光柵化後的產物,它包含了像素位置,深度,顏色,法線信息,紋理座標等。