zoukankan      html  css  js  c++  java
  • 全局照明算法基础——从辐射亮度到渲染方程

      全局照明(Global Illumination)问题上已经有很多著名的算法,如路径追踪(Path Tracing),辐照度(Radiosity)等。绝大部分书籍/教材都直接介绍了做法,在理论方面有所欠缺(比如算法的正确性)。这段时间在看《Advanced Global Illumination》,大呼爽快,所以做了这些笔记。


    一、方向和立体角

    clip_image002

      立体角(Solid Angle)是平面角的推广。如上图,考虑一块不规则的曲面,其在单位球体(球心在原点,半径clip_image004)上的投影为曲面clip_image006,则clip_image006[1]的面积clip_image008为该曲面对应的立体角clip_image010。根据定义易知,任何包含原点的球体对应的立体角都为clip_image012。如果用球坐标clip_image014来刻画立体角,那么其微分clip_image016可以被表示为

    clip_image018

    此外,根据立体角的定义,可以给出任何曲面元对应立体角的计算公式——

    clip_image020

    其示意图如下:

    clip_image022


    二、Radiance的定义

      考虑密度函数clip_image024,它给出在时空坐标clip_image026处单位体积内沿方向clip_image028、波长为clip_image030的光子的数量。那么给定位置clip_image032、时间clip_image034、方向clip_image036以及波长clip_image038,容易知道单位时间内沿方向clip_image016[1]通过面元clip_image040的、波长在clip_image042间的光子的能量为

    clip_image044

    其中clip_image046是这些光子的速度。在波长范围clip_image048、全体立体角clip_image010[1]、曲面clip_image006[2]上对clip_image050积分得

    clip_image052

    这就是曲面clip_image006[3]上的辐射通量(Flux)的定义。

      类似地,定义辐射照度(Irradiance)为

    clip_image054

    辐射强度(Intensity)为

    clip_image056

    以及辐射亮度(Radiance)——

    clip_image058

    这几个量间有以下关系:

    clip_image060


    三、Radiance的守恒性质

      从clip_image062的定义可知,Radiance是空间位置和方向的函数可以写作clip_image064,表示从空间位置clip_image066出发、朝向clip_image068Radiance。(类似地,clip_image070表示空间位置clip_image066[1]处朝方向clip_image072Radiance)若clip_image066[2]clip_image074间没有遮挡,则有以下重要性质成立:

    clip_image076

      证明:

    clip_image078

      如上图,由Radiance的定义有

    clip_image080

    其中clip_image082是从clip_image084出发向clip_image086发射的能量。根据能量守恒,它们必定都被clip_image086[1]接收,即

    clip_image088

    又由立体角的性质

    clip_image090

    clip_image092

    代入得

    clip_image094

    整理即得clip_image076[1]


    四、以Radiance来量度传感设备响应

      摄像机、人眼等感光设备所得到的光的量度可以用Radiance来衡量,而非Flux等。由此可以得出一些结论,比如一个明亮的物体随着观察者距离的增加不会显得更暗,这是因为在光的传播过程中Radiance不随距离改变。 


    五、BRDF

      一束光照射到某个表面上,反射的效果随着表面的材质有所不同。譬如,理想的镜子会把所有的入射光反射到某个特定的方向,而在其他方向上的反射光为0;理想的Lambertian表面会把入射光往所有的方向均匀地反射。反射光在不同方向上的多少分布,再结合入射光的方向所构成的函数,称为bidirectional reflectance distribution functionBRDF),记作clip_image096,表示沿clip_image098方向照射到clip_image066[3]处的光在clip_image068[1]方向上的分布。准确地说:

    clip_image100

    并非所有的物体表面的反射都能用BRDF来建模,譬如通透的玉石(入射光可以从某一处进入玉石内部,然后从另一处穿出)等。一个把透明物体的表面纳入考虑的函数叫做bidirectional scattering distribution functionBSDF),它描述了所有方向的入射光和出射光的分布;Bidirectional surface scattering reflectance distribution functionBSSRDF)则更加强大(使用起来也更为困难),它可以描述前面提到的通透的玉石对光的作用。在这里,为了简化问题,假设所有的物体表面都使用BRDF描述。


    六、BRDF的几个性质

      由BRDF的性质可知,某不透明的、不发光的表面上某一点clip_image066[4]处朝clip_image068[2]Radiance是此点反射外来光的结果,可表示为

    clip_image102

    其中clip_image104是从clip_image106方向来的光在clip_image068[3]方向上反射的结果。根据BRDF的定义有

    clip_image108

    于是,

    clip_image110

    该式在之后会介绍的渲染方程中扮演了重要的角色。

      Reciprocity:规定任意BRDF满足clip_image112,由此,不妨将BRDF记作clip_image114

      能量守恒:单位面积的入射能量为

    clip_image116

    而单位面积反射的总能量为

    clip_image118

    于是由能量守恒:

    clip_image120


    七、渲染方程(The Rendering Equation

      clip_image064[1]可以被分为两部分:clip_image066[5]处自身向clip_image068[4]方向发出的光和clip_image066[6]点反射外来光产生的光。即

    clip_image122

    其中clip_image124是自发光项,clip_image126是反射项。根据6中的推导,反射项clip_image126[1]可以被表示为

    clip_image128

    代入得

    clip_image130

    这就是所谓的渲染方程。可以看到该方程是递归的,且包含了一个不易计算的积分(只有在某些极简单的场景下才能求出解析解)。几乎所有的全局照明算法都是在求解渲染方程,因此称其为图形学的理论基石之一也不为过。

  • 相关阅读:
    Hsqldb中设置主键,并让主键自增
    解决Hsqldb指针只能单向移动,不能回滚问题(.first())
    MySql服务的启动和停止
    jetty和tomcat比较
    查看某一端口被什么程序占用
    小程序修改swiper小圆点
    小程序返回上一页。或者某一页上刷新返回页
    小程序或者vue商品秒杀倒计时
    小程序 wx.switchTab 不能带参数的解决办法
    微信小程序倒计时60S
  • 原文地址:https://www.cnblogs.com/AirGuanZ/p/6389628.html
Copyright © 2011-2022 走看看