zoukankan      html  css  js  c++  java
  • 光在参与介质中的传播及辐射传递方程

    光在参与介质中的传播及辐射传递方程

    声明与参考

    本文主要参考和翻译

    1. Efficient Monte Carlo Methods for Light Transport in Scattering Media(Wojciech Jarosz)
    2. Light Transport in Medium(from cornell university)

    参与介质

      云,雾,浑浊的水等类似的介质可以散射光,换句话说,这些介质参与光的传输,故我们把此类介质称作参与介质(participating media)。当我们想要渲染这些参与介质时,就必须弄明白光线在参与介质中传播时是怎样变化的,也就是体渲染技术,本文的目的就是推导体渲染方程。

      如果光在非真空中传播,我们有必要考虑环境中介质对光的传输的影响。光线在传播时会触发四个事件:光子从介质粒子中放射出来;一个光子碰到一个粒子被吸收转化成其他形式的能量,如热能;一个光子击中一个粒子,行进方向发生偏转;其他射线击中粒子,有的光子被偏转到当前射线的行进方向。以上现象分别对应术语:发射(Emission)、吸收(Absorption)、外散射(Out-scattering)、内散射(In-scattering)。

    (图解:箭头由粗到细代表射线辐射衰减,由细到粗代表辐射增强,绿色代表击中的粒子)

    发射(Emission)

    发射指的是有的介质(如火焰)会发射能量,射线穿过介质时,射线辐射会增强。我们先考虑当射线穿过1或者2个单位长度的介质时的情况。

    一般的,当光线穿过长度为d个单位长度的发光介质时,有,易知辐射随介质长度t线性增长:

    在3D中,考虑各向异性的情况(介质不均匀):

    光通过介质x处时,在方向上的方向导数为,其中为介质发光场在x处的梯度,为光在x点处的辐射度,设吸收函数为,x处沿方向粒子发射产生的辐射为,则射线在通过发光介质x处沿方向的变化量为:

    吸收(absorption)

    射线在介质中传播,碰到某些吸光的介质,一部分光子就会被吸收,发射(Emission)事件中入射光出射光的辐射呈线性关系,而这里入射光与出射光成正比关系,比例系数是一个与距离成指数关系的函数,如下图:

    一般地,写成函数如下:

    其中σa为吸收系数。在3D的情况下,我们还得考虑立体角,同样的,我们假设介质是非均匀的,方便起见,我们把吸收系数写成关于某一点x的函数

    当x以的长度步进时,会有的光子被吸收,因此,我们可以有以下表达式:

    移项可得:

    我们让,左边相当于对关于t求导,设为x处吸收系数的梯度,则为吸收系数在方向上的方向导数,故有:

    我们要求的结果为后一个等式,即则射线在通过光吸介质x处沿方向的变化量:

    外散射(Out-scattering)

    外散射是射线在击中粒子时,在其他方向偏转的光子的损失。 由于我们只关心沿着光线的辐射,所以外散射的方向是不重要的,外散射的影响与吸收相同,设散射系数为σs。 总消光系数σt=σa+σs描述了吸收和外散射的辐射损失,外散射导致的辐射变化量可以写作:

    将吸收和外散射导致的变化量写在一块,即:

    内散射(In-scattering)

        外散射使得射线辐射减少,因为射线方向上的部分光子被散射到其他方向。也正因为外散射的存在,其他的射线外散射出的光子可能正好被散射到我们正追踪的光线上,使得射线方向上的辐射增强,我们把这种现象称作内散射。

        我们用i作为下标来表示各种内散射变量,与Emission类似,可以把内散射导致的变化量为:

        内散射的结果受到来自四面八方的光线影响,把这些光的立体角记为。我们可以用球面(整个!!)积分来计算,有:

        其中是内散射的相函数(Phase function),它描述的是介质中某个点的散射在各个立体角方向上的分布情况。从这个函数的作用来看,内散射通常是个各向异性的,相函数有很多模型可以应用。关于相函数的讨论,我想另起一篇,这里不做讨论。

    总结

        我们把以上几个方程合并为:

        这个方程被称为辐射传递或辐射传输方程的微积分形式,或简称为RTE。在计算机图形学中,辐射传递方程(radiative transfer equation)的这种微积分形式通常被称为体渲染方程,我们必须能够解这个方程,以便使用参与介质来渲染图像。 不幸的是,体渲染方程比常规渲染方程更复杂,复杂到应该另起一篇博文来讲述。

  • 相关阅读:
    用perl做数据库迁移
    【记凡客诚品面试】需要规划的人生,需要专精的技术+京东笔试了。。。
    初学者应该看的东西
    mysql安装图解 mysql图文安装教程(详细说明)
    EMS SQL Manager for MySQL
    全局配置文件也面向服务了~续(对性能的优化)
    推荐几款软件界面模型设计工具
    asp.net中实现文件上传
    UltraEdit支持python语法高亮
    理解并发编程中的几种并发方式
  • 原文地址:https://www.cnblogs.com/jackmaxwell/p/7099591.html
Copyright © 2011-2022 走看看