1. 程式人生 > >Unity Shader入門精要 學習筆記一

Unity Shader入門精要 學習筆記一

前幾章預計都是理論知識。涉及程式碼的也應該是很小一部分,在我想來。先把理論搞搞清楚。再去理解shader會好很多。所以祝福諸君程運昌榮!好了。開始記錄學習筆記

1.渲染流水線是什麼?和shader有什麼關聯?
“渲染流水線的最終目的是生成或者說是渲染一張二維紋理(2D圖片),並顯示在我們得螢幕上“
以上實在某本資料上看到的說明。以下是個人理解
渲染流水線:是從三維場景出發(生成/渲染)一張二維紋理(圖形)這一功能而做的一系列動作,這一系列動作就是渲染流水線
而shader就是在這一系列動作(渲染流水線)中的一員。

2.渲染流水線示意圖
從概念上來渲染流水線有三個步驟:
在這裡借用《unity shader入門精要》中的截圖

圖1.1

渲染流水線概念上的三個階段/步驟

從圖中我們可以看出。渲染流水線的起點是應用階段。
那麼應用階段主要做了哪些事情呢?
1.把(圖形)資料載入到視訊記憶體中(具體步驟參考圖1.2)
2.設定渲染狀態
3.呼叫DrawCall

圖1.2:

圖1.2

渲染狀態是什麼呢?
簡單來說就是定義了場景中的網格是怎樣被渲染的,比如使用了那個著色器,光源屬性,材質等.
將上述工作完成後。CPU就告訴GPU,可以根據我告訴你的設定開始進行渲染了,這個命令就是DrawCall

DrawCall
GPU收到DrawCall命令後。會根據渲染狀態和所有輸入頂點資料進行計算,最終輸出生成螢幕上顯示的那些畫素。

CPU的工作介紹完成後,下面介紹GPU的工作——GPU渲染(流水線)
在GPU上將執行概念流水線(圖1.1)中的後兩個階段,即幾何階段和光柵化階段。直接上圖

圖1.3

這裡寫圖片描述

從圖中我們可以看到。GPU中的工作也是流水線形式的。由於幾何階段和光柵化階段是在GPU中進行的工作。所以並非所有介面都向程式開發者們開放,可程式設計性或者說可配置性僅對應該流水線上的部分階段

幾何階段:

頂點著色器:完全可配置/可程式設計,通常用於實現頂點的空間變換,頂點著色等功能
曲面細分著色器:可選著色器,用於細分圖元
幾何著色器:可選著色器,用於逐圖元的著色操作,或者用於產生更多圖元
剪裁:可配置,這個階段主要用於將那些不在攝像機視野內的頂點剪裁掉,並剔除某些三角圖元的面片。比 如在這個階段我們可以通過指令控制剪裁三角圖元的正面或者背面。
螢幕對映:不可配置和程式設計。用於將每個圖元的座標轉換到螢幕座標系中

光柵化階段:

三角形設定和三角形遍歷:都是由固定函式來完成的(Fixed-Function)
片元著色器:完全可程式設計。用於實現逐片元的著色操作
逐片元操作:不可程式設計,但是可配置,而且具有高度的可配置性,