版本:Unity 6 (6000.0)
语言:英语
材质属性简介
纹理属性

添加材质属性

要将材质属性分配给 着色器在 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 变量类型的方式如下

  • 颜色和矢量属性映射到 float4half4fixed4 变量。
  • 范围和浮点数属性映射到 floathalffixed 变量。
  • 纹理属性映射到普通(二维)纹理的 sampler2D 变量;立方体贴图六个方形纹理的集合,可以表示环境中的反射或几何体后面绘制的天空盒。六个方块形成一个围绕物体的假想立方体的面;每个面代表沿世界轴方向(上、下、左、右、前和后)的视图。 更多信息
    查看 术语表
    映射到 samplerCUBE;3D 纹理映射到 sampler3D

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

使用 线性颜色空间 时,所有材质颜色属性都以 sRGB 颜色提供,但在传递到着色器时会转换为线性值。

例如,如果您的 Properties 着色器块包含一个名为“MyColor”的 Color 属性,那么相应的 “MyColor” HLSL 变量将获得线性颜色值。

对于标记为 FloatVector 类型的属性,默认情况下不会进行颜色空间转换;假设它们包含非颜色数据。可以为浮点数/矢量属性添加 [Gamma] 属性,以指示它们像颜色一样在 sRGB 空间中指定(请参阅 Properties)。

其他资源

材质属性简介
纹理属性