Shader 學(xué)習(xí)之路-Unity Shader 范例(七)

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。

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

相關(guān)閱讀更多精彩內(nèi)容

  • <轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對(duì)3D對(duì)象進(jìn)行操作...
    星易乾川閱讀 5,867評(píng)論 1 16
  • Basic Shaderlab unity 使用一個(gè)叫做 shaderlab 的語言用來包裝和組織整個(gè)shader...
    goteet閱讀 3,405評(píng)論 0 12
  • 轉(zhuǎn)載注明出處:點(diǎn)擊打開鏈接 Shader(著色器)是一段能夠針對(duì)3D對(duì)象進(jìn)行操作、并被GPU所執(zhí)行的程序。Shad...
    游戲開發(fā)小Y閱讀 3,707評(píng)論 0 4
  • 三字經(jīng)寫到:人之初,性本善。人在最初的時(shí)候,本性是善良的。這樣善良的本性大家也都差不多。只是在后期成長(zhǎng)過程中...
    羅銀丹閱讀 364評(píng)論 0 1
  • 2017年年初,我在自己的新年計(jì)劃里寫下了一個(gè)新年愿望:習(xí)得寫作技能,為此我的數(shù)量目標(biāo)是發(fā)布至少60篇文章。半年過...
    波米諾不知道閱讀 305評(píng)論 0 0

友情鏈接更多精彩內(nèi)容