按照渲染管線的分類,可以把Sharder分成3個類別:
1、固定功能著色器(Fixed Function Shader)
固定功能著色器為固定功能渲染管線的具體表現(xiàn)。
2、表面著色器
存在于Unity3D中由U3D發(fā)揚(yáng)光大的一門技術(shù)。Untiy3D為我們把Shader的復(fù)雜性包裝起來,降低shader的書寫門檻。
3、頂點(diǎn)著色器和片段著色器
GPU上含有兩個組件:可編程頂點(diǎn)處理器和可編程片段處理器,頂點(diǎn)和片段處理器被分離成可編程單元,可編程頂點(diǎn)處理器是一個硬件單元,可以運(yùn)行頂點(diǎn)程序,而可編程片段處理器則是一個可以運(yùn)行片段程序的單元。
頂點(diǎn)著色器
頂點(diǎn)著色程序從GPU前端(寄存器)中提取圖元信息(頂點(diǎn)位置、法向量、紋理坐標(biāo)),并完成頂點(diǎn)坐標(biāo)空間變換、法向量空間轉(zhuǎn)換、光照計算等操作,最后將計算數(shù)據(jù)傳送到指定寄存器中。
片段著色器
片段程序從上述寄存器中獲取需要的數(shù)據(jù):紋理坐標(biāo)與光照信息等,并根據(jù)這些信息以及從應(yīng)用程序傳遞的紋理信息進(jìn)行每個片段的顏色計算(紋理查詢),最后將處理后的數(shù)據(jù)傳送光柵操作模塊。
三種著色器的共同點(diǎn):
都必須從唯一一個根Shader開始
Prooerties參數(shù)部分,作用以及語法完全相同。
具體功能都在SubShader里。
都可以打標(biāo)簽
都可以Fallback
都可以處理基本的功能,例如光照漫反射以及鏡面反射。但如uv計算效果等高級功能,固定功能著色器無法完成。
三種著色器的不同點(diǎn)
表面著色器沒有通道pass{},加了會報錯,該著色器已經(jīng)把具體內(nèi)容打包在光照模型中了。
固定渲染管線每句代碼之后都沒有“;”
核心結(jié)構(gòu)不同:
- 固定渲染管線的核心是:
- 頂點(diǎn)與片段著色器的核心是:
- 表面著色器的核心是:
在Unity中如何區(qū)分以上三種著色器
沒有嵌套CG語言,即代碼中沒有CGPROGARAM和ENDCG關(guān)鍵字的,就是固定功能著色器。
嵌套CG語言,代碼中有surf函數(shù)的為表面著色器
嵌套了CG語言,代碼中有#pragma vertex name和 #pragma fragment frag聲明的,就是頂點(diǎn)著色器&片段著色器。
-
gpu
+關(guān)注
關(guān)注
28文章
4740瀏覽量
128951 -
Unity
+關(guān)注
關(guān)注
1文章
127瀏覽量
21830
原文標(biāo)題:Unity中Shader的三種基本類型
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論