ShaderLab

Surface Shader
主要用來實現(xiàn)光照相關(guān)處理,可能更簡潔淤齐。
Vertex and Fragment Shader
如果不與光照交互, 則可以用這個shader袜匿,更錄活
fixed function shaders
固定shader主要用于老舊卡

ShaderLab
不管寫哪種shader,最終通過shaderLab實現(xiàn)更啄,其組織結(jié)構(gòu)如下:
Shader "MyShader" {
Properties{
_MyTexture ("My Texture",2D) = "white" {}
// other properties like colors or vectors go here as well
}
SubShader{
// here goes the 'meat' of your
// - surface shader or
// -vertex and fragment shader or
// -fixed function shader
}
SubShader{
// here goes a simpler version of the subshader above that can run older graphic cards
}
}
開始以下學(xué)習(xí)前,先簡單了解一下shaderlab指南
======================================================================
ShaderLab 語法: Shader
語法:
Shader "名字" {[Properties] Subshaders [Fallback]}
[]--可選項目

Properties
Shader可以有多個屬性(properties),每一個屬性都顯示在Unity的inspector. 如顏色居灯,貼圖祭务,或者任意值

Subshaders & Fallback
每個shader包含多個子shader, 至少包含有一個。當(dāng)加載shader時怪嫌, Unity會遍歷所有子shader.從上往下選擇第一個可以支持的义锥。 如果沒有可以支持的, Unity會試著用Fallback shader.

如下就是一個最簡單的shader
// colored vertex lighting
Shader "Simple colored lighting" {
// a signle color property
Properties {
_Color ("Main Color", Color) = (1,.5,.5,1)
}
// define one subshader
SubShader{
Pass {
Material{
Diffuse [_Color]
}
Lighting On
}
}
}
subshader中包含了一個通道(Pass)岩灭, 它開啟了頂點(diǎn)光拌倍,并設(shè)置基本材質(zhì)。

ShaderLab 語法:Properties
語法:
Properties {Property [Property ...] }
定義 屬性塊噪径,位于括號中的定義如下:
Float Range
name ("diplay name", Range(min, max)) = number
Color
name ("diplay name", Color) = (number, number, number, number)
Texture 2D
name ("diplay name", 2D) = "name" { options }
Rectangle
name ("diplay name", Rect) = "name" { options }
Cubemap
name ("display name", Cube) = "name" {options}
Float
name ("display name", Float) = number
Vector
name ("display name", Vector) = (number, number, number, number)
例子如下:
Properties {
// properties for water shader
_WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders
_ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5
_RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4
_RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // color
_ReflectionTex ("Environment Reflection", 2D) = "" {} // textures
_RefractionTex ("Environment Refraction", 2D) = "" {}
_Fresnel ("Fresnel (A) ", 2D) = "" {}
_BumpMap ("Bumpmap (RGB) ", 2D) = "" {}
}
貼圖選項
貼圖屬性的選項位花括號中柱恤,是可選的,可選項目如下:
1.TexGen 模式找爱,自動貼圖坐標(biāo)生成模式梗顺。可以為ObjectLnear, EyeLinear,Shperemap, CubeReflect,CubeNormal之一车摄。這些對應(yīng)于OpenGL中相應(yīng)的texgen模式寺谤。

ShaderLab 語法:SubShader
語法:
SubShader { [Tags] [CommonState] Passdef [Passdef ...] }

一個SubShader可以定義一組渲染通道,可選設(shè)置共同狀態(tài)針對所有通道吮播,也可以指定標(biāo)簽
當(dāng)Unity確實使用那個SubShader時变屁,它會用該Subshader每個通道一一給對象進(jìn)行渲染,每一次渲染是一個比較昂貴的操作意狠。盡可能的少用通道敞贡。
例子如下:
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...

ShaderLab 語法:Pass
語法:
Pass {[Name and Tasgs] [RenderSetup] [TextureSetup]}
基本通道命名包含一個可能的渲染設(shè)置命令。 以及接著一個可選的一組使用貼圖
Name and Tags
一個通道可能定義它的名字 和 任意個數(shù)標(biāo)簽(key/value隊摄职,用于進(jìn)行通道與引擎間交互)誊役。
Rander Setup
通道設(shè)置多個圖形硬件狀態(tài)获列,如打開alpha混合, 使用霧蛔垢。等等击孩, 命令如下:
Material
Material { Material Block}
定義一個用在頂點(diǎn)光照管線的材質(zhì)。 見【Material page】
Lighting
Lighting On | Off
打開|關(guān)閉頂點(diǎn)光照. 見【Material page】
Culling
Cull Back | Front | Off
設(shè)置多邊形揀選模式.見【 Cull and Depth page 】
ZTest
ZTest (Less | Greater | LEqual | GEqual | Equal | NotEqual)
設(shè)置深度檢測模式.見【 Cull and Depth page 】
ZWrite
ZWrite On | Off
設(shè)置深度寫模式.見【 Cull and Depth page 】
Fog
Fog {Fog Block}
設(shè)置霧參數(shù)鹏漆。見【Fog page 】
AlphaTest
AlphaTest (Less | Greater | LEqual | GEqual | Equal | NotEqual)
打開Alpha測試巩梢。見【Alpha Testing page】
Blend
Blend SourceBlendmMode DestBlendMode
設(shè)置混合模式。見【 Blending page】
Color
Color Color-value
在頂點(diǎn)光照打開時艺玲,選用的頂點(diǎn)顏色.見【Material page】
ColorMask
ColorMask RGB | A | 0 | any combinaion of R,G,B,A
設(shè)置顏色寫入mask, 0括蝠,表示關(guān)閉所有顏色通道寫入.見【Material page】
Offset
Offset OffsetFacotr, OffsetUnits
設(shè)置Z深度緩沖偏移.見【 Cull and Depth page 】
SeperateSpecular
SeperateSpecular On | Off
打開|關(guān)閉頂點(diǎn)光照的分隔高光.見【Material page】
ColorMaterail
ColoerMaterial AmbientAndDiffuse | Emission
使用每一個頂點(diǎn)光饭聚,當(dāng)在計算頂點(diǎn)光照時忌警。見【Material page】
Texture Setup
在渲染狀態(tài)設(shè)置后,你可能指定一定數(shù)量的貼圖和它們的組合模式秒梳,通過SetTexture進(jìn)行應(yīng)用

ShaderLab 語法:Color,Material,Lighting
材質(zhì)與光照參數(shù)用來控件內(nèi)建頂點(diǎn)光照法绵。頂點(diǎn)光照是標(biāo)準(zhǔn)的D3D/OPENGL光照模式,它為每個頂點(diǎn)逐一計算酪碘。Lighting On 打開頂點(diǎn)光照朋譬,光照受到Material block,ColorMaterail,SeperateSpecular命令影響。
像素光照通常用自定義vertex/fragment程序?qū)嵗丝眩皇怯庙旤c(diǎn)光照徙赢。 下訴命令在像素光照中無效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末探越,一起剝皮案震驚了整個濱河市犀忱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扶关,老刑警劉巖阴汇,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異节槐,居然都是意外死亡搀庶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門铜异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哥倔,“玉大人,你說我怎么就攤上這事揍庄∨剌铮” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沃测。 經(jīng)常有香客問我缭黔,道長,這世上最難降的妖魔是什么蒂破? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任馏谨,我火速辦了婚禮,結(jié)果婚禮上附迷,老公的妹妹穿的比我還像新娘惧互。我一直安慰自己,他們只是感情好喇伯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布喊儡。 她就那樣靜靜地躺著,像睡著了一般稻据。 火紅的嫁衣襯著肌膚如雪艾猜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天攀甚,我揣著相機(jī)與錄音,去河邊找鬼岗喉。 笑死秋度,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钱床。 我是一名探鬼主播荚斯,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼查牌!你這毒婦竟也來了事期?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纸颜,失蹤者是張志新(化名)和其女友劉穎兽泣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胁孙,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唠倦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涮较。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠鼻。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狂票,靈堂內(nèi)的尸體忽然破棺而出候齿,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布慌盯,位于F島的核電站周霉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏润匙。R本人自食惡果不足惜诗眨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孕讳。 院中可真熱鬧匠楚,春花似錦、人聲如沸厂财。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璃饱。三九已至与斤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荚恶,已是汗流浹背撩穿。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒撼,地道東北人食寡。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像廓潜,于是被迫代替她去往敵國和親抵皱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容