Unity Shader學習 一 基礎篇

2021-09-09 09:03:58 字數 2100 閱讀 3399

本系列學習是以馮樂樂學姐編寫的《unityshader入門精要》為基礎資料來學習的。據隔壁學霸介紹,此書有很多實用shader而且講解細緻,所以在這裡也向大家推薦一下。

計算機影象是通過渲染流水線的方式進行渲染的:分為應用階段,幾何階段,光柵化階段。(每個階段本身通常也是乙個子流水線)

應用階段:

由cpu負責實現,分三步:

(1)把資料載入到視訊記憶體當中。這一步是因為顯示卡訪問視訊記憶體的速度很快。

(2)設定渲染狀態。這些渲染狀態定義了場景中的網格是怎樣被渲染的,使用哪種光源,材質等等。

(3)呼叫drawcall。drawcall是乙個cpu傳送給gpu的命令,它指向要被渲染的圖元。

幾何階段:

由gpu負責實現,分以下步驟:

(1)頂點著色器。根據應用階段輸出的頂點資訊,對每個頂點呼叫一次頂點著色器,主要工作為座標變換和逐頂點光照。其基本工作是把頂點座標從模型空間變換到裁剪空間。

(2)曲面細分著色器。

(3)幾何著色器。

(4)裁剪。對部分在視野內的圖元進行裁剪,用邊界交點代替視野外的頂點。

(5)螢幕對映。三維變二維的一步操作,把場景渲染到視窗上。

光柵化階段:(基於圖元計算畫素)

(1)三角形設定。由於幾何階段的輸出是頂點資訊,我們要基於頂點資訊計算三角網格。

(2)三角形遍歷。根據三角網格覆蓋畫素的情況獲取片元。乙個片元是很多狀態的集合(座標,深度等),它不是真正意義上的畫素。

(3)片元著色器。

(4)逐片元操作。輸出合併的階段,片元經過模板測試,深度測試,混合之後輸出到顏色緩衝區。

模板測試:

深度測試:

混合:

數學基礎:

點乘:a·b=(a1,a2,a3)·(b1,b2,b3)=a1·b1+a2·b2+a3·b3

叉乘:axb=(a1,a2,a3)x(b1,b2,b3)=(a2b3-a3b2, a3b1-a1b3, a1b2-a2b1)

逆矩陣:只有方陣才有逆矩陣,且mn=nm=i,i為單位矩陣,n是m的逆矩陣

正交矩陣:矩陣m與它的轉置矩陣的乘積為單位矩陣,我們就說這個矩陣m是正交的。正交矩陣的每一行是乙個單位向量且這些向量互相垂直。

變換矩陣:對向量進行變換操作,如:平移,縮放,旋轉的矩陣。

平移矩陣:平移量為x,y,z

[1,0,0,x

0,1,0,y

0,0,1,z

0,0,0,1]

縮放矩陣:縮放因子為a,b,c

[a,0,0,0

0,b,0,0

0,0,c,0

0,0,0,1]

旋轉矩陣:繞x軸旋轉i度

[1,0,0,0

0,cos(i),-sin(i),0

0,sin(i),cos(i),0

0,0,0,1]

繞y軸旋轉k度

[cos(k),0 ,sin(k),0

0,1,0,0

-sin(k) ,0,cos(k),0

0,0,0,1]

繞z軸旋轉j度

[cos(j) ,-sin(j),0,0

sin(j) ,cos(j),0,0

0,0,1,0

0,0,0,1]

一般操作步驟為先縮放,後旋轉,最後平移。可以得到復合矩陣:

[acos,0,asin,x

0,b,0,y

-csin,0,ccos,z

0,0,0,1]

如果變換乙個向量需要使用變換矩陣m,則對其法線向量的變換需要使用m的逆轉置矩陣

unity shader學習總結一

學習unity shader有兩個月了,最近的兩個月總是有一些工程專案,占用我大量的學習時間,因此總是停停學學。今天虛擬校園工程開好完成了,就有時間吧自己學到的shader,總結一下。這是兩個 jianbian紋理 實現的效果如下 如下 shader custom katongmylihmodel ...

UnityShader學習記錄(一)

ps 本文章摘取自 unityshader入門精要 一書。之前一直想shader是乙個很難的東西,在接觸 unityshader入門精要 之後感覺也不是想象中的複雜,但是想要學好shader是乙個漫長的過程,基礎篇和初級篇看完之後感覺收穫挺大,為此,記錄一下。在進入shader之前,需要把渲染流水線...

unity shader學習(一)基礎框架

乙個基本的unity shader框架大致為 shader unlit newunlitshader 名稱路徑,可修改 前加hidden可隱藏路徑選項 shader核心演算法實現的地方。可以有多個subshader,但是只能載入乙個 subshader 備用shader fallback diffu...