原文链接:https://docs.unity3d.com/Manual/SL-Material.html
材质和光照参数用于控制内置的顶点光照。顶点光照是为每个顶点计算的标准的Direct3D/OpenGL光照模型。Lighting on将其打开。光照受Material语句块,ColorMaterial,和SeparateSpecular命令影响。
请注意:材质/光照命令当使用顶点片段shader时将不起作用,因为在这种情况下所有的计算将完全在shader中被描述。目前建议使用可编程的shader来代替传统的顶点光照。这样你就可以不用在这里使用命令来描述,然后你可以定义自己的顶点片段shader来控制所有的光照,纹理等等。
对于任何被渲染的几何体,顶点颜色和光照是第一个被计算影响的。它在顶点级别运行,并且计算在纹理采样前的基础颜色。
语法
上层的命令控制是否使用固定管线光照,以及其他一些配置选项。主要是建立Material语句块,详细信息请见下文。
Color
Color color
将对象设置为纯色。颜色可以是圆括号中的四个RGBA值,也可以是方括号中的颜色属性名称。
Material
Material {Material Block}
Material语句块用于定义对象的材质属性。
Lighting
Lighting On | Off
为了使在Material语句块中定义的设置生效,你必须使用“Lighting On”命令来启用光照。如果光照被关闭,则直接从Color命令中获取颜色。
SeparateSpecular
SeparateSpecular On | Off
这个命令使镜面高光光照被添加到shader的pass的最后,这样镜面高光光照就不会被纹理影响。只有当光照被开启时它才有效果。
ColorMaterial
ColorMaterial AmbientAndDiffuse | Emission
使每个顶点的颜色被用来代替材质中设置的颜色。AmbientAndDiffuse代替材质中环境光和漫反射的值,Emission替换材质中自发光的值。
Material Block
这包含了材质如何与光照做出反应的设置。这些设置都可以被忽视,在这种情况下会默认为黑色(比如没有任何影响)。
Diffuse color:漫反射颜色组件,这是一个对象的基础颜色。
Ambient color:环境光组件,这是对象在光照窗口中设置的环境光照射到对象时的颜色。
Specular color:物体的镜面高光反射颜色。
Shininess number:高光的清晰度,在0和1之间。如果是0则是一块巨大的像漫反射一样的高光,如果是1则是一个小光斑。
Emission color:物体当不被任何光线照射时的颜色。
当光照射到物体的完整的颜色是:
环境光 * 光照窗口中环境光强度设置 + (光线颜色 * 漫反射 + 光线颜色 * 镜面反射) + 自发光
等式(括号内的)的光照部分被所有照射到物体的光重复。
通常,您希望保持漫反射和环境光颜色相同(所有内置Unity shader都执行此操作)。
例子
总是以纯红色渲染对象:
Shader "Solid Red" {
SubShader {
Pass { Color (1,0,0,0) }
}
}
基础的shader使对象为白色并且允许顶点光照:
Shader "VertexLit White" {
SubShader {
Pass {
Material {
Diffuse (1,1,1,1)
Ambient (1,1,1,1)
}
Lighting On
}
}
}
一个扩展的版本增加了材质的颜色作为材质监视面板中可视化的一个属性:
Shader "VertexLit Simple" {
Properties {
_Color ("Main Color", COLOR) = (1,1,1,1)
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
}
Lighting On
}
}
}
最后,这是一个完全完备的顶点光照shader(也可以看看设置纹理引用章节,链接见原网页):
Shader "VertexLit" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0)
_SpecColor ("Spec Color", Color) = (1,1,1,1)
_Emission ("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range (0.01, 1)) = 0.7
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
Combine texture * primary DOUBLE, texture * primary
}
}
}
}