1、根據(jù)Unity 3d引擎,可以知道一些常用的Unity Shader 模版

2、標(biāo)準(zhǔn)著色器模版信息

3、常用屬性標(biāo)簽信息

4、Unity Shader 常用結(jié)構(gòu)
//著色器名稱
Shader "ShaderName"
{
//屬性
Properties{Name("display name",propertyType)=DefaultValue}
//子著色器
SubShader
{
//可選標(biāo)簽(告訴Unity 何時(shí)如何渲染對(duì)象)
[Tags]
//可選狀態(tài)設(shè)置(開關(guān)混合、深度測(cè)試、剔除模式、設(shè)置深度測(cè)試使用函數(shù))
[RenderSetup]
//完整渲染流程
Pass
{
[Name]
[Tags]
[RenderSetup]
}}
//SubShader 不能運(yùn)行時(shí)執(zhí)行(同時(shí)渲染陰影)
Fallback "VertexLit"
}
5、淺析Properties 屬性:可以在引擎中屬性面板顯示Shader 屬性
定義:Name(“display name”,PropertyType)=DefaultValue
Name:名字,在Shader中訪問該變量時(shí),即面板顯示的標(biāo)簽名字
DisPlay Name:顯示名字,即面板顯示標(biāo)簽的名字
PropertyType:屬性類型
DefaultValue:默認(rèn)值
Properties {
? ? // Numbers and Sliders
? ? _Int ("Int", Int) = 2
? ? _Float ("Float", Float) = 1.5
? ? _Range("Range", Range(0.0, 5.0)) = 3.0
? ? // Colors and Vectors
? ? _Color ("Color", Color) = (1,1,1,1)
? ? _Vector ("Vector", Vector) = (2, 3, 6, 1)
? ? // Textures
? ? _2D ("2D", 2D) = "" {}
? ? _Cube ("Cube", Cube) = "white" {}
? ? _3D ("3D", 3D) = "black" {}
}

6、淺析SubShader 子著色器,每個(gè)Unity Shader 文件可以包含多個(gè)SubShader 語義塊,至少一個(gè)。在調(diào)用Shader時(shí)Unity會(huì)掃描所有SubShader并選擇一個(gè)可以在目標(biāo)平臺(tái)運(yùn)行的SubShader,若沒有合適的SubShader,系統(tǒng)就會(huì)調(diào)用Fallback語句定義的Unity Shader。
SubShader的代碼段的大體結(jié)構(gòu)如下:
SubShader
{//可選的
[Tags]
//可選的
[RenderSetup]
Pass
{....}
//Other Passes}
其中[Tags]為標(biāo)簽的設(shè)置,[RenderSetup]為一些通用狀態(tài)的設(shè)置,這兩者都是可有可無的,而Pass語句塊則定義了一次完整的渲染過程。在SubShader中可以定義多個(gè)Pass語句塊,在Pass中可以對(duì)只用于該P(yáng)ass的狀態(tài)進(jìn)行設(shè)置。一般編程時(shí)為了減少CPU和GPU的負(fù)擔(dān)會(huì)盡可能少的定義Pass語句塊。
SubShader中的常用狀態(tài)設(shè)置有以下幾個(gè):
1.Cull Back/Front/Off
設(shè)置剔除模式:剔除背面/剔除正面/關(guān)閉剔除。
2.ZTest Less Greater/LEqual/GEqual/Equal/NotEqual/Always
設(shè)置深度測(cè)試時(shí)使用的函數(shù)。
3.ZWrite On/Off
開啟/關(guān)閉深度寫入。
4.Blend SrcFactor DstFactor
開啟并設(shè)置混合模式。
5.ColorMask RGB? |? A? |? 0? |? 其他任何R、G、B、A的組合
設(shè)置顏色通道的寫掩碼(write mask)
SubShader中的標(biāo)簽(Tags)是一個(gè)鍵值對(duì)(Key/Value Pair),它的鍵和值都是字符串類型。用途是告訴渲染引擎怎樣以及何時(shí)渲染這個(gè)對(duì)象。其結(jié)構(gòu)如下:
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }//SubShader中主要的標(biāo)簽類型有以下幾種:
Tags { "Queue" = "Transparent" }//控制渲染順序,制定該物體屬于哪一個(gè)渲染序列。
Tags { "RenderType" = "Opaque" }//對(duì)著色器進(jìn)行分類如(透明/不透明)。
Tags { "DisableBatching" = "True" }//是否使用批處理。
Tags { "ForceNoShadowCasting" = "True" }//是否投射陰影。
Tags { "IgnoreProjector" = "True" }//是否不受Projector影響。
Tags { "CanUseSpriteAtlas" = "True" }//該SubShader是否不用于Sprite(精靈)。
Tags { "PreviewType" = "Plane" }//指明材質(zhì)面板會(huì)如何預(yù)覽該材質(zhì)如(球形“Sphere”、平面“Plane”等)。
上述標(biāo)簽不可以寫在Pass里。
Pass語句塊的結(jié)構(gòu)大致如下:
Pass{
[Name]
[Tags]
[RenderSetup]
//OtherCode
}
設(shè)在一個(gè)Pass中如下定義了Pass的名稱:
Name "MyPassName"
通過這個(gè)名稱,我們可以使用UsePass命令在其他的Unity Shader中調(diào)用這個(gè)Pass,例如:
UsePass "MyShader/MYPASSNAME"http://其中MyShader為定義了這個(gè)Pass的Unity Shader的名稱。
Pass同樣可以設(shè)置標(biāo)簽來告訴渲染引擎怎樣渲染物體,但與上文中提到的SubShader中的標(biāo)簽又不相同,Pass中的標(biāo)簽有下面幾個(gè)類型:
Tags { "LightMode" = "ForwardBase" }//定義該P(yáng)ass在Unity的渲染流水線的角色。
Tags { "RequireOptions" = "SoftVegetation" }//用于指定當(dāng)滿足一定條件時(shí)才渲染該P(yáng)ass。