零基礎(chǔ)入門Unity Shader(一)

本文轉(zhuǎn)自Unity Connect博主 taecg

前言

Shader惨险,中文名為著色器讹语,對很多開發(fā)者來說它是一個神秘的存在搞糕,想學(xué)但是又不知道如何去學(xué)勇吊,或者學(xué)了一段時間發(fā)現(xiàn)Get不到它的點(diǎn),始終感覺游離在外窍仰,無法開竅汉规。

那么本專欄(Unity技術(shù)美術(shù))在前幾篇介紹了美術(shù)資源標(biāo)準(zhǔn)后,打算接下來花一些篇章來講下如何從零基礎(chǔ)入門Shader驹吮,目的在于讓初學(xué)Shader的程序或者美術(shù)可以快速進(jìn)入這個豐富多彩的世界针史。

什么是Shader

雖然上面有簡單的說了下Shader就是著色器,但是還是有必要詳細(xì)說明一下具體什么是Shader碟狞。

Shader其實(shí)就是專門用來渲染圖形的一種技術(shù)啄枕,通過shader,我們可以自定義顯卡渲染畫面的算法族沃,使畫面達(dá)到我們想要的效果射亏。小到每一個像素點(diǎn),大到整個屏幕竭业。

Shader分為兩類 :

頂點(diǎn)Shader(3D圖形都是由一個個三角面片組成的,頂點(diǎn)Shader就是計(jì)算每個三角面片上的頂點(diǎn)及舍,并為最終像素渲染做準(zhǔn)備)未辆。

片斷Shader,顧名思義锯玛,就是以片斷為單位咐柜,計(jì)算光照、顏色的一系列算法攘残。 幾個不同的圖形API都有各自的Shader語言拙友,在DirectX中,頂點(diǎn)shader叫做 Vertex Shader 歼郭,片斷Shader叫做 Pixel Shader遗契,也就是像素著色器; 在OpenGL中病曾,頂點(diǎn)Shader也叫做 Vertex Shader 牍蜂,片斷Shader叫做 Fragment Shader,也就是我們常說的片斷Shader或者片元Shader泰涂。

說白了鲫竞,Shader其實(shí)就是一段代碼,這段代碼的作用是告訴GPU具體怎樣去繪制模型的每一個頂點(diǎn)的顏色以及最終每一個像素點(diǎn)的顏色逼蒙。

Shader編程語言

既然Shader是一段代碼从绘,那必然要用一種語言來書寫它,目前主流的有三種語言:

1.基于OpenGL的OpenGL Shading Language,簡稱GLSL僵井。

2.基于DirectX的High Level Shading Language,簡稱HLSL陕截。

3.還有NVIDIA公司的C for Graphic,簡稱Cg語言驹沿。

GLSL與HLSL分別是基于OpenGL和Direct3D的接口艘策,兩者不能混用。而Cg語言是用于圖形的C語言渊季,這其實(shí)說明了當(dāng)時設(shè)計(jì)人員的一個初衷朋蔫,就是讓基于圖形硬件的編程變得和C語言編程一樣方便,自由却汉。正如C++和 Java的語法是基于C的驯妄,Cg語言本身也是基于C語言的。如果您使用過C合砂、C++青扔、Java其中任意一個,那么Cg的語法也是比較容易掌握的翩伪。Cg語言極力保留了C語言的大部分語義微猖,力圖讓開發(fā)人員從硬件細(xì)節(jié)中解脫出來,Cg同時擁有高級語言的好處缘屹,如代碼的易重用性凛剥,可讀性高等。

Cg語言是Microsoft和NVIDIA相互協(xié)作在標(biāo)準(zhǔn)硬件光照語言的語法和語義上達(dá)成了一致轻姿,所以犁珠,HLSL和Cg其實(shí)是同一種語言。

美術(shù)人員看到這里時也不用害怕互亮,語法上并不難犁享,而且在后續(xù)的章節(jié)中碰到相關(guān)的語法時我們會詳細(xì)的進(jìn)行說明。

什么是Unity Shader

顯卡有NVIDIA豹休、ATI炊昆、Intel等等。慕爬。窑眯。

圖形API有OpenGL、DirectX医窿、OpenglES磅甩、Vulkan、Metal等等姥卢。卷要。渣聚。

Shader編程語言有GLSL、HLSL僧叉、Cg等等奕枝。。瓶堕。

是不是有點(diǎn)頭暈隘道,該怎么去選擇呢?在Unity中我們又應(yīng)該如何做呢郎笆?

其實(shí)在Unity中反而一切變的簡單起來了谭梗,我們只需關(guān)心如何去這實(shí)現(xiàn)我們想要的效果就好了,其余的事情全部交給Unity來自動處理宛蚓。因?yàn)槲覀冊赨nity中編寫的Shader最終會根據(jù)不同的平臺來編繹成不同的著色器語言激捏,那么我們在Unity中應(yīng)該用什么語言來書寫Shader呢?

官方的建議是用Cg/HLSL來編寫凄吏,當(dāng)然你也可以使用GLSL远舅,主要是因?yàn)镃g/HLSL有更好的跨平臺性,更傾向于使用Cg/HLSL來編寫Shader程序痕钢。

Unity Shader嚴(yán)格來說并不是傳統(tǒng)上的Shader,而是Unity自身封裝后的一種便于書寫的Shader图柏,又稱為ShaderLab。

在Unity中有3種Shader(其實(shí)就是三種不同的寫法):

1.Surface Shaders 表面著色器

2.Vertex/Fragment Shaders 頂點(diǎn)/片斷著色器

3.Fixed Function Shaders 固定管線著色器

其中Fixed Function Shaders已經(jīng)被淘汰任连,完全沒有學(xué)習(xí)的必要了爆办。

Surface Shader其實(shí)就是Unity對Vertex/Fragment Shader的又一層包裝,以使Shader的制作方式更符合人類的思維模式课梳,同時可以以極少的代碼來完成不同的光照模型與不同平臺下需要考慮的事情。

但是Surface Shader也有它的局限性余佃,就是Vertex/Fragment Shader能實(shí)現(xiàn)的效果暮刃,Surface Shader不一定能實(shí)現(xiàn),反過來則成立爆土,Surface Shader能實(shí)現(xiàn)的Vertex/Fragment Shader則一定可以實(shí)現(xiàn)椭懊。

并且在Unity2018后的版本中推出了Unity官方自己的可視化Shader工具(Shader Graph)。從生成的代碼上來看步势,也全部是用的Vertex/Fragment Shader氧猬,那是不是可以理解為在今后的可編程渲染管線中,Unity自己也拋棄了Surface Shader坏瘩,而全部采用了Vertex/Fragment Shader盅抚?

總之,在今后的學(xué)習(xí)過程中倔矾,也會涉及一些Surface Shader的內(nèi)容妄均,但主要還是會以Vertex/Fragment為主柱锹。

另外,學(xué)會Shader也會給我們帶來很多的好處:

游戲中模型顯示粉色的情況你一定碰到過吧丰包,是Shader丟失呢禁熏,還是Shader不符合當(dāng)前平臺呢,又或者是Shader上有語法的錯誤呢邑彪?如果我們有了解并學(xué)會Shader的話瞧毙,這些問題就不會再是一臉懵逼啦。

內(nèi)建Unity Shader僅僅只是“通用”用例寄症,不足以滿足我們所有的畫面表現(xiàn)需求宙彪。

一旦掌握Shader,可以為游戲/應(yīng)用創(chuàng)造獨(dú)一無二的視覺享受瘸爽。根據(jù)實(shí)際需求您访,為游戲和應(yīng)用實(shí)現(xiàn)特定功能的Shader。

能大大的幫助我們做渲染上的性能優(yōu)化剪决,因?yàn)橥ㄟ^Shader可以控制渲染什么以及如何渲染灵汪。

撰寫Shader的能力對于游戲團(tuán)隊(duì)非常重要,掌握Shader技能的開發(fā)一直是炙手可熱的職位「塘剩現(xiàn)在一個不爭的事實(shí)就是享言,技術(shù)美術(shù)永遠(yuǎn)是各大廠商的稀缺資源。

好處多多渗鬼,大家快快學(xué)習(xí)起來吧~

文章鏈接

https://connect.unity.com/p/ling-ji-chu-ru-men-unity-shader-yi?app=true

更多相關(guān)知識歡迎大家使用Unity官方app關(guān)注該博主~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末览露,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子譬胎,更是在濱河造成了極大的恐慌差牛,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰乔,死亡現(xiàn)場離奇詭異偏化,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)镐侯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門侦讨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苟翻,你說我怎么就攤上這事韵卤。” “怎么了崇猫?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵沈条,是天一觀的道長。 經(jīng)常有香客問我诅炉,道長拍鲤,這世上最難降的妖魔是什么贴谎? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮季稳,結(jié)果婚禮上擅这,老公的妹妹穿的比我還像新娘。我一直安慰自己景鼠,他們只是感情好仲翎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铛漓,像睡著了一般溯香。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浓恶,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天玫坛,我揣著相機(jī)與錄音,去河邊找鬼包晰。 笑死湿镀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伐憾。 我是一名探鬼主播勉痴,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼树肃!你這毒婦竟也來了蒸矛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤胸嘴,失蹤者是張志新(化名)和其女友劉穎雏掠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劣像,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磁玉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驾讲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡席赂,死狀恐怖吮铭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颅停,我是刑警寧澤谓晌,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站癞揉,受9級特大地震影響纸肉,放射性物質(zhì)發(fā)生泄漏溺欧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一柏肪、第九天 我趴在偏房一處隱蔽的房頂上張望姐刁。 院中可真熱鬧,春花似錦烦味、人聲如沸聂使。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柏靶。三九已至,卻和暖如春溃论,著一層夾襖步出監(jiān)牢的瞬間屎蜓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工钥勋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炬转,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓笔诵,卻偏偏與公主長得像返吻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乎婿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353