ShaderLab 语法:Properties        

着色器可以定义一系列的参数,这些参数将由 Unity 材质检视器中的设计师设定。在着色器文件中的属性 (Properties) 块定义参数。

语法

属性 (Properties) { Property [Property ...] }
定义属性块。括号内,多个属性定义如下。
name ("display name", Range (min, max)) = number
定义浮点属性,代表检视器中从最小值 (min)最大值 (max)的滑块。
name ("display name", Color) = (number,number,number,number)
定义颜色属性。
name ("display name", 2D) = "name" { options }
定义二维纹理属性。
name ("display name", Rect) = "name" { options }
定义矩形(非 2 的幂)纹理属性。
name ("display name", Cube) = "name" { options }
定义立方体贴图纹理属性。
name ("display name", Float) = number
定义浮点属性。
name ("display name", Vector) = (number,number,number,number)
定义四分量向量属性。

详细信息

着色器内部的每个属性都被名称 (name) 引用(Unity 中,着色器属性名称以下划线开头是很常见的)。在材质检视器中属性会显示为显示名称 (display name)。对每个属性来说,默认值放在等号之后:

  • 对于范围 (Range)浮点 (Float) 属性,默认值只是一个数字。

  • 对于颜色 (Color)向量 (Vector) 属性来说,默认值为圆括号中的四个数字。

  • 对纹理(二维 (2D)矩形 (Rect)立方体 (Cube))来说,默认值可以是一个空字符串或者是以下内置默认纹理中的一种:"白色”、“黑色”、“灰色”或“凹凸贴图”。

随后在着色器中,通过使用方括号内的属性名称访问属性值:[name].

示例

Properties {    // 水着色器的属性    _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // 滑块    _ReflDistort ("Reflection distort", Range (0,1.5)) = 0.5    _RefrDistort ("Refraction distort", Range (0,1.5)) = 0.4    _RefrColor ("Refraction color", Color)  = (.34, .85, .92, 1) // 颜色    _ReflectionTex ("Environment Reflection", 2D) = "" {} // 纹理    _RefractionTex ("Environment Refraction", 2D) = "" {}    _Fresnel ("Fresnel (A) ", 2D) = "" {}    _BumpMap ("Bumpmap (RGB) ", 2D) = "" {}} 

纹理属性选项

在纹理属性的花括号内的选项 (options) 为可选项。可用选项有:

  • TexGen texgenmode: 该纹理的自动纹理协调生成模式。可以是 ObjectLinearEyeLinearSphereMapCubeReflectCubeNormal 中的一种;这些直接对应 OpenGL texgen 模式。请注意:如果使用自定义顶点程序,则 TexGen 模式将被忽略。

  • LightmapMode 如果启用此模式,该纹理会受到每个渲染器光照贴图参数的影响。也就是说,将使用的纹理可以不在材质中,而是来自渲染器设置,请参见渲染器脚本文档。

示例

// EyeLinear texgen 模式示例Shader "Texgen/Eye Linear" {    Properties {        _MainTex ("Base", 2D) = "white" { TexGen EyeLinear }    }    SubShader {        Pass {            SetTexture [_MainTex] { combine texture }        }    }} 
,