Unity_Shader著色器(表面著色器)

Shader"Custom/Third"{

Properties{

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

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

//光滑度

_Glossiness("Smoothness",Range(0,1))?=0.5

//金屬光澤度

_Metallic("Metallic",Range(0,1))?=0.0

}

SubShader{

//表面著色器可以被若干個標簽所修飾逼庞,通過判斷標簽來決定硬件什么時候該調用著色器趁窃、

//“RendererType”="Opaque"表示渲染不透明的物體

//RendererType賦值有:

//1.Opaque:絕大部分的不透明物體渲染時使用

//2.Transparent:絕大部分的透明物體渲染時使用

//3.BackGround:天空盒

//4.Overlay:用來渲染疊加效果馅巷,鏡頭光暈等

Tags{"RendererType"="Opaque"}

//LOD是LevelofDetail的縮寫尘执,我們能用什么樣的shader由它來決定,如果我們在Unity的QualitySetting中設定最大LOD值小于subshader所指定的值時溪椎,則subshader不可使用

//Unity的Shader制定了一組LOD值普舆,我們在寫shader的時候作為參考,方便以后對設備圖形性能調整校读,和畫質有更精確的控制

//Vertexlitkindofshaders(頂點光照類型的shader)=100

//Diffuse(漫反射)=200

//ReflectiveBumpedUnlit(凸起反射不發(fā)光)=250

//ReflectiveBumpedVertexlit(頂點反射不發(fā)光)=250

//Bumped,Specular(凸起沼侣,高光)=300

//凹凸高光=400

//Parallax(視差)=500

//ParallaxSpecular(視差高光)=600

LOD200

//表面著色器的實現(xiàn)代碼必須放在CGPROGRAM...ENDCG代碼塊中,而不是放在pass里邊

//CG(NVIDIA公司開發(fā)的cforgraphic計算機圖形編程C語言封裝)

//CG程序可以根據運行時的需要或者事先編譯成GPU匯編代碼

CGPROGRAM

//這是一條編譯指令歉秫,它聲明了我們要寫一個表面著色器蛾洛,并且制定了光照模型,語法如下

//#pragrmsurfacesurfaceFunctionlightModel[optionparams]

//surface:聲明一個表面著色器

//surfaceFunction:著色器方法的名字

//lightModel:使用光照的模型

//optionparams:可選參數(shù)雁芙,包括透明度轧膘,頂點與顏色钞螟,投影等等

#pragmasurfacesurfStandardfullforwardshadows

//使用shader3.0版本可以得到更好的光照效果

#pragmatarget3.0

//sampler2D是GPU中2D貼圖的類型,還有sampler3D扶供,samplerCUBE等

//所實例化的shader是由兩個獨立的塊組成筛圆,屬性聲明和回調都是unity,可以直接使用和編譯的shader

//在CG代碼塊中椿浓,想要訪問在properties中所定義的變量的話,必須聲明和屬性變量名相同的名字進行使用

//sampler2DMainTex其實就是關聯(lián)了屬性_MainTex闽晦,之后CG程序就可以使用它了

sampler2D_MainTex;

//結構體扳碍,float2和vector2一樣,里面存放了兩個float類型的屬性仙蛉,可以使用變量名.x的方式獲得某個值

//在CG程序中制定一個貼圖變量前加uv字樣笋敞,就代表提取它的uv值(其實就是兩個代表貼圖上的二維坐標點)所需要參與計算的數(shù)據

structInput?{

//輸入結構體重一般包含著色器所需要的紋理坐標,命名規(guī)范:uv+紋理名稱

//當使用第二紋理荠瘪,命名為:uv2+紋理名稱

//輸入結構體中還有其他成員變量

//float3viewDir:視角方向

//float4COLOR:每個頂點的顏色差值

//float4screenPos:屏幕坐標(使用.xy/.wh來獲取屏幕2D坐標)

//float3worldRefl:世界坐標系中反射向量

//float3worldNormal:世界坐標系中法線向量

float2uv_MainTex;

};

half_Glossiness;

half_Metallic;

fixed4_Color;

//CG規(guī)定了表面著色器代碼方法的參數(shù)類型和名字

//語法結構

//voidsurf(InputIN,inoutSurfaceOutputStandardo)

//其作用是結構輸入的uv或者附加數(shù)據夯巷,然后進行處理,最后將結構填充到輸出結構體中哀墓,所以只能按照規(guī)定來寫

//參數(shù)1:Input:是我們需要定義的輸入結構體趁餐,可以吧所需要參與計算的數(shù)據放到這個結構體中,傳入方法使用

//參數(shù)2:inout:SurfaceOutput定義輸出結構體的類型篮绰,需要把方法里面得到的結果賦值給該結構體里面的成員變量即可完成著色

//SurfaceOutput的輸出結果結構定義如下:

//half3Albedo:像素的顏色

//half3Normal:法線

//half3Emission:自發(fā)光后雷,不受光照影響

//halfSpecular:高光指數(shù)

//halfGloss:光澤度

//halfAlpha:透明度

//SurfaceOutPutStandard輸出結果定義如下:

//fixed3Albedo:基礎顏色

//fixed3Normal:切線空間法線

//halfSmoothness:是否光滑,0=粗糙,1=光滑

//halfMetallic:是否有金屬光澤吠各,0=非金屬臀突,1=金屬

//halfOcclusion:遮擋(默認為1)

//fixedAlpha:透明度

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

//Albedocomesfromatexturetintedbycolor

//tex2D方法是CG程序中用來在一張貼圖中對一個點進行采樣的方法

//返回一個fixed4類型

//這里是對_MainTex在輸入點上進行采樣

fixed4c?=tex2D(_MainTex,?IN.uv_MainTex)?*?_Color;

//把采樣的顏色賦值給輸出的顏色

o.Albedo?=?c.rgb;

//Metallicandsmoothnesscomefromslidervariable

//金屬

o.Metallic?=?_Metallic;

//光滑

o.Smoothness?=?_Glossiness;

//透明度

o.Alpha?=?c.a;

}

ENDCG

}

FallBack"Diffuse"

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贾漏,隨后出現(xiàn)的幾起案子候学,更是在濱河造成了極大的恐慌,老刑警劉巖纵散,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梳码,死亡現(xiàn)場離奇詭異,居然都是意外死亡困食,警方通過查閱死者的電腦和手機边翁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硕盹,“玉大人符匾,你說我怎么就攤上這事〈窭” “怎么了啊胶?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵甸各,是天一觀的道長。 經常有香客問我焰坪,道長趣倾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任某饰,我火速辦了婚禮儒恋,結果婚禮上,老公的妹妹穿的比我還像新娘黔漂。我一直安慰自己诫尽,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布炬守。 她就那樣靜靜地躺著牧嫉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪减途。 梳的紋絲不亂的頭發(fā)上酣藻,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音鳍置,去河邊找鬼辽剧。 笑死,一個胖子當著我的面吹牛墓捻,可吹牛的內容都是我干的抖仅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼砖第,長吁一口氣:“原來是場噩夢啊……” “哼撤卢!你這毒婦竟也來了?” 一聲冷哼從身側響起梧兼,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤放吩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羽杰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渡紫,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年考赛,在試婚紗的時候發(fā)現(xiàn)自己被綠了惕澎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡颜骤,死狀恐怖唧喉,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤八孝,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布董朝,位于F島的核電站,受9級特大地震影響干跛,放射性物質發(fā)生泄漏子姜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一楼入、第九天 我趴在偏房一處隱蔽的房頂上張望哥捕。 院中可真熱鬧,春花似錦浅辙、人聲如沸扭弧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼巴。三九已至诊赊,卻和暖如春碧磅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秆撮。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舒裤,地道東北人腾供。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像察署,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扳埂,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容

  • <轉>我也忘了轉自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對3D對象進行操作...
    星易乾川閱讀 5,598評論 1 16
  • 動機自己使用Unity3D也有一段時間了赡盘,但是很多時候是流于表面葱淳,更多地是把這個引擎簡單地用作腳本控制赞厕,而對更深入...
    JumboWu閱讀 2,115評論 0 24
  • 寫與燈光交互的Shader是很復雜的喷斋,因為有不同的燈光類型(light Type)星爪,不同的陰影選項(Shadow ...
    Unity云中客閱讀 6,812評論 0 4
  • 發(fā)現(xiàn)自己還是不會造型裙士,不知道怎么畫入客。 不知道臨摹多久,才能算真正的會畫畫了腿椎。 優(yōu)點是桌硫,我也敢于下筆呀。 就是細致刻...
    FWF閱讀 197評論 0 0
  • 復習在經過舍和斷之后啃炸,每一樣東西都是自己喜歡的铆隘,這時候請用三分法整理收納 如何收拾房間里的東西 1選一首自己喜歡聽...
    faithalex閱讀 324評論 0 0