摘要:今天開始學習shader的編寫,什麼是shader? 說到shader,首先要說說顯示卡的概念,顯示卡因為比較專一,只需要負責相應的圖形運算,而不必像cpu一樣負責電腦上的一切,所以指令集少,在相同的主頻下,顯示卡的速度是cpu的幾倍,那麼如何讓計算機知道啥時候用顯示卡來計算,啥時候用cpu來計算呢?這個電腦當然不知道了,所以,就有了shader的概念,shader就是在圖形處理流水線的某個階段,用shading language來寫**,然後給顯示卡運算,速度麼,也是當然要快很多了,今天先學習流水線的概念,好了,下面進入正題:
首先我們來看張圖:
在上面的圖中,顯示了如何從頂點資訊變為象素資訊的乙個流程,其中,有兩塊藍色的部分,分別是頂點變換與片元的著色,這兩部分就是我們要用gpu計算的部分。
1、頂點shader
在3d空間內,頂點資訊包括頂點的顏色、法向、紋理座標等,當頂點的資訊作為輸入傳到vertex shader時,vertex shader會進行如下操作:頂點的位置變換,光照計算(根據各種不同的光照模型),紋理座標的計算與轉換。
2、產生片元
可以看到這部分有兩個**,乙個是我們計算好的頂點資訊,還有一部分是連線的頂點資訊,這是啥東西?其實說白了就是一些由點連線產生的不規則形狀,矩形啊 圓啊 都是ok的。 對於輸入的頂點或者是經過彙編的頂點,在這一步會進行如下的操作:
1)、裁剪掉視景體外的資訊
2)、對於不需要顯示的一面進行剔除(在2d裡面,有個著名的sprites,這玩意需要我們自己來排序處理,沒有深度測試之類的東西可以用,因為,平面嘛:))
3)、最終得到的片元資訊不單單包括頂點的顏色,還包括法向法向、紋理座標,以及頂點之間的插值資訊,只是,這還不是最終的結果,之後才會得到每個畫素點的真正顏色值。
3、光柵化
光柵化的輸入包括頂點的位置,片元的深度,顏色等資訊。在這一步經過裁剪測試、alpha測試、模板測試、深度測試後,最終得到每個畫素的顏色值。然後game就over了。
最後我們來看張圖,這張圖從象素的角度更好的闡述了流水線的概念:
流水線技術概念簡介
對於一條具體的指令執行過程,通常可以分為五個部分 取指令,指令解碼,取運算元,運算,寫結果.其中前三步一般由指令控制器完成,後兩步則由運算器完成 若採用順序執行的方式,則執行前三步時運算器空閒,執行後兩步時指令控制器空閒.流水線技術的基本原理是 指令控制器完成了對第一條指令的處理後,不等待運算器完成...
Unity Shader學習筆記 渲染流水線
渲染流程分為3個階段,應用階段 幾何階段 光柵化階段 這個階段由cpu實現 開發者對應用階段有絕對的控制權,開發者將場景資料準備好,例如攝像機的位置,場景包含了哪些模型。其中,通常為了提高渲染的效率,開發者會將不可見的物體剔除,稱之為粗粒剔除。最後我們會設定好模型的渲染狀態 例如材質,紋理,使用的s...
MITK 基礎概念 流水線(Pipeline)
mitk中的影象處理大量使用了流水線 pipelining 的概念,在使用mitk進行開發的過程中,對其有個清晰的理解至關重要。本文件將首先闡明流水線背後的一般思想,然後討論一些你應該了解的mitk細節。在現實世界中,管道將某種型別的源和使用者連線起來。因此,我們確定了三個關鍵概念 1 源 sour...