一、Unity3D 初識Shader (一)
Unity3D 初識Shader (一)
我們都知道在unity中,Shader是擔當著一個重要的角色,整個引擎的渲染是需要依靠Shader,今天小編就和大家一起來學(xué)習一下這個神奇的Shader吧!
1.首先從意義上認識Shader:
Shader(著色器)是一段能夠針對3D對象進行操作,并被GPU所執(zhí)行的程序;例如在一個3D場景中,一般會有多個的Shader,這些Shader中有的負責對3D對象進行表面的處理,有的負責對3D對象的紋理進行處理。
2.在Unity中 Shader一般有三種類型:
2.0 基本定義:
2.0.0 Fixed Function Shader:(固定渲染管線著色器)基于用于高級Shader 在老顯卡死無法顯示的Fallback,可以使用ShaderLab語言;(固定渲染管線:就是功能固定的管線,比如物體表面光的折射,反射的算法是無法修改的,我們只能對這些功能進行配置,比如開啟或關(guān)閉反射效果、霧化效果,然而這種管線功能固定,無法在程序上對物體細節(jié)的表現(xiàn)給予更多自由的控制)
2.0.1 Vertex and Fragment Shader:最強大的Shader類型,屬于可編程渲染管線,使用CG/HLSL語法;(可編程渲染管線:可以根據(jù)特定的需求實現(xiàn)更多自己想要的特效)
2.0.2 Surface Shader:是現(xiàn)在unity中最常用的Shader類型,使用中預(yù)制的光照模型來進行光照運算,使用CG/HLSL語法;
2.1 三種Shader類型的共同點:
2.1.0 只有唯一一個根Shader 開始;
2.1.1 Properties 參數(shù)部分、作用及語法是完全相同的;
2.1.2 具體功能都在SubShader子著色器里面,并且Shader 會自上而下運行第一個硬件能支持的子著色器,主要是為了對不同硬件的適配;
2.1.3 都可以打標簽,例如 Tags{"RenderType"="Opaque"} LOD 300
2.1.4 都可以使用Fallback
2.1.5 都可以處理基本功能,例如光照慢反射、鏡面反射,當然Vertex and Fragment Shader 和Surface Shader都能實現(xiàn)Fixed Function Shader實現(xiàn)不了的高級功能,例如基于UV的計算效果;
2.2 三種Shader類型的不同點:
2.2.0 Fixed Function Shader 和 Vertex and Fragment Sahder 在SubShader 下面還有pass{},但是Surface Shader 由于具體內(nèi)容已經(jīng)打包在光照模型,不能加pass{},否則會報錯的;
2.2.1 Fixed Function Shader 每句代碼之后沒有分號";",但是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.認識Shader 開發(fā)的語言
CG(Nvida 公司開發(fā)的c for graphics 計算機圖形C語言超集):CG 程序可以根據(jù)運行時的需要或者事先編譯成GPU匯編代碼;
HLSL(基于DirectX的High Level Shading Language):只能供微軟Direct3D 以及XNA使用,移植性差;
GLSL(基于OpenGL的OpenGL Shading Language):只能OpenGL使用,具有良好跨平臺和移植性;
ShaderLab(UnityShader):unity3d 上自帶的一套Shader語言,核心頂點和片段程序是由CG/HLSL語言編寫,可以對外提供一系列屬性的輸入接口(在UnityEditor材質(zhì)Inspector 面板中用圖形化方式設(shè)置屬性和選擇資源),輸入的參數(shù)最終還是由CG/HLSL 程序來處理。
4.談?wù)凷hader和Material 之間的關(guān)系
我們都知道在unity中Shader和Material兩者是緊密聯(lián)系的,Shader 包含定義屬性和資源使用種類的代碼,Material 是調(diào)整屬性和分配資源;
再簡單來說:Shader(著色器)是代碼,可以定義輸入的屬性和資源;而材質(zhì)需要關(guān)聯(lián)一個著色器,并且通過材質(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 //定義一個浮點數(shù)屬性
Rect:_RectMap("Rect Map",Rect)=""{} //定義長方形(非2次方)紋理屬性
Cube:_CubeMap("Cube Map",Cube)=""{} //定義立方體貼圖紋理屬性
Float:_FloatValue("FloatValue",float)=100 //定義一個浮點數(shù)屬性
Vector:_VectorValue("VectorValue",vector)=(1,1,1,1) //定義一個四元素的容器屬性
教程名稱:Unity3D 初識Shader (一) | 語 言:中文 | 頁數(shù)/時長: 4頁 |
軟件版本: unity | 上傳時間:2018/02/27 | 價格:¥0 |
文件格式: docx | 文件大?。?5kb |
您還未登錄
全部評論: 0條