原文地址:http://blog.sina.com.cn/s/blog_6ad33d3501015cb7.html
ShaderLab syntax: Properties
ShaderLab语法:属性
Shaders can define a list of parameters to be set by artists in Unity's
着色器可以由艺术家定义一个参数列表,这个参数值可以在Unity3D的材质检索器中查看。着色器中属性块定义了这些参数。
Syntax
Properties { Property [Property ...] }
Defines the property block. Inside braces multiple properties are defined as follows.
- 定义了1个属性块。括号内的属性定义如下:
-
name
("display name", Range (min, max)) = number
-
Defines a float property, represented as a slider from
min to max in the inspector. - 定义了1个float属性,范围是在min到max之间的值,可以利用检索器中对应的滑块调节他们。
-
name
("display name", Color) = (number,number,number,number) - Defines a color property.
- 定义了一个颜色
-
name
("display name", 2D) = "name" { options } - Defines a 2D texture property.
- 定义了1个2D纹理
-
name
("display name", Rect) = "name" { options } - Defines a rectangle (non power of 2) texture property.
- 定义了1个矩形纹理属性
-
name
("display name", Cube) = "name" { options } - Defines a cubemap texture property.
- 定义了1个cubemap纹理属性
-
name
("display name", Float) = number - Defines a float property.
- 定义了1个float
-
name
("display name", Vector) = (number,number,number,number) - Defines a four component vector property.
- 定义了1个向量,该向量由4个分量组成。
Details
细节
Each property inside the shader is referenced by
每个在Shader中的属性是依据属性的名字来引用的(在Unity3d中,通常属性名是以下划线开头)。属性的名字将在材质检索器中显示。每一个属性的默认值为等号后的值。
- For
Range and Float properties it's just a single number.
Range和Float属性仅仅是1个数字
- For
Color and Vector properties it's four numbers in parentheses.
Color和Vector属性由4个数字组成
- For texture (2D,
Rect, Cube) the default value is either an empty string, or one of builtin default textures: "white", "black", "gray" or "bump". - 纹理属性(2D,Rect,Cube)的默认值是1个字符串,或者是默认的内置纹理:"白色","黑色","灰色","凸点"
Later on in the shader, property values are accessed using property name in square brackets:
要在Shader编程中访问属性可以用属性名加方括号来访问如:[name];
Example
例子
Properties { // properties for water shader _WaveScale ("Wave scale", Range (0.02,0.15)) = 0.07 // sliders滑块 _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) // color颜色 _ReflectionTex ("Environment Reflection", 2D) = "" {} // textures纹理 _RefractionTex ("Environment Refraction", 2D) = "" {} _Fresnel ("Fresnel (A) ", 2D) = "" {} _BumpMap ("Bumpmap (RGB) ", 2D) = "" {} }
Texture property options
纹理属性选项
The
纹理属性的花括号内的选项是可选的。可用的选项是:
TexGen
-
Automatic texture coordinate generation mode for this texture. Can be one of
ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal; these correspond directly to OpenGL texgen modes. Note that TexGen is ignored if custom vertex programs are used.
纹理坐标自动生成模式。可以是ObjectLinear,EyeLinear , SphereMap, CubeReflect,CubeNormal之一,这些直接对应到OpenGL texgen模式的。注意:如果使用自定义的顶点程序,TexGen被忽略。
。
LightmapMode 光照模式
-
If given, this texture will be affected by per-renderer lightmap parameters. That is, the texture to use can be not in the material, but taken from the settings of the Renderer instead, see
Renderer scripting documentation. - 如果给定的,这种纹理将受到预渲染的光照参数影响。也就是说,这种纹理的使用效果不是取决于材质,而是取决于渲染设置。详情请参考渲染脚本文件。
Example
// EyeLinear texgen mode example Shader "Texgen/Eye Linear" { Properties { _MainTex ("Base", 2D) = "white" { TexGen EyeLinear } } SubShader { Pass { SetTexture [_MainTex] { combine texture } } } }