要使用__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary 将材质属性分配给着色器对象,请在 Properties 代码块内放置一个 Shader 代码块。
如果要访问着色器程序中的一些属性,则需要声明具有相同名称和匹配类型的 Cg/HLSL 变量。
例如下列着色器属性:
_MyColor ("Some Color", Color) = (1,1,1,1)
_MyVector ("Some Vector", Vector) = (0,0,0,0)
_MyFloat ("My float", Float) = 0.5
_MyTexture ("Texture", 2D) = "white" {}
_MyCubemap ("Cubemap", CUBE) = "" {}
可通过如下 Cg/HLSL 代码进行声明以供访问:
fixed4 _MyColor; // low precision type is usually enough for colors
float4 _MyVector;
float _MyFloat;
sampler2D _MyTexture;
samplerCUBE _MyCubemap;
Cg/HLSL 还可以接受 uniform 关键字,但该关键字并不是必需的:
uniform float4 _MyColor;
ShaderLab 中的属性类型会以如下方式映射为 Cg/HLSL 变量类型:
使用线性颜色空间时,所有材质颜色属性均为 sRGB 颜色,但传递到着色器时会被转换为线性数值。
例如,如果 Properties 着色器代码块内含名为“_MyColor”的 Color 属性,则相应的“_MyColor”HLSL 变量将获得线性颜色值。
对于被标记为 Float 或 Vector 类型的属性,默认不进行颜色空间转换;而是假设它们包含非颜色数据。可为浮点/矢量属性 (property) 添加 [Gamma] 特性 (attribute),以表示它们是以 sRGB 空间指定的,就像颜色一样(见属性)。