DirectX11 点光

点光

1. 什么是点光?

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

这里写图片描述

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

这里写图片描述
(点光向各个方向发射光线;对于任意一点P,都有一条从点光源Q射向点P的线。)

2. 点光的衰减

按物理规律来说,光照强度会随着距离的增加而衰减,它与距离的平方成反比。也就是说,在一点上的光照强度由该点与光源之间的距离d来决定:
这里写图片描述
其中,I0是d =1时的光照强度。不过,这个公式得到的计算结果不是总能令人满意。所以,我们打算使用一个更通用的函数,让美术师和程序员通过一些参数来控制照强度(即,可以让美术师和程序员尝试各种不同的参数,直至得到满意的效果为止),而不是单纯追求物理准确性。用于调节灯光强度的典型公式为:
这里写图片描述

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

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

3. 点光的范围

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值