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