一、Unity3D 初識(shí)Shader (一)
Unity3D 初識(shí)Shader (一)
我們都知道在unity中,Shader是擔(dān)當(dāng)著一個(gè)重要的角色,整個(gè)引擎的渲染是需要依靠Shader,今天小編就和大家一起來學(xué)習(xí)一下這個(gè)神奇的Shader吧!
1.首先從意義上認(rèn)識(shí)Shader:
Shader(著色器)是一段能夠針對(duì)3D對(duì)象進(jìn)行操作,并被GPU所執(zhí)行的程序;例如在一個(gè)3D場(chǎng)景中,一般會(huì)有多個(gè)的Shader,這些Shader中有的負(fù)責(zé)對(duì)3D對(duì)象進(jìn)行表面的處理,有的負(fù)責(zé)對(duì)3D對(duì)象的紋理進(jìn)行處理。
2.在Unity中 Shader一般有三種類型:
2.0 基本定義:
2.0.0 Fixed Function Shader:(固定渲染管線著色器)基于用于高級(jí)Shader 在老顯卡死無法顯示的Fallback,可以使用ShaderLab語言;(固定渲染管線:就是功能固定的管線,比如物體表面光的折射,反射的算法是無法修改的,我們只能對(duì)這些功能進(jìn)行配置,比如開啟或關(guān)閉反射效果、霧化效果,然而這種管線功能固定,無法在程序上對(duì)物體細(xì)節(jié)的表現(xiàn)給予更多自由的控制)
2.0.1 Vertex and Fragment Shader:最強(qiáng)大的Shader類型,屬于可編程渲染管線,使用CG/HLSL語法;(可編程渲染管線:可以根據(jù)特定的需求實(shí)現(xiàn)更多自己想要的特效)
2.0.2 Surface Shader:是現(xiàn)在unity中最常用的Shader類型,使用中預(yù)制的光照模型來進(jìn)行光照運(yùn)算,使用CG/HLSL語法;
2.1 三種Shader類型的共同點(diǎn):
2.1.0 只有唯一一個(gè)根Shader 開始;
2.1.1 Properties 參數(shù)部分、作用及語法是完全相同的;
2.1.2 具體功能都在SubShader子著色器里面,并且Shader 會(huì)自上而下運(yùn)行第一個(gè)硬件能支持的子著色器,主要是為了對(duì)不同硬件的適配;
2.1.3 都可以打標(biāo)簽,例如 Tags{"RenderType"="Opaque"} LOD 300
2.1.4 都可以使用Fallback
2.1.5 都可以處理基本功能,例如光照慢反射、鏡面反射,當(dāng)然Vertex and Fragment Shader 和Surface Shader都能實(shí)現(xiàn)Fixed Function Shader實(shí)現(xiàn)不了的高級(jí)功能,例如基于UV的計(jì)算效果;
2.2 三種Shader類型的不同點(diǎn):
2.2.0 Fixed Function Shader 和 Vertex and Fragment Sahder 在SubShader 下面還有pass{},但是Surface Shader 由于具體內(nèi)容已經(jīng)打包在光照模型,不能加pass{},否則會(huì)報(bào)錯(cuò)的;
2.2.1 Fixed Function Shader 每句代碼之后沒有分號(hào)";",但是Vertex and Fragment Sahder和 Surface Shader 每句代碼后必須要加";";
2.2.2 代碼結(jié)構(gòu)不同
Fixed Function Shader 中SubShader結(jié)構(gòu):
Material{}
......
SetTexture[_MainTex]{......}
Vertex and Fragment Shader結(jié)構(gòu):
CGPROGRAM
#pragma vertex vert
#pragram fragment frag
......
#include "UnityCG.cginc"
ENDCG
Surface Shader 的結(jié)構(gòu):
CGPROGRAM
#pragma surface surf Lambert
......
ENDCG
3.認(rèn)識(shí)Shader 開發(fā)的語言
CG(Nvida 公司開發(fā)的c for graphics 計(jì)算機(jī)圖形C語言超集):CG 程序可以根據(jù)運(yùn)行時(shí)的需要或者事先編譯成GPU匯編代碼;
HLSL(基于DirectX的High Level Shading Language):只能供微軟Direct3D 以及XNA使用,移植性差;
GLSL(基于OpenGL的OpenGL Shading Language):只能OpenGL使用,具有良好跨平臺(tái)和移植性;
ShaderLab(UnityShader):unity3d 上自帶的一套Shader語言,核心頂點(diǎn)和片段程序是由CG/HLSL語言編寫,可以對(duì)外提供一系列屬性的輸入接口(在UnityEditor材質(zhì)Inspector 面板中用圖形化方式設(shè)置屬性和選擇資源),輸入的參數(shù)最終還是由CG/HLSL 程序來處理。
4.談?wù)凷hader和Material 之間的關(guān)系
我們都知道在unity中Shader和Material兩者是緊密聯(lián)系的,Shader 包含定義屬性和資源使用種類的代碼,Material 是調(diào)整屬性和分配資源;
再簡(jiǎn)單來說:Shader(著色器)是代碼,可以定義輸入的屬性和資源;而材質(zhì)需要關(guān)聯(lián)一個(gè)著色器,并且通過材質(zhì)Inspector面板,可以圖形化的選擇資源(如紋理)或者調(diào)整屬性;
Shader常用屬性:
2D: _MainTex("Base(RGB)",2D)=" White"{} //定義2D紋理(2次方)屬性,資源可以在材質(zhì)里面選擇,{}表示選擇紋理屬性
Color:_Color("Main Color",Color)={1,1,1,1} //定義顏色屬性,RGB+Alpha
Range:_RangeValue("RangeValue",Range(0,1))=0.5 //定義一個(gè)浮點(diǎn)數(shù)屬性
Rect:_RectMap("Rect Map",Rect)=""{} //定義長(zhǎng)方形(非2次方)紋理屬性
Cube:_CubeMap("Cube Map",Cube)=""{} //定義立方體貼圖紋理屬性
Float:_FloatValue("FloatValue",float)=100 //定義一個(gè)浮點(diǎn)數(shù)屬性
Vector:_VectorValue("VectorValue",vector)=(1,1,1,1) //定義一個(gè)四元素的容器屬性
教程名稱:Unity3D 初識(shí)Shader (一) | 語 言:中文 | 頁數(shù)/時(shí)長(zhǎng): 4頁 |
軟件版本: unity | 上傳時(shí)間:2018/02/27 | 價(jià)格:¥0 |
文件格式: docx | 文件大?。?5kb |
使用說明:
1. 本站所有資源(包括3D模型、CG教程、插件軟件、材質(zhì)貼圖、工程文件等)由設(shè)計(jì)師上傳,僅供學(xué)習(xí)、參考,請(qǐng)勿用于非法用途。
2. 本站付費(fèi)類資源第一次需有償下載,重復(fù)下載不再收費(fèi)。
3. 若出現(xiàn)3d模型類資源打不開,請(qǐng)確認(rèn)您的軟件版本是否過低。
4. 本站歡迎設(shè)計(jì)師注冊(cè)開店,上傳作品進(jìn)行交流、交易。
5. 如在使用過程中,遇到任何問題,請(qǐng)下拉頁面至評(píng)論區(qū)留言,或咨詢QQ:2353487910。
您還未登錄
全部評(píng)論: 0條