7.10 点光

在现实生活中,最常见的点光源是灯泡;它可以向各个方向发射光线(参见图7.19)。对于任意一点P,都有一条从点光位置Q射向点P的线。通常,光照向量与点光的传播方向相反;也就是,该方向从点P指向点光源Q

\[{\bf{L}} = \frac{{{\bf{Q}} - {\bf{P}}}}{{\left\| {{\bf{Q}} - {\bf{P}}} \right\|}}\]

本质上,点光和平行光之间的唯一区别是光照向量的计算方式——点光会随着点的位置而变化,而平行光会保持为一个常量。

图7.19
图7.19 点光向各个方向发射光线;对于任意一点P,都有一条从点光源Q射向点P的线。

7.10.1 衰减

按物理规律来说,光照强度会随着距离的增加而衰减,它与距离的平方成反比。也就是说,在一点上的光照强度由该点与光源之间的距离d来决定:

\(I(d) = \frac{{{I_0}}}{{{d^2}}}\)

其中,I0d =1时的光照强度。不过,这个公式得到的计算结果不是总能令人满意。所以,我们打算使用一个更通用的函数,让美术师和程序员通过一些参数来控制照强度(即,可以让美术师和程序员尝试各种不同的参数,直至得到满意的效果为止),而不是单纯追求物理准确性。用于调节灯光强度的典型公式为:

\(I(d) = \frac{{{I_0}}}{{{a_0} + {a_1}d + {a_2}{d^2}}}\)

我们将a0a1a2称为衰减参数,它们由美术师或程序员来指定。例如,当你希望光照强度与距离成反比时,可以设置a0=0、a1=1、a2=0。当你希望光照强度与距离的平方成反比时,可以设置a0=0、a1=0、a2=1。把衰减参数引入光照方程,得到:

\(LitColor = {k_{spot}}({\bf{A}} + \frac{{{k_d}{\bf{D}} + {k_s}{\bf{S}}}}{{{a_0} + {a_1}d + {a_2}{d^2}}})\)  (公式7.4)

注意,因为环境光模拟的是充斥周围的间接光照,因此衰减参数并不会影响环境光

7.10.2 范围

对于点光来说,我们可以引入一个附加的范围参数。当一个点与点光源之间的距离大于指定的范围时,使它不接收该光源的照射。当需要让一个光源只对一个特定区域产生光照时,该参数非常有用。虽然使用衰减参数也可以让光照强度随着距离的增加而衰减,但是明确地指定光源范围仍然有益。范围参数可以用于优化着色器代码。我们马上就会看到,在着色器代码中,如果一个点的位置超出了光照范围,那我们就可以通过动态分支语句跳过该点的光照计算。范围参数不影响平行光,因为这种光源的位置非常远。

文件下载(已下载 590 次)

发布时间:2014/8/6 下午2:41:10  阅读次数:4299

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号