衰减和聚焦因子 (Direct3D 9)
全局照明公式的漫射和反射光分量涉及介绍光线衰减和聚焦锥形的术语。 下面介绍了这些术语。
衰减
光线的衰减取决于光线的类型和光线与顶点位置之间的距离。 若要计算衰减,请使用以下公式之一。
Atten = 1/( att0i + att1i * d + att2i * d²)
其中:
参数 | 默认值 | 类型 | 说明 | 范围 |
---|---|---|---|---|
att0i | 0.0 | FLOAT | 恒定衰减系数 | 0 至正无穷 |
att1i | 0.0 | FLOAT | 线性衰减因素 | 0 至正无穷 |
att2i | 0.0 | FLOAT | 二次衰减因素 | 0 至正无穷 |
d | 空值 | FLOAT | 顶点位置至光线位置的距离 | 空值 |
- 如果光线是定向光,则 Atten = 1。
- 如果光线与顶点之间的距离超出光线范围,则 Atten = 0。
att0、att1、att2 值由 D3DLIGHT9 的 Attenuation0、Attenuation1 和 Attenuation2 成员指定。
光线与顶点位置之间的距离始终为正。
d = | Ldir |
其中:
参数 | 默认值 | 类型 | 说明 |
---|---|---|---|
Ldir | 空值 | D3DVECTOR | 从顶点位置到光线位置的方向矢量 |
如果 d 大于光的范围,即 D3DLIGHT9 结构的 Range 成员,则 Direct3D 不会进行进一步的衰减计算,并且不会对光向顶点应用任何影响。
衰减常量充当公式中的系数 - 你可以通过对其进行简单的调整生成各种衰减曲线。 你可以将 Attenuation1 设置为 1.0,以创建不会衰减但仍然受制于范围的光线,也可以测试不同的值以实现不同的衰减效果。
光线的最大范围处的衰减不是 0.0。 若要阻止光线范围内的光线突然出现,应用程序可以扩大光线范围。 或者,应用程序可以设置衰减常量,以便光线范围内的衰减因素接近 0.0。 将衰减值乘以光线颜色的红色、绿色和蓝色分量,以缩放作为光线到达顶点的距离因素的光线强度。
聚焦因素
以下公式指定了聚焦因素。
参数 | 默认值 | 类型 | 说明 | 范围 |
---|---|---|---|---|
rhoi | 空值 | FLOAT | 聚焦 i 的余弦(角度) | 空值 |
phii | 0.0 | FLOAT | 聚焦 i 的 Penumbra 角度(以弧度为单位) | [thetai, pi) |
thetai | 0.0 | FLOAT | 聚焦 i 的 Umbra 角度(以弧度为单位) | [0, pi) |
衰减 | 0.0 | FLOAT | 衰减因素 | (负无穷,正无穷) |
其中:
rho = norm(Ldcs).norm(Ldir)
and:
参数 | 默认值 | 类型 | 说明 |
---|---|---|---|
Ldcs | 空值 | D3DVECTOR | 相机空间中光线方向的负数 |
Ldir | 空值 | D3DVECTOR | 从顶点位置到光线位置的方向矢量 |
计算光衰减后,Direct3D 还会考虑聚光效果(如果适用)、光线从表面反射的角度,以及用于计算该顶点的漫射和反射成分的当前材料的反射率。 有关详细信息,请参阅 SpotLight。
相关主题