unityShader流程對比及其總譜

2021-08-02 10:16:25 字數 3670 閱讀 2709

1.unity的3種shader流程圖

上面三種shader在unity中都能夠使用一種shaderlab 的語法來進行編寫shader。基本的shaderlab的基本結構如下

shader  「 name」 =

properties :  屬性,他定義了一些引用變數,可以在 unity簡視面板上進行檢視,設定。

subshader :乙個shader可以有多個subshader,在執行的時候,只會執行乙個圖形硬體支援的subshader,判斷順序從第一種以此往後邊進行怕斷,判斷到哪乙個subshader當前能夠執行,就執行那乙個。

fallback:當上述所有的subshader圖形硬體都不能夠執行的話就會執行fallback。

2.unity官方自帶的shader型別流程圖

3.fiexdfunction shader 片段,主要的命令及其規則

4,來奉上fixedfunction shader 的**片段

shader "shaderdemo/fixedfunctionshader"

_secondtexture("main texture",2d) = "white"{}

_constant("constantcolor",color) = (1,1,1,1)

}subshader

pass

lighting on

separatespecular on

settexture[_maintexture]

// primary  總是當前紋理 和頂點光照後的顏色進行混合

// previous 當前的紋路 和之前所以的紋理 和定點顏色進行混合

settexture[_secondtexture]}}

}關鍵點的函式

基於alpha測試階段的流程

//主內容

endcg

}fallback "diffuse"

}pragma:編譯指令,例如如下**

#pragma su***ce surf standard fullforwardshadows

su***ce 是指定義了乙個方法叫做surf,surf這個方法是你在下邊自己定義的,用來進行fragment各種計算的standrad為光照模型,起具體的請參考,unitypbslighting.cginc檔案裡面的如下函式

inline half4 lightingstandard (su***ceoutputstandard s, half3 viewdir, unitygi gi)

fullforwardshadows 描述的是一些其它的選項 這裡指的是陰影選項,具體的請去參考unity官方文件。具體的su***ceshader**如下

shader "shaderdemo/su***ceshader"   //主紋理

_glossiness ("smoothness", range(0,1)) = 0.5  //高光的強度

_metallic ("metallic", range(0,1)) = 0.0  //金屬質感

}subshader

lod 200

cgprogram

// physically based standard lighting model, and enable shadows on all light types

#pragma su***ce surf standard removeshadow

// use shader model 3.0 target, to get nicer looking lighting

#pragma target 3.0 

sampler2d _maintex;

struct input ;

half _glossiness;

half _metallic;

fixed4 _color;

void surf (input in, inout su***ceoutputstandard o)

endcg}}

需要注意的是紋理取樣的時候必須要以uv小寫開頭的名稱,如 uv_maintex,否則紋理取樣將不成功。我們來看surf函式,這個函式是無返回的,說明他並不是以返回值的形勢來輸出的,input 目前最重要是他能夠包裝我們的紋理值。第二個引數為 inout,  他代表這個引數即是輸入又是輸入,預設的是輸入型別,su***ceoutputstandard請參考unity3d文件,例如早起的版本su***ceoutput

struct su***ceoutput

;早起版本沒有基於standard物理光照只有基於lambert光照模型,他的原型如下

inline fixed4 lightinglambert (su***ceoutput s, unitygi gi)

基於lambert的渲染模型shader如下

properties

}subshader

lod 

200cgprogram

#pragma

su***ce

surf

lambert

addshadow

//use

shader

model3.

0target,to

getnicer

looking

lighting

#pragma

target

3.0sampler2d

_maintex;

struct

input ;

half

_glossiness;

half

_metallic;

void

surf (input in, 

inout

su***ceoutput o) 

endcg}//

fallback

"diffuse"}

需要注意的是,設定物體透明的時候不能給用blend,因為他沒有pass通道,我們直接可以在pragma 編譯指令後面來設定alpha通道,具體的引數可以參考unity3d文件如下

基於fragment vertex shader的基本結構如下

shader

"shaderdemo

/vertexfragmentshader

"void

fragmain( 

inout

float4

col:

color

)endcg}}

}

常用研發流程對比

由於最近公司需要從0到1的制定研發流程規範,於是對五種常見的研發流程做了對比,並編寫了研發全流程規範文件,歡迎盆友們溝通交流 以下是五種常見模型對比 研發模型名稱 模型特點 適用場景 瀑布模型 文件驅動,開發過程為一系列有序的活動 1.專案需求穩定 2.可按專案計畫,分階段開展研發活動 敏捷開發 需...

GitHub註冊流程(中英對比)

註明 為方便完成註冊,將以中英文網頁截圖對應展示。點選github官網進行郵箱註冊。頁面跳轉至 制定個人計畫個人計畫 此選項為預設選擇 free 已足夠個人正常使用 不同之處 點選頁面右上角的 選擇 new repository 進行庫的建立。在建立乙個庫之前,會有提示首先驗證郵箱,再進行下一步。圖...

各種聚類演算法的流程對比

從任一物件點p開始 尋找並合併點p直接密度可達 eps 的物件 如果p是乙個核心點,則找到了乙個聚類,如果p是乙個邊界點則尋找下乙個物件點 重複2 3,直到所有點都被處理 將每個物件看作一類,計算兩兩之間的最小距離 2.將距離最小的兩個類合併成乙個新類 3.重新計算新類與所有類之間的距離 4.重複2...