会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 3D图形
Volume Rendering
发表日期:2007-03-18 14:30:30作者: 出处:  

   我们知道空气中存在着各种的微粒,光线在空气中传播的时候会和空气中的各种微粒相互作用。这些相互作用会改变光线的强度和方向,这样我们计算真实的光照的话,我们就必须把这些相互作用纳入考虑范围。

我们首先要来看看光线和微粒的相互作用,这些作用共有三种情况:

1 吸收
  当光线和微粒相互作用的时候,有些光能被粒子吸收变成热能和其他形式的能量。通过吸收光线离开微粒后亮度减少。

  吸收系数σa(p,w)表示在p点朝w方向单位距离上面光线的吸收概率,单位是1/m,通常情况下这个吸收系数和位置,密度等等因素相关,但我们在计算的时候做适当的简化。我们考虑在只有吸收的情况下离开微粒时候的亮度变化量

  dLo=Lo-Li=-σa(p,w)*Li*dt

Lo是光线离开微粒的亮度,Li是光线入射时候的亮度。于是我们可以得到

  Lo=Li*exp(-∫σa(p,w)*dt) //在距离t上积分

2 发射
  和吸收作用一样,当光线和微粒相互作用时,其他形式的能量也可能通过化学反应等转化成为可见的光能。

  这个过程比较复杂,我们很难对其进行较为准确的建模。我们假设Le(p,w)等于在p点朝w方向单位距离威力增加的光量。我们考虑在只有发射的情况下离开微粒时候的亮度变化量

  dLo=Le(p,w)*dt

3 散射
  光线和微粒作用,改变了原来的传播方向,向新的方向传播。对于散射出视线方向的散射我们称之为out- Scattering,这样的散射会减少视线方向的光线亮度。而对于那些其他方向的光线散射到视线方向的我们称之为in- Scattering, 这样的散射会增加视线方向的光线亮度。

对于out- Scattering的情况我们和吸收一样处理,我们假设σs(p,w)散射概率,我们考虑在只有out- Scattering的情况下离开微粒时候的亮度变化量

  dLo=Lo-Li=-σs(p,w)*Li*dt

我们可以得到

  Lo=Li*exp(-∫σs(p,w)*dt) //在距离t上积分

最后是in- Scattering作用。我们引入相位函数p(w1,w)表示光线从w1方法散射到w方向的概率, 我们考虑在只有in- Scattering的情况下离开微粒时候的亮度变化量

  dLo=σs(p,w)* ∫p(w1,w)*L(w1)*dw1 //在球形上积分

我们全面考虑上面提到的三种情况,那么当光线离开微粒的时候的亮度变化量

  dLo=-(σs(p,w)+σa(p,w))*Li*dt+Le(p,w)dt+σs(p,w)* ∫p(w1,w)*L(w1)*dw1

于是有

  Lo=Li*exp(-∫(σs(p,w)+σa(p,w))*dt)+∫exp(-∫(σs(p,w)+σa(p,w))*dt)*(Le(p,w)+ σs(p,w)* ∫p(w1,w)*L(w1)*dw1)dt。

我们设定T= exp(-∫(σs(p,w)+σa(p,w))*dt)代入上面的方程得到最后的

  Lo=Li*T+∫T*(Le(p,w)+σs(p,w)*∫p(w1,w)*L(w1)*dw1)*dt
返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.0029