颜色、材质和光照
顶点颜色和光照是对任何要渲染的几何体所添加的第一步效果。这个操作处在顶点级别,用于计算在纹理被应用之前被使用的基础颜色。
材质和光照参数被用于控制内置顶点光照。顶点光照是Direct3D/OpenGL标准的按顶点计算的光照模式。光照打开时,光照受材质块,颜色材质和平行高光命令的影响。相关命令语法如下所列。
Color <颜色>
设定对象的纯色,颜色可以是用小括号括起来的RGBA值(4值的取值范围0~1),也可以是被中括号括起来的颜色属性名,下面的代码片段说明了这种语法的使用:
Color (1, 0, 0, 0) //设置颜色为红色
Color [ _MainColor ] //设置颜色为_MainColor的颜色
Material { 材质块 }
材质块被用于定义对象的材质属性,包含材质如何和光线产生作用的设置。这些设置都是可以被忽略的,默认为值都被设为黑色(即不产生作用)。相关设置如下:
材质块设置
| 材质块设置 | 说明 |
| Diffuse <颜色> | 漫反射颜色,这是对象的基本颜色 |
| Ambient <颜色> | 环境光颜色,这是当对象被RenderSettings中设定的环境光所照射时对象所表现的颜色 |
| Specular <颜色> | 对象镜面高光的颜色 |
| Shininess <颜色> | 加亮时的光泽度,在0和1之间。0的时候会获得像漫反射光照的高亮,1的时候会获得一个细微的亮斑 |
| Emission <颜色> | 自发光颜色,当不被任何光照所照到时,对象的颜色 |
Ambient * RenderSettings ambient setting + (Light Color * Diffuse + Light Color * Specular) + Emission
提示
计算公式的灯光部分(带括号)对所有打在对象上的光线重复使用,即该部分是打在对象上的所有光线经括号内公式计算后的和。
Lighting 开关状态
定义材质块中的设定是否有效,你必须使用Lighting On命令开启光照,而Off时的颜色则通过Color命令直接给出。
SeparateSpecular 开关状态
这个命令会添加高光光照到着色器通道的末尾,因此贴图对高光没有影响。只在光照开启时有效。
ColorMaterial 颜色
使用顶点的颜色替代材质的颜色集。AmbientAndDiffuse替代材质的环境光和漫反射值; Emission替代材质中的自发光发射值。
下面的代码是一个完整的顶点光照着色器代码:
Shader "VertexLit" {
Properties {
_Color ("Main Color", Color) = (1, 1, 1, 0) //定义颜色属性
_SpecColor ("Spec Color", Color) = (1, 1, 1, 1) //定义颜色属性
_Emmisive ("Emmisive Color", Color) = (0, 0, 0, 0) //定义颜色属性
_Shininess ("Shininess", Range (0.01, 1)) = 0.7 //定义浮点数范围属性
_MainTex ("Base (RGB)", 2D) = "white" {} //定义2D纹理属性
}
SubShader {
Pass {
Material {
Diffuse [_Color] //设置漫反射光颜色
Ambient [_Color] //设置环境光颜色
Shininess [_Shininess] //设置加亮时光泽度
Specular [_SpecColor] //设置镜面高光颜色
Emission [_Emmisive] //设置自发光颜色
}
Lighting On //开启光照
SeparateSpecular On //开启高光
//设置纹理合并方式
SetTexture [_MainTex] {Combine texture * primary DOUBLE, texture * primary}
} } FallBack "Diffuse" }