漫射照明

漫射照明取决于光的方向和物体表面的法线。 光方向和表面法向矢量的改变会导致漫射照明在物体表面上发生变化。 计算漫射照明需要更长的时间,因为它随每个对象顶点而变化,但使用它的好处在于它能够为对象着色并赋予它们三维 (3D) 深度。

在调整任何衰减效果的光强度后,照明引擎根据顶点的正态角度和事件光的方向计算剩余光线的反射量。 照明引擎跳到此步骤进行定向光,因为它们不会在距离上衰减。 系统考虑两种反射类型,漫射和反射,并使用不同的公式来确定每个反射的光量。

计算反射光量后,Direct3D 将这些新值应用于当前材料的漫射和反射反射属性。 生成的颜色值是光栅器用来生成 Gouraud 底纹和反射突出显示的漫射和反射组件。

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

Diffuse Lighting = sum[Cd*Ld*(N.Ldir)*Atten*Spot]

参数 默认值 类型 描述
sum 空值 空值 每个光的漫射分量的总和。
Cd (0,0,0,0) D3DCOLORVALUE 漫射颜色。
Ld (0,0,0,0) D3DCOLORVALUE 光漫射颜色。
N 空值 D3DVECTOR 顶点法线
Ldir 空值 D3DVECTOR 从对象顶点到光线的方向向量。
Atten 空值 FLOAT 光衰减。 请参阅衰减和聚焦因素
现成虚拟机 空值 FLOAT 聚焦因子。 请参阅衰减和聚焦因素

 

若要计算衰减(Atten)或聚光灯特征(现成),请参阅 衰减和聚焦因子

漫射组件固定为 0 到 255,在单独处理和内插所有灯光后。 生成的漫射照明值是环境、漫射和辐射光值的组合。

示例

在此示例中,该对象使用光漫射颜色和材料漫射颜色着色。

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

下面的两个图示显示了材料颜色,即灰色,浅色,红色为亮红色。

灰色球体插图红色球体插图

生成的场景如下图所示。 场景中的唯一对象是一个球体。 漫射照明计算采用材料和光漫射颜色,并使用点积按光方向和顶点法线之间的角度对其进行修改。 因此,当球体表面远离光时,球体背面变暗。

带有漫射照明的球体插图

将漫射照明与上一示例的环境照明组合在一起,将对象的全部表面着色。 环境光会遮盖整个表面,漫射光有助于揭示对象的 3D 形状,如下图所示。

具有漫射照明和环境照明的球体插图

漫射照明比环境照明更密集。 由于它依赖于顶点法线和光方向,因此可以在三维空间中看到对象几何图形,这会产生比环境照明更逼真的照明。 可以使用反射高光来实现更逼真的外观。

照明的数学运算