计算机图形学入门22:双向反射分布函数(BRDF)

1.定义

        所谓BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数),指的是从辐射度量学的角度去理解光线的反射,如下图所示。

       所谓反射就是一个点从ωi方向发出的Radiance转化为dA接收到的功率E,然后功率E将转换为其他任何方向ωr发出的Radiance。 也就是一个点(微分面积元)在接受到一定方向上的亮度dE(ωi)之后,再向不同方向把能量辐射出去dLr(ωr)

        因此所谓BRDF就是描述这样一个光线从不同方向入射之后,反射光线的分布情况的函数。数学定义如下。

        上图中下方的式子即为BRDF,它接收两个参数,入射光方向ωi,反射光方向ωr,函数值为反射光的radiance与入射光的iiradiance的比值(从某个方向接受到的光能有多少反射到另外一个方向)。

        从直观的理解来说,不同材质的表面自然会把一定方向上的入射光线反射到不同方向上,如理想光滑表面会把入射光线完全反射到镜面反射方向,其它方向则完全没有。而理想粗糙表面会把入射光线均匀的反射到所有方向。

2.反射方程

        借助BRDF,可以定义出反射方程如下。

        因为BRDF表示从某一个方向考虑入射,然后往某一个方向反射出去会是什么样的结果。假如以某一个反射方向ωr出去的点,从相机方向看到的这个着色点可以接收来至四面八方的不同的光照。那就考虑对于每一个入射方向ωi,都会对应入射方向着色点和出射方向这样的BRDF。BRDF会告诉我们从某一个方向进来的光反射到出射方向有多强,那就将每个方向的入射光线的强度(Radiance)乘以BRDF,再乘以cos\theta(之前的定义),然后把每一个方向上对出射光线的贡献相加,这样就得到了这个点在所有可能得入射光下反射到ωr上的情况

        如上可知,所谓的反射方程定义了任何一个着色点在各个不同的光照环境下,考虑任何一个光照入射方向对观察方向(出射方向)的一个贡献,将所有入射方向的贡献相加,相加就是求一个积分,得到最终的着色效果。

        在进入到渲染方程之前,再仔细观察一下反射方程。

        假如从某个方向观察某个着色点,要考虑所有能够到达这个着色点的所有光线,但是能够达到的可不止是光源发出的光线,还有可能有其他物体上着色点反射的光线,即间接光照。也就是说考虑的入射radiance不止来至光源,也可能来至其他物体反射出去的radiance,这是一个递归的过程。即任何出射的radiance都可能是其他入射的radiance,这就是为什么光线在场景中不止弹射一次的原因,这是一个很难计算的问题。

3.渲染方程

3.1 定义

        渲染方程只是在反射方程的基础之上添加了一个自发光项(Emission term),用来模拟物体自发光(物体有自发光和反射光),从而使得反射方程更加的通用,适用于所有物体表面上的光线传播问题。如下公式。

        其中Le(p,ω0)为自发光项,反射方程中的 cosθ 用 n·ωi 代替 (一样)。注意:所有光线方向均以从平面向外为正方向。

3.2 理解渲染方程

        1.一个点光源和单个物体的场景

        点光源对一个点来说自然只有一个方向有入射光,所以这里没有了积分(相加)。

        2.多个点光源一个物体的场景

        将所有的点光源的贡献全部求和即可。

        3.那么如果有一个是面光源呢?

        其实面光源就相当于无穷多个点光源的集合,由于多个点光源贡献可以相加,那么对面光源任意一点的贡献积分(相加)道理是一样,所以对这个面占据的立体角范围进行积分,然后考虑所有的方向Radiance经过BRDF反射出去的样子。

        4.在场景当中加入其它物体,使得物体之间发生光线交互之后是什么情况呢?

        可以把其它物体同样考虑成面光源,对其所占立体角进行积分即可,只不过对其它物体的立体角积分不像是面光源所有入射方向都有radiance,物体的立体角可能只有个别几个方向有入射的radiance(即多次物体间光线反射之后恰好照射到着色点x),其它方向没有,但本质上都可以视作是面光源。

        图中的渲染方程除了两个radiance,其它所有项都是知道的,可以将上式进一步写成如下图下方所示的简单式子。

        其中各项与原渲染方程中一一对应,(这里其实是有数学严格推导的,不过我们只是为了接下来构建直观的物理解释,对于这些推导不必在意,默认成立即可),再接着,可以把该式子离散化写为线性代数的形式。

        经过两步我们不是很清楚但其实是正确的数学推导之后,得到了这样一个递归式。

        其中L其实就是想要求得的反射光,E是自发光其实就是光源的发光项,K可以理解为对光线进行反射的一种算子操作(因为它由BRDF转化来的)。

        那么利用线性代数的知识很容易就可以推导出L的结果如下。

        其中 为单位矩阵,再接着使用广义二项式定理得到。

        仔细观察这个式子,注意E是光源所发出的光,K为反射算子,这样一个式子的物理含义如下图所示。

        E为光源发出的光,KE则代表对光源反射一次的结果,即直接光照,那么前两项之和就是光栅化当中着色所考虑的结果。对于全局光照(所有光线弹射次数加起来)来说,还考虑了第三项K^{2}E,即一次弹射的间接照明,K^{3}E就是两次弹射的间接照明,依次类推。

        这样来看整个结果就很清晰了,就是光源发光加上直接光照与多次间接光照的结果!而这一切都是从渲染方程推导而来的,因此这也正是渲染方程的物理意义!

        不同弹射次数下同一场景的渲染效果如下。

        显然弹射次数越多越接近真实图片效果,但提升幅度逐渐递减。

        注意:图片顶部中间有块玻璃,当进行第4次弹射时才从黑色变亮。这是因为光从相机出来到玻璃球里至少弹射2次才能出来,如果玻璃是双层的2次弹射只能进去,再经过2次弹射才能出来。

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YanisWu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值