要将材质属性分配给 着色器在 GPU 上运行的程序。 更多信息
查看 术语表 对象 ShaderLabUnity 定义着色器对象结构的语言。 更多信息
查看 术语表,您需要在 Shader
块内放置一个 Properties
块。
如果您想在 着色器程序 中访问其中一些属性,您需要使用相同名称和匹配类型声明一个 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
类型的属性,默认情况下不会进行颜色空间转换;假设它们包含非颜色数据。可以为浮点数/矢量属性添加 [Gamma]
属性,以指示它们像颜色一样在 sRGB 空间中指定(请参阅 Properties)。