Version: Unity 6.0 (6000.0)
语言 : 中文
材质属性简介
纹理属性

添加材质属性

要使用__ 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 变量类型:

  • Color 和 Vector 属性被映射为 float4half4fixed4 变量。
  • Range 和 Float 属性被映射为 floathalffixed 变量。
  • 对于普通 (2D) 纹理,Texture 属性被映射为 sampler2D 变量;立方体贴图 (Cubemap) 被映射为 samplerCUBE__;3D 纹理被映射为 sampler3D__。

颜色空间和颜色/矢量着色器数据

使用线性颜色空间时,所有材质颜色属性均为 sRGB 颜色,但传递到着色器时会被转换为线性数值。

例如,如果 Properties 着色器代码块内含名为“_MyColor”的 Color 属性,则相应的“_MyColor”HLSL 变量将获得线性颜色值。

对于被标记为 FloatVector 类型的属性,默认不进行颜色空间转换;而是假设它们包含非颜色数据。可为浮点/矢量属性 (property) 添加 [Gamma] 特性 (attribute),以表示它们是以 sRGB 空间指定的,就像颜色一样(见属性)。

其他资源

材质属性简介
纹理属性