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)。对每个属性来说,默认值放在等号之后:

随后在着色器中,通过使用方括号内的属性名称访问属性值:[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) 为可选项。可用选项有:

示例

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

Page last updated: 2013-06-28