Unity Shader(一)
阿新 • • 發佈:2019-01-24
初識 Shader
本篇介紹了在Unity中建立Shader的基本步驟,以及Shader的結構分析。
上篇連線(Shader基礎篇)
0x00 概述
- 啟動Unity並建立一個新專案: File>New Project
- 建立Shader:Project(也就是Asset欄中)>右鍵>creat>Shader>UnlitShader((頂點片元著色器),SurfaceShader(表面著色器)) >根據自己的需求編輯內容>儲存。
- 建立材質並新增Shader:
- Project>右鍵>creat>Material
- 選中剛建立的Material在Inspector裡選著對應的shader
物體要帶有三角網格
- 建立遊戲物體:在Hierarchy>右鍵>GameObject>3D Object>任意選擇。
- 將材質附加到物體上有一下幾種方式:
- 1、在Hierarchy中選中物體,在Project中拖動material到Inspector面板中。
- 2、在Project中拖動material到Scene中的物體上(如果找不到物體,在Hierarchy中選中,然後在Scene中移動滑鼠(不要單擊)後按“F”鍵)。
整體步驟圖(從左到右):
0x01 結構分析
一個Unity Shader的基本結構如下所示:
`
Shader "Unlit/MyShader"
{
Properties
{
//屬性
_Name("Display Name",PropertyType)=DefaultValue
}
SubShader//子著色器
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
....
ENDCG
}
}
}`
接下來逐個介紹一下。
Shader "Unlit/MyShader"{}
MyShader是建立時候自己起的名字。 Unlit是Inspector選擇shader型別時候當前shader所在的資料夾(可以自行修改),如圖:
Properties
{
//屬性
_Name("Display Name",PropertyType)=DefaultValue
}_Name: 屬性名,在程式碼中使用該名獲取該屬性的內容。
Display Name:在外部Inspector上顯示的名稱(後面會附圖)
PropertyType:屬性的型別,如下表:屬性型別 例子 詳解 Color _Color(“Color”,Color)=(1,1,1,1) 顏色屬性,由RGBA(紅黃藍透明)四個變數來定義 Vector _Vector(“Vector”,Vector)=(2,3,5,1) 四維向量(x,y,z,w) Cube _Cube(“Cube”,Cube)=”while”{} 立方體紋理,簡單說就是6張有聯絡的2D貼圖的組合 2D _2D(“2D”,2D)=”“{} 一張2的階數大小(256,512之類)的貼圖。 3D _3D(“3D”,3D)=”black”{} Int _Int(“Int”,Int)=2 數字型別的屬性,一個整數 Float _Float(“Float”,Float)=1.5 數字型別的屬性,一個浮點數 Range(min,mix) _Range(“Range”,Range(0.0,5.0))=3.0 一個介於最小值和最大值之間的浮點數 DefaultValue定義了這個屬性的預設值。Color:以0~1定義的rgba顏色。比如(1,1,1,1)。2D,3D,Cube:可以是空字元竄或者是”white”,”black”,”gray”,”bump”中的一個。
Tags標籤,是一個鍵值對它的鍵和值都是字串型別,Tags{“TagName”=”Valuel”“TagName2”=”Value2”}如下表:
標籤型別 | 說明 | 例子 |
---|---|---|
Queue | 控制渲染順序,指定該物體屬於哪一個渲染佇列 | Tags{“Queue”=”Transparent”} |
RanderType | 對著色器進行分類 | Tags=”RanderType=”Opaque” |
DisableBatching | 通過該標籤來直接證明是否對該SubShader使用批量處理 | Tags=”DisableBatching”=”True” |
ForceNoShadowCasting | 控制使用該SubShader的物體是否會投影 | Tags=”ForceNoShadowCasting”=”True” |
IgnoreProjector | 通常用於半透明物體 | Tags=”IgnoreProjector”=”True” |
CanUseSpriteAtlas | 當該SubShader是用於Sprites時,將該標籤設為“false” | Tags=”CanUseSpriteAtlas”=”True” |
PreviewType | 指明材質面板將如何預覽該材質,預設情況下,材質將顯示為一個球體。但我們可以自行設定 | Tags=”PreviewType”=”Plane” |
LOD: 這個數值決定了我們能用什麼樣的Shader
Pass:Cg的程式碼片段都寫在裡面。整體如下所示:
0x02 摘要
本篇為Unity Shader篇的最基礎篇。主要講述如何去建立Shader,如何建立材質球並附加Shader到材質,如何建立遊戲物件並將材質附加到遊戲物件。Shader的結構分析,會持續更新,歡迎一起學習。隨時歡迎各位大佬前來指教,提出意見!!!☺☺☺