1. 程式人生 > >unity shader:渲染流程

unity shader:渲染流程

渲染流水線:是cpu和gpu配合渲染一幀的過程,主要分為應用階段,幾何階段以及光柵化階段。

應用階段流程:由cpu進行控制,主要流程如下
1.準備哪些物件被渲染,哪些被剔除,然後將要渲染的物件從硬碟載入到記憶體,然後從記憶體載入到視訊記憶體,方便gpu高速處理。
2.設定每個物件的渲染狀態,也就是設定物件所需的材質,紋理,著色器等。
3.輸出渲染圖元,然後向gpu傳送draw call命令,並將渲染圖元傳遞給gpu。

幾何階段流程:由gpu進行控制,主要流程如下
1.頂點著色器主要對cpu輸出的渲染圖元進行頂點空間幾何變化以及頂點光照著色處理等。
2.曲面細分著色器主要用來細分圖元。
3.幾何著色器主要用來逐個圖元的著色操作,或者產生更多的圖元。
4.裁剪主要是對不在攝像機視野內的頂點進行裁剪,並剔除一些三角形圖元面片。
5.螢幕對映主要負責將圖元立方體座標對映到螢幕座標系中。

光柵化階段流程:由gpu進行控制,主要流程如下
1.三角形設定主要是對幾何階段輸出的螢幕座標系中的頂點資料進行計算,獲取光柵化網格所需要的資料資訊的過程。
2.三角形遍歷主要是對網格覆蓋的每一個畫素生成一個片元,並且片元的狀態主要由畫素插值進行計算獲取。
3.片元著色器主要是對生成的片元進行處理輸出一個或者多個畫素。
4.逐個片元操作就是對片元進行可見性測試,如深度測試,模板測試等,測試不通過的片元會被捨棄,測試通過的片元在開啟混合時會和畫素緩衝區的顏色進行混合,最後將畫素緩衝區中的顏色進行替換成該片元最終的顏色。
5.gpu將最終的畫素緩衝區的畫素顏色放入到後緩衝區中進行繪製,繪製完畢後就和前緩衝區交換並重新整理顯示到螢幕上。

注意:
1.以上每一個渲染流程中的步驟在不同的影象程式設計介面(CG/HLSL/GLSL)以及gpu上可能會有所不同。
2.光柵化的逐片元操作中的可見性測試是十分耗時的過程,而且一旦測試不通過,之前做的所有的操作都是白費,這樣是十分浪費效能的做法,所以我們可以採用Early-Z技術,也就是將可見性測試提到片元著色器的前面,一旦不通過直接捨棄而不至於浪費片段著色器操作時間,提高渲染速度。
3.cpu和gpu之間通過命令緩衝區來實現並行處理,其中cpu向命令緩衝區中新增一個命令(draw call,setpass call等),而gpu則從命令緩衝區中讀取一個任務。