Unity_Shader著色器(固定管線著色器)

First:


//一個Shader由Properties,SubShader,FallBack組成

Shader"CustomLearn/First"{

//屬性:用來指定代碼有那些輸入

Properties{

//屬性的語法:Name("DisplayName",type)=defaultValue(options)

//Name是屬性的名字,簡單的來說相當于一個變量名,在之后整個Shader代碼中將使用

//這個名字獲取該屬性里面的內容

//DisplayName:將顯示在Unity引擎材質編輯器中做為shader的使用者可讀取的內容,即材質中顯示的內容

//type:屬性的類型,主要由以下幾種類型:

//1.Color--顏色,RGBA(紅,綠,藍,透明度)由四個量來定義,每個量的值在0-1之間

//2.2D--是一個2的冪次方大小的貼圖,這張貼圖將在采樣后被轉化為對應基于模型的UV的每個像素的顏色,最終被顯示出來,帶有options(可選項)

//3.Rect--是一個非2的冪次方的貼圖,

//4.Cube--即Cubemaptexture(立方體紋理),簡單的來說就是6張有聯(lián)系的2D貼圖組合,主要用來做反射效果

//2-4對于貼圖來說,其值可以用一個代表tint顏色字符串來表示,其值可以為空,options只對貼圖有關,里面至少寫一個空的{}

//如果需要打開特定選項,可以把其寫在{}里面,如果同時打開多個選項,可以用空格分開

//選項有以下幾種:ObjectLinear,SphereMap,CubeReflect,CubeNormal中一個或者是White,Black,Gray,Bump(凹凸)中的一個;

//5.Range--一個介于最大值和最小值之間的浮點數(shù),其值可以在材質編輯器中滑動調節(jié),比如Shader中某些特定的參數(shù),透明度其值為0-1,就可以用該類型表示;

//6.Float--一個浮點數(shù)

//7.Vector--一個四維數(shù),寫成(x,y,z,w);

//defaultValue:默認值,一個符合格式的值來設置為默認值;

_Color?("MainColor",Color)?=?(1,0.5,0.5,1)

}

//SubShader是子著色器,可以有一個,也可以有多個,在實際運行中,哪個子著色器被調用,是由運行平臺來決定的

//子著色器是代碼的主體,每一個子著色器包含一個或者多個pass

//每一個pass都會渲染一次對象,在計算著色時,平臺會選擇最優(yōu)先使用的那個著色器,然后以此運行里面的pass,會得到一個輸出結果,最后才會渲染出來

SubShader{

//pass通道控制被渲染的對象的幾何體,除了表面著色器以外,其他兩種(固定管線著色器和頂點片段著色器)著色器的subshader下面一定要有pass通道,其語法格式如下

//pass{[NameandTags][RandererSetup][TextureSetup]}

//基本通道包含一個可選的渲染設置命令列表和可選的被使用的文理列表

//NameandTags:可以定義pass的名字和做任意數(shù)量的標簽,為pass命名后,可以在別的著色器中使用該名字來調用,標簽可以用來向渲染器說明pass的意圖

//RendererSetUp(渲染設置):只用在固定功能管線著色器中,可以設置圖形硬件的各種狀態(tài),可用的設置命令如下:

//1.Material{}:材質,定義一個使用定點光照管線的材質

//2.Lighting:光照,其值取為On或Off;

//3.Cull:剪裁,設置剪裁模式,有Back,Front,Off

//4.ZTest:深度測試,模式有LessGreaterLEqualGEqualEqualNotEqualAlways

//5.Fog{}:霧效,設置霧效的參數(shù)

//6.AlphaTest:油墨Alpha測試,模式有LessGreaterEqualNotEqualAlways

//7.Blend:Alpha混合

//8.Color:設置頂點光照關閉時使用的顏色

//9.ColorMask:顏色遮罩,當值為零時,相當于關閉所有顏色通道的渲染,取值為RGB\A\0或者RGBA任意組合

//10.Offset:深度偏移

//11.SeparateSpecular:高光顏色,取值為On或者Off

//12.ColorMaterial:顏色集,當計算頂點光照時,使用每個頂點的顏色

//TextureSetup(紋理)的命令有以下三種

//1.combine:將兩種顏色混合可以是previous(上一次texture的顏色),constant(常量顏色),primary(頂點顏色),texture(紋理顏色)

//2.constantColor:常量顏色

//3.matrix:設置矩陣對紋理坐標進行變換

pass{

Material{

Diffuse[_Color]

}

Lightingon

}

}

//以上所有的子著色器都不能運行的話,執(zhí)行該回調

FallBack"Diffuse"

}

second:

Shader"CustomLearn/Second"{

properties{

_Color("MainColor",Color)?=?(1,1,1,1)

_SpecColor("SpecColor",Color)?=?(1,1,1,1)

_Emission("Emission",Color)?=?(0,0,0,0)

_Shininess("Shininess",Range(0.01,1))?=0.7

_MainTex("MainTexture",2D)?="White"{}

}

SubShader{

//tag值暗示了要輸出的是什么,如果輸出的都是非透明物體,寫在Qpaque中,如果想渲染透明或者半透明的物體,寫在Transparent里面,其他有用的標簽

//“IqnireProject”=true(不受投影影響)

//"ForceNoShadowCasting"="True"(不產生陰影)

//"Queue=XXX"(渲染的順序隊列)

//如果使用Unity做一些透明或者不透明的效果時,很可能會遇到不透明的物體無法在透明物體后邊顯示出來,這種情況有可能是由shader渲染順序造成的,Queue的值會有以下幾種:

//1.BackGround--最早被調用的渲染,用來渲染天空盒或者背景

//2.Geometry--這個是默認值,用來渲染不透明的物體

//3.Transparent--從后往前的順序渲染透明物體

//4.Overlay--用來渲染疊加效果,是渲染的最后階段

//5.以上的值都對應了一個整數(shù)

//BackGround--1000

//Geometry--2000

//Transparent--3000

//Overlay--4000

//"Queue"="Transparent"+100表示在Transparent之后100的值的Queue上調用,這樣的話就可以通過調整Queue的值,來確保某些物體一定在另一個物體之前或之后渲染

Tags{"Queue"="Transparent"}

//透明度的混合

BlendsrcAlphaOneMinusSrcAlpha

//SubShader包裝了一個渲染方案,而方案的執(zhí)行是由pass來完成的,故可以包含多個pass,而每個pass包含了渲染一個幾何體的具體代碼

Pass{

Material{

//漫反射顏色

Diffuse[_Color]

//環(huán)境光顏色

Ambient[_Color]

//加亮時光澤度0-1之間,如果為0效果為漫反射的顏色,1的時候會得到一個細微的亮斑

Shininess[_Shininess]

//物體反射高光的顏色

Specular[_SpecColor]

//自發(fā)光的顏色

Emission[_Emission]

}

//開啟燈光

LightingOn

//開啟頂點光照的平行高光的顏色

SeparateSpecularOn

//設置紋理

SetTexture[_MainTex]{

//紋理的顏色

ConstantColor[_Color]

//混合效果

Combinetexture*?primary?DOUBLE,texture*Constant

}

}

}

FallBack"Diffuse"

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容