高光照明

高光照明可标识光照射至物体表面且反射至相机时产生的明亮反射高光。 高光照明比漫射光更强,且可更快照射至物体表面。 虽然计算高光照明的时间长于漫射照明,但高光照明具有可将重要细节添加至物体表面的优势。

建模反射要求系统知道光在哪个方向行驶,以及观众的眼睛的方向。 该系统使用 Phong 反射模型的简化版本,该模型采用半向量来近似反射强度。

默认照明状态不计算反射高光。

反射照明公式

反射照明由以下公式描述。

高光照明 = Cₛ * sum[Lₛ * (N · H)P * Atten * Spot]

变量及其类型及其范围如下所示:

参数 默认值 类型 描述
Cs (0,0,0,0) 红色、绿色、蓝色和 alpha 透明度(浮点值) 反射颜色。
sum 空值 空值 每个光的反射分量的总和。
N 空值 3D 矢量(x、y 和 z 浮点值) 顶点法线。
H 空值 3D 矢量(x、y 和 z 浮点值) 半向量。 请参阅中途向量上的部分。
P 0.0 浮点 反射能力。 范围为 0 到 +无穷大
Ls (0,0,0,0) 红色、绿色、蓝色和 alpha 透明度(浮点值) 浅色反射颜色。
Atten 空值 浮点 光衰减值。 请参阅衰减和聚焦因素
现成虚拟机 空值 浮点 聚焦因子。 请参阅衰减和聚焦因素

 

Cs 的值是:

  • 顶点颜色 1,如果反射材料源是漫射顶点颜色,并且第一个顶点颜色在顶点声明中提供。
  • 顶点颜色 2,如果反射材料源是反射顶点颜色,并且第二个顶点颜色在顶点声明中提供。
  • 材料反射颜色

注意 如果采用了任何一种反射材料来源选项且未提供顶点颜色,则使用材料反射颜色。

 

反射组件被固定为 0 到 255,在单独处理和内插所有灯光后。

半途向量

中间有两个向量之间的中间向量:从对象顶点到光源的矢量,从对象顶点到相机位置的矢量。 Direct3D 提供两种方法来计算中间向量。 启用相机相对反射高光(而不是正交反射高光)时,系统会使用相机的位置和顶点的位置以及光的方向向量计算中间向量。 以下公式对此进行了说明。

H = norm(norm(Cp - Vp) + Ldir

 

参数 默认值 类型 描述
Cp 空值 3D 矢量(x、y 和 z 浮点值) 相机位置。
Vp 空值 3D 矢量(x、y 和 z 浮点值) 顶点位置。
Ldir 空值 3D 矢量(x、y 和 z 浮点值) 从顶点位置到光线位置的方向向量。

 

以这种方式确定中间向量可能是计算密集型的。 作为替代方法,使用正交反射高光(而不是相机相对反射高光)指示系统在 z 轴上充当视点无限遥远。 这反映在以下公式中。

H = norm(0,0,1) + Ldir

此设置的计算密集型程度较低,但准确性要低得多,因此最好由使用正交投影的应用程序使用。

示例

在此示例中,该对象使用场景反射浅色和材料反射颜色着色。

根据公式,对象顶点的结果颜色是材料颜色和浅色的组合。

下面的两个图示显示了反射材料颜色(灰色)和白色的反射浅色。

灰色球体插图白色球体插图

下图显示了生成的反射突出显示。

反射突出显示的插图

将反射突出显示与环境照明和漫射照明相结合会产生下图。 应用了所有三种类型的照明后,这更清楚地类似于现实对象。

合并反射突出显示、环境照明和漫射照明的插图

反射照明比漫射照明更密集。 它通常用于提供有关表面材料的视觉线索。 反射高光因表面材料的大小和颜色而异。

照明的数学运算