7.13 SurfaceShader

凹凸

//法線

Shader"Custom/MyCustomSufaceShader2"{

Properties{

_MainTex("主紋理",2D)="white"{}

_NormalMap("法線紋理",2D)="white"{}

}

SubShader{

Tags{"RenderType"="Opaque"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadows

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

sampler2D_MainTex;

sampler2D_NormalMap;

structInput?{

float2uv_MainTex;

float2uv_NormalMap;

};

voidsurf?(Input?IN,inoutSurfaceOutputStandard?o)?{

o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

float4uv_n=tex2D(_NormalMap?,?IN.uv_NormalMap);

o.Normal=UnpackNormal(uv_n);

}

ENDCG

}

FallBack"Diffuse"

}

透明

Shader"Custom/MyCustomSufaceShader"{

Properties{

_Alpha("Alpha",Range(0,1))=1

}

SubShader{

Tags{"RenderType"="Transparent"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadowsalpha

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

structInput{

float4_clolor:COLOR;

};

half_Alpha;

voidsurf(Input?_in,inoutSurfaceOutputStandard??o){

o.Albedo=(0.5,0.5,0.5);

o.Alpha=_Alpha;

}

ENDCG

}

FallBack"Diffuse"

}

邊緣發(fā)光

//RimShader

Shader"Custom/MyCustomSufaceShader3"{

Properties{

_MainTex("主紋理",2D)="white"{}

_NormalMap("法線紋理",2D)="white"{}

_RimColor("邊緣光的顏色",Color)=(1,1,1,1)//白色

_RimPower("邊緣光的強度",float)=1

}

SubShader{

Tags{"RenderType"="Opaque"}

LOD200

CGPROGRAM

//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes

#pragmasurfacesurfStandardfullforwardshadows

//Useshadermodel3.0target,togetnicerlookinglighting

#pragmatarget3.0

sampler2D_MainTex;

sampler2D_NormalMap;

fixed4_RimColor;

half_RimPower;

structInput?{

float2uv_MainTex;

float2uv_NormalMap;

fixed3viewDir;

};

voidsurf?(Input?IN,inoutSurfaceOutputStandard?o)?{

o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

float4uv_n=tex2D(_NormalMap?,?IN.uv_NormalMap);

o.Normal=UnpackNormal(uv_n);

float3dotV=dot(normalize(IN.viewDir),o.Normal);

floattemp=saturate(dotV);

floatrim=1-temp;

o.Emission=_RimColor*pow(rim,_RimPower);

}

ENDCG

}

FallBack"Diffuse"

}

* "Queue"標(biāo)簽。定義渲染順序。預(yù)制的值為

* "Background"蝠嘉。值為1000隆夯。比如用于天空盒松却。

* "Geometry"池充。值為2000躯保。大部分物體在這個隊列往扔。不透明的物體也在這里贩猎。這個隊列內(nèi)部的物體的渲染順序會有進一步的優(yōu)化(應(yīng)該是從近到遠,early-z test可以剔除不需經(jīng)過FS處理的片元)萍膛。其他隊列的物體都是按空間位置的從遠到近進行渲染吭服。

* "AlphaTest"。值為2450蝗罗。已進行AlphaTest的物體在這個隊列艇棕。

* "Transparent"。值為3000串塑。透明物體沼琉。

* "Overlay"。值為4000桩匪。比如鏡頭光暈打瘪。

* 用戶可以定義任意值,比如"Queue"="Geometry+10”

* "RenderType"標(biāo)簽吸祟。Unity可以運行時替換符合特定RenderType的所有Shader瑟慈。Camera.RenderWithShader或Camera.SetReplacementShader配合使用。Unity內(nèi)置的RenderType包括:

* "Opaque":絕大部分不透明的物體都使用這個屋匕;

* "Transparent":絕大部分透明的物體济锄、包括粒子特效都使用這個捻浦;

* "Background":天空盒都使用這個;

* "Overlay":GUI、鏡頭光暈都使用這個;

* 用戶也可以定義任意自己的RenderType這個標(biāo)簽所取的值。

* 應(yīng)注意,Camera.RenderWithShader或Camera.SetReplacementShader不要求標(biāo)簽只能是RenderType,RenderType只是Unity內(nèi)部用于Replace的一個標(biāo)簽而已绞惦,你也可以自定義自己全新的標(biāo)簽用于Replace。

比如洋措,你為自己的ShaderA.SubShaderA1(會被Unity選取到的SubShader济蝉,常為Shader文件中的第一個SubShader)增加Tag為"Distort"="On",然后將"Distort"作為參數(shù)replacementTag傳給函數(shù)菠发。此時王滤,作為replacementShader實參的ShaderB.SubShaderB1中若有也有一模一樣的"Distort"="On",則此SubShaderB1將代替SubShaderA1用于本次渲染滓鸠。

* 具體可參考Rendering with Replaced Shaders


float3 viewDir 包含了視角的觀察方向雁乡,主要用于計算視差效應(yīng)(Parallax effects ),邊緣光照糜俗,等等踱稍。

float4 COLOR 包含了經(jīng)過內(nèi)插值(interpolated )的每個頂點的顏色值。

float4 screenPos 包含了用于反射效果的屏幕坐標(biāo)系的位置信息悠抹。例如珠月,在Unity專業(yè)版的WetStreet shader中使用了它。

float3 worldPos 包含了世界坐標(biāo)系中的位置楔敌。

float3 worldRefl 包含了世界坐標(biāo)系中的反射向量桥温,如果Surface Shader沒有重寫o.Normal。參考Reflect-Diffuse shader梁丘。

float3 worldNormal 包含了世界坐標(biāo)系中的法線向量,如果Surface Shader沒有重寫o.Normal旺韭。

float3 worldRefl;

INTERNAL_DATA 包含了世界坐標(biāo)系的反射向量氛谜,如果Surface Shader重寫了o.Normal。為了得到基于逐像素的法線貼圖的反射向量区端,請使用WorldReflectionVector (IN,o.Normal) 值漫。參考Reflect-Bumped shader。

float3 worldNormal;

INTERNAL_DATA 包含了世界坐標(biāo)系的發(fā)現(xiàn)向量织盼,如果Surface Shader重寫了o.Normal杨何。為了得到基于逐像素的法線貼圖的法線向量,請使用WorldNormalVector (IN,o.Normal) 沥邻。參考Reflect-Bumped shader危虱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市唐全,隨后出現(xiàn)的幾起案子埃跷,更是在濱河造成了極大的恐慌蕊玷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弥雹,死亡現(xiàn)場離奇詭異垃帅,居然都是意外死亡,警方通過查閱死者的電腦和手機剪勿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門贸诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厕吉,你說我怎么就攤上這事酱固。” “怎么了赴涵?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵媒怯,是天一觀的道長。 經(jīng)常有香客問我髓窜,道長扇苞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任寄纵,我火速辦了婚禮鳖敷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘程拭。我一直安慰自己定踱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布恃鞋。 她就那樣靜靜地躺著崖媚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恤浪。 梳的紋絲不亂的頭發(fā)上畅哑,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音水由,去河邊找鬼荠呐。 笑死,一個胖子當(dāng)著我的面吹牛砂客,可吹牛的內(nèi)容都是我干的泥张。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼鞠值,長吁一口氣:“原來是場噩夢啊……” “哼媚创!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彤恶,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤筝野,失蹤者是張志新(化名)和其女友劉穎晌姚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇竟,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡挥唠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了焕议。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宝磨。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盅安,靈堂內(nèi)的尸體忽然破棺而出唤锉,到底是詐尸還是另有隱情,我是刑警寧澤别瞭,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布窿祥,位于F島的核電站,受9級特大地震影響蝙寨,放射性物質(zhì)發(fā)生泄漏晒衩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一墙歪、第九天 我趴在偏房一處隱蔽的房頂上張望听系。 院中可真熱鬧,春花似錦虹菲、人聲如沸靠胜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浪漠。三九已至,卻和暖如春霎褐,著一層夾襖步出監(jiān)牢的瞬間郑藏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工瘩欺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拌牲。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓俱饿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塌忽。 傳聞我的和親對象是個殘疾皇子拍埠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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