Unity Shader 入門(一)簡介

此系列為本人學(xué)習(xí)Unity Shader的隨筆記錄:

Shader和Material

Shader(著色器)實際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格)以指定的方式和輸入的貼圖或顏色等組合輸出。繪圖單元依據(jù)這個輸出將圖像繪制到屏幕上。

Material(材質(zhì))輸入的貼圖或顏色等,加上對應(yīng)的Shader和其參數(shù)設(shè)置,打包存儲,得到的就是一個Material。之后便可以將材質(zhì)給予合適的renderer(渲染器)來進行渲染(輸出)了。

Shader按管線分類

固定渲染管線 - 這是標(biāo)準(zhǔn)的幾何&光照(Transforming&Lighting)管線,功能是固定的,它控制著世界、視、投影變換及固定光照控 制和紋理混合。T&L管線可以被渲染狀態(tài)控制,矩陣,光照和采制參數(shù)。功能比較有限?;舅械娘@卡都能正常運行。

可編程渲染管線 - 對渲染管線中的頂點運算和像素運算分別進行編程處理,而無須象固定渲染管線那樣套用一些固定函數(shù),取代設(shè)置參數(shù)來控制管線。

Unity中Shader的程序結(jié)構(gòu)


圖1-1

參照圖1所示,首先是著色器名,其次屬性定義,用來指定輸入?yún)?shù)。接下來是一個或多個子著色器,在實際運行中,由運行的平臺決定的使用哪個進行渲染。子著色器是代碼的主體,每個子著色器中包含一個或者多個的Pass。在計算著色時,平臺優(yōu)先選擇可以使用的著色器,然后依次運行其中的Pass,得到輸出結(jié)果。最后指定一個回滾,用來處理所有SubShader都不能運行的情況(目標(biāo)平臺有SubShader不支持的特性)。在實際開發(fā)時,我們將直接在SubShader這個層次上寫代碼,系統(tǒng)會把我們的代碼編譯成若干個合適的Pass。

Unity支持的三種Shader

固定渲染管線著色器(Fixed function shader)- 基本用于在老顯卡無法顯示時的Fallback。使用的是ShaderLab語言,語法與微軟的FX files或者NVIDIA的 CgFX類似。

片段著色器(Fragment Shader) - 最強大的Shader類型,屬于可編程渲染管線,使用CG/HLSL語法??梢栽诒容^低的層級上進行更復(fù)雜(或者針對目標(biāo)設(shè)備更高效)的開發(fā)。

表面著色器(Surface Shader) - Unity3d推崇的Shader類型,為你做了大部分的工作,只需要簡單的技巧即可實現(xiàn)很多不錯的效果。使用Unity預(yù)制的光照模型來進行光照運算,使用CG/HLSL語法。

入門系列將主要集中在表面著色器上(Surface Shader)的介紹上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容