Unity-ShaderLab:Properties
著色器可以定義 Unity?材質(zhì)檢視面板中由美術(shù)師設置的參數(shù)列表。著色器文件中的 Properties 代碼塊將定義這些屬性。
語法
屬性
定義屬性代碼塊。在大括號內(nèi),多個屬性定義如下。
數(shù)字和滑動條
這些全都定義一個具有默認值的數(shù)字(標量)屬性。Range
?格式使該屬性顯示為一個滑動條,范圍在?min?到?max?之間。
顏色和矢量
使用給定 RGBA 分量的默認值定義顏色屬性,或使用默認值定義 4D 矢量屬性。顏色屬性會顯示拾色器,并根據(jù)顏色空間按需進行調(diào)整(請參閱著色器程序中的屬性)。矢量屬性顯示為四個數(shù)字字段。
紋理
分別定義?2D 紋理、立方體貼圖或?3D(體積)屬性。
詳細信息
著色器中的每個屬性均通過?name?引用(在 Unity 中,著色器屬性名稱通常以下劃線開頭)。屬性在材質(zhì)檢視面板中將顯示為?display name。每個屬性都在等號后給出默認值:
對于?Range?和?Float?屬性,默認值僅僅是單個數(shù)字,例如“13.37”。
對于?Color?和?Vector?屬性,默認值是括在圓括號中的四個數(shù)字,例如“(1,0.5,0.2,1)”。
對于 2D 紋理,默認值為空字符串或內(nèi)置默認紋理之一:“white”(RGBA:1,1,1,1)、“black”(RGBA:0,0,0,0)、“gray”(RGBA:0.5,0.5,0.5,0.5)、“bump”(RGBA:0.5,0.5,1,0.5)或“red”(RGBA:1,0,0,0)。
對于非 2D 紋理(立方體、3D 或 2D 數(shù)組),默認值為空字符串。如果材質(zhì)未指定立方體貼圖/3D/數(shù)組紋理,則使用灰色(RGBA:0.5,0.5,0.5,0.5)。
稍后在著色器的固定函數(shù)部分中,可使用括在方括號中的屬性名稱來訪問屬性值:[name]。例如,可通過聲明兩個整數(shù)屬性(例如“SrcBlend“和”DstBlend”)來使混合模式由材質(zhì)屬性驅(qū)動,然后讓?Blend 命令使用它們:Blend [_SrcBlend] [_DstBlend]
。
Properties
?代碼塊中的著色器參數(shù)被序列化為材質(zhì)數(shù)據(jù)。著色器程序?qū)嶋H上可以有更多參數(shù)(如矩陣、矢量和浮點數(shù)),這些參數(shù)在運行時從代碼中在材質(zhì)上設置,但如果它們不是 Properties 代碼塊的一部分,則不會保存它們的值。這對于完全由腳本代碼驅(qū)動的值最有用(使用?Material.SetFloat?和類似函數(shù))。
屬性特性和繪制器
在屬性前面,可指定可選的特性(用方括號括起)。這些是 Unity 可以識別的特性,或者它們可以指示您自己的?MaterialPropertyDrawer 類?來控制它們在材質(zhì)檢視面板中的呈現(xiàn)方式。Unity 可以識別的特性包括:
[HideInInspector]
?- 不在材質(zhì)檢視面板中顯示屬性值。[NoScaleOffset]
?- 對于具有此特性的紋理屬性,材質(zhì)檢視面板不會顯示紋理平鋪/偏移字段。[Normal]
?- 表示紋理屬性需要法線貼圖。[HDR]
?- 表示紋理屬性需要高動態(tài)范圍 (HDR) 紋理。[Gamma]
?- 表示在 UI 中將浮點/矢量屬性指定為 sRGB 值(就像顏色一樣),并且可能需要根據(jù)使用的顏色空間進行轉(zhuǎn)換。請參閱著色器程序中的屬性。[PerRendererData]
?- 表示紋理屬性將以?MaterialPropertyBlock?的形式來自每渲染器數(shù)據(jù)。材質(zhì)檢視面板會更改這些屬性的紋理字段 UI。[MainTexture]
?- 表示一個屬性 (property) 是材質(zhì)的主紋理。默認情況下,Unity 將屬性 (property) 名稱為?_MainTex
?的紋理視為主紋理。如果您的紋理具有其他屬性 (property) 名稱,但您希望 Unity 將這個紋理視為主紋理,請使用此屬性 (attribute)。如果您多次使用此屬性 (attribute),則 Unity 會使用第一個屬性 (property),而忽略后續(xù)屬性 (property)。[MainColor]
?- 表示一個屬性 (property) 是材質(zhì)的主色。默認情況下,Unity 將屬性 (property) 名稱為?_Color
?的顏色視為主色。如果您的顏色具有其他屬性 (property) 名稱,但您希望 Unity 將這個顏色視為主色,請使用此屬性 (attribute)。如果您多次使用此屬性 (attribute),則 Unity 會使用第一個屬性 (property),而忽略后續(xù)屬性 (property)。
示例