Hello,大家好!針對一些讀者要求,以及想在材質等表現上更進一步的同誌們,今天的便給大家分享這篇Shader小白入門基礎教程。

1、shader
著色器,是一種較為簡短的程序片段,用於告訴圖形軟件如何計算和輸出圖像。shader主要分兩類:Vertex Shader(頂點著色器)和Fragment Shader(片段著色器)
2、渲染管線
又叫渲染流水線,是顯示芯片內部處理圖形信號相互獨立的並行處理單元。一個流水線是一序列可以並行和按照固定順序進行的階段,遵循著前入後出的流程。類比來說,就像是一個工廠,同時生產寶馬和賓利兩種汽車,這兩款汽車的每個零件又是同時製作的,就可以說這個車間內有兩個不同的渲染管線。

我們根據上圖進行說明。3D軟件或是遊戲在運行的時候,會調用圖形API,OpenGL或者是DirectX。而頂點著色器和片段著色器就在圖中GPU運算框選部產生作用

上圖就是針對到unity引擎中。Geometry部分可以理解為建模,這個過程就是把Mesh數據導入到unity之中,unity引擎再調用圖形API,而調用圖形API的過程就是在驅動GPU進行處理運算。
進入到GPU後,首先進行的是頂點處理程序(Vertex Processor)對應頂點shader,頂點運算的結果會傳遞給像素處理器(Pixel Processor相當於片段處理器),其對應的便是像素shader(也就是片段shader),最後輸出可以在屏幕上顯示的像素信息,即Frame Buffer(幀緩衝),Frame Buffer不僅可以儲存顏色信息還可以儲存深度值。

3、shader | 材質 | 貼圖
著色器實際就是一小段程序,他負責將輸入的頂點數據以指定的方式和輸入的貼圖或者顏色等組合起來,然後進行輸出。繪圖單元可以以及這個輸出來將圖像繪製到屏幕上。
輸入的貼圖或者顏色等,加上對應的shader,以及對shader的特定的參數設置,將這些內容(shader及輸入參數)打包儲存在一起,得到的就是一個Material(材質),這些包裏其實還有其他東西比如向量、矩陣。之後,我們便將材質賦予到三維模型上進行渲染(輸出)了

材質,就像是遊戲引擎最終使用的商品,shader就好比是生產這種商品的加工方法,而貼圖則是這商品的原材料。如果我們不用Unity或是其他引擎的話,實現材質就需要利用OpenGL或是DirectX的API的調用,手動組織出個shader,這樣就很麻煩,所以引擎提供了便捷。
4、shader編寫的語言
有三種:HLSL、GLSL和CG。以前Shader是用彙編語言進行編寫的,難度賊雞兒大,但是現在可以用這三種高級語言編寫就很方便了。HLSL是基於DrectX的、GLSL是基於OpenGL的,還有NVIDIA的C For Graphic,簡稱CG語言。
其中CG是DX和OpenGL都支持的,也極大保留C語言的語義,CG語法和HLSL很像甚至可以混用,實際上這倆語言是同一種語言了。一般來說為了跨遊戲平台方便,一般學CG語言。
5、unity中shader的編寫形式
有三種:surface shader | vertex and Fragment shader | fixed function shader。我們知道,硬件隻識別頂點著色和片段著色,那麼unity引擎中為何還會多出來一個surface shader(以下簡稱SS)和Fixed Function shader(以下簡稱FFS)呢。
對於FFS,主要是對於固定管線的硬件的操作,是特別保守的shader能得到絕大部分硬件的支持;而SS呢,是unity推薦用的,創建一個shader在unity中的時候,默認的代碼就是SS。實際上SS是對頂點和片段著色器的一種“包裝”,在SS編程後unity會將SS代碼編譯成硬件可識別的頂點和片段著色器代碼
書寫shader的主要結構:

6、ShaderLab
ShaderLab是為unity定製的專門用於編寫Shader的語法,可以容納其他三種shader。
shaderLab的主要結構

花括號內的三個部分:Properties,Subshaders,Fallback
什麼是Properties呢,屬性。我們在unity中新建一個材質球和一個shader,打開編譯器將shader命名為“111”,再將111shader拖拽給材質球,再點擊材質球觀察其顯示與代碼中Properties的內容。我們發現,shader編程中的Properties(屬性)會讓擁有該shader的材質球的屬性以列表的形式顯示出來,進行參數調節。


subshader是啥呢,算法,就是寫給GPU渲染的shader片段了,這裏記住,一個shader當中至少有一個subshader。每一次顯卡進行處理的時候呢,隻能選擇其中一個subshader去執行。那為什麼會有多個subshader呢?這和硬件有關。
在讀取shader的時候,會先從第一個subshader讀取,如果第一個能適配當前硬件,就不會往下讀了;如果硬件太老跟不上,第一個讀取不了,就會讀取第二個看能不能與我適配。也就是說,subshader的所有方案會向下簡化。如果這些列舉的subshader都用不了怎麼辦?那就是第三個Fallback了
FallBack就是在subshader都用不了的時候可以回滾到指定的unity中一個都能適配的shader。unity常用的內建shader的如下:

以上就是關於shader的入門級別內容,希望能夠幫助到看官們。
來源:Thepoly
作者:kinglary
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答《黑神話:悟空》作為一款現象級中國遊戲,其成功離不開多種先進計算機技術的支持。本文將深入解析該遊戲背後的關鍵技術,包括虛幻引擎......
在遊戲開發領域,Unity和Unreal Engine(虛幻引擎)都是備受推崇的遊戲引擎,但它們各自擁有不同的特點和優勢。
春節之後大量搶人!這6個行業是轉行首選,進去1年頂3年!火星畢業就能進
春節後求職,哪些行業進去能立馬漲薪?打破信息差很關鍵!
還沒畢業,就去幫電視台拍活動,作品被主任說“非常好”!猜猜是哪個專業呀?
回想過去,電子遊戲裏的草其實並不是真正的草。開發者們隻是簡單地把草的紋理直接貼在遊戲關卡的地板上
在火星的就業指導老師那裏,經常收到同學們這樣、那樣的提問。其中有一些共性問題,就業老師會根據自己豐富的經驗,為同學們給出合適的回答。