unity shader編寫需要儲備的知識(1)

2021-10-02 09:14:48 字數 2653 閱讀 1800

首先是說一些關於著色器的一些基本知識

1.著色器型別型別,分別是固定管線著色器(將會淘汰)、頂點片元著色器、表面著色器。

頂點片元著色器:干預模型形態的著色器,例如帶有波浪的水面,修改的就是波浪表面上每乙個頂點的值。

表面著色器:干預畫素的著色器,比如烏龜上面新增乙個光照的紋理,使其有一種在水中游泳的感覺。

2.著色器與顯示卡的關係

顯示卡也就是gpu是圖形運算處理中心兩者的關係為

圖形->新增到gpu(經過渲染管道進行渲染)->顯示到螢幕上。

我們編寫的shader程式就是頂點著色器與片元著色器。

3.相關知識雜談

在不同的gpu中os、windows等,在不同型別的顯示卡中有不同的圖形標準,如果不講這些統一起來的話,有些東西只能在固定的gpu中執行,所以菜餚轉趨動,通過驅動才可以統一標準—>directorx(圖形標準),使不同的軟體等在不同的顯示卡中也可以正常顯示。

hlsl語言支援通過director3d編寫的著色器,只能在director3d中使用

glsl語言支援opengl上編shader程式。

cg語言是nvdiai和微軟合作提供的語言,支援director3d和opengl編寫程式。我們編寫shader程式一般都是用cg語言,但是vs上是不會提示cg語言的變數型別等資訊的。

4.shader程式設計的基本結構

shader 「name」

//如果子著色器顯示卡不支援,就會降級即fallback操作

}1.properties定義

name(「display name」,type) = 值

name是變數名稱、display name:顯示到屬性檢查器中的名稱

type是變數的型別

值是預設值

注意: name的規定就是使用下劃線開始

例如

properties

_glossiness

("smoothness"

,range(0

,1))

=0.5

_metallic

("metallic"

,range(0

,1))

=0.0

}

2.subshader的屬性組成

其中每乙個子著色器都可以有多個通道

上圖的標籤使用方法及型別

3.pass通道

subshader包裝了乙個渲染方案,這些方案的執行途徑是pass subshader可以由很多個pass,每乙個pass 都能令幾何體渲染一次

pass的基本語法是

pass

在其他著色器的pass塊中如果想要引用此通道,可以通過名字來引用減少重複操作,需要注意的是name命令必須是大寫,也就是說但凡是通道的名字必須要大寫(unity引擎的規定)

通道型別分別有regularpass、usepass、grabpasss三種

普通通道的渲染設定

上圖是普通通道型別的作用

usepass的用處

插入所有來自其他著色器的給定名字的通道;

usepass「shader/name」,name為 著色器通道

使用方法:「specular/base」//插入specular中為bass 的通道;

grabpass{};一種特殊通道型別,他會捕獲物體所在位置的螢幕的內通婚,並且寫入乙個紋理中,這個紋理能夠唄用於後續通道中完成高階影象特效 ,後續通道可以使用

——grabtexture進行訪問;

使用grabpass捕獲 螢幕內容到指定紋理中,後續通道可以通過紋理名稱訪問

5.shader中常用型別

其中的options是描述紋理屬性的

6.unity座標系轉換

7.cg語言的常用語義修飾

8.cg語言基本型別表示式

定點數:用整數表示小數,比如有乙個32位的作業系統,那麼數字35.2的35,就存在前16位,2存後16位,所以,所謂的定點數就是用整數來表示小數。

在cg中顏色就是用fixed來表示的,比浮點數更加高效。

sampler來表示紋理物件,如果要向shader中關聯一副,紋理或者texture,就使用sampler/1d/2d/3dcube/rect,1d/2d等都是紋理,cube可以代表天空盒

9.標準內建函式

Unity Shader編寫基礎及注意事項(二)

座標系規則 unity中存在空間座標系,模型座標系,相機座標系以及螢幕座標系。注意 空間座標系和模型座標系均是左手座標系,z在物體的正前方,相機座標系是右手座標系,z指向相機後方。座標系變換 包含平移 旋轉和縮放變換。注意 三維座標的平移不能用3x3矩陣表示,所以擴充套件到4x4的齊次座標。unit...

python編寫api原則 編寫api需要一些建議

聽起來好像您已經在python方法中定義了所有api功能,因此您可以使用pythonweb服務框架來直接或通過簡單的包裝器服務類公開它們。我建議你看看關於web services at python.org的wiki頁面。在 如果您想使用json作為web服務的傳輸協議,我建議您使用json rpc...

編寫Python程式訪問需要cookie的網頁

有些網頁需要你登入之後才可以訪問,你需要提供賬戶和密碼,其實用python寫程式來訪問還是蠻簡單的,就是對cookie的儲存而已 比如我在 www.bokee.com 部落格網上註冊了帳號test51,密碼11111 如果想訪問登入後才可以訪問的網頁,那麼程式似乎可以這樣寫 這樣做之後cookie就...