t2.1雾化

基本概念

  现实中,光线 被空气中无数粒子反射与折射。如果单位体积内粒子的浓度足够,则它们是可见的,例如烟、灰尘、雾等。计算机图形中,上述现象都是通过雾化技术加以模拟的。
  想象我们正在注视远处的物体,眼睛与物体间的光线受到大量粒子的扰动。一些原来直线传播无法进入眼睛的光线,被那些粒子反射进入眼睛,这就是我们“看到”空气中粒子的原因。最后的视觉效果上,物体的颜色向雾的颜色偏移,粒子越多,偏移越大。
  雾浓度在【0, 1】间取值,控制雾化程度。浓度0表示无雾化,浓度1表示完全雾化。这时像素呈现雾的颜色,最终的颜色由物体颜色和雾颜色线性插值得到。
  如何计算雾浓度?前面提到,大气中粒子越多,雾化越显著。然而,如何知道粒子数并转化为雾浓度呢?幸运的是,不必确切知道粒子数,我们用另一个值模拟这个数。粒子数依赖两个因素:场景中的全局武浓度和眼睛与物体间的距离。
  眼睛与物体间的距离容易得到。于是,剩下的就是根据这个距离由雾浓度求得像素颜色。如何定义雾的浓度和单位呢?我们不直接定义,而是用一个简化系统。雾浓度由两个距离dmin和dmax控制,像素和眼睛距离小于dmin时无雾化,随着距离的增大,雾化逐渐加重,当距离大于dmax时完全雾化。如公式所示:
这里写图片描述

有两点注意事项:

  • 该公式假设雾是空间均匀的,但实际情况并不总是如此。例如,现实世界中,雾常在下方较浓,此模型不能表达这个现象。
  • 距离的定义是可变的。当然,可以用欧式距离,得到球状雾效果,但需要做开方运算。有一种简化是以摄像机空间深度z为距离,从而得到线性雾。它的优点是速度快,但有一个恼人的副作用,某一点雾浓度可能因摄像机朝向的不同而改变,现实世界中这是不可能的。

一旦得到[0, 1]间的雾浓度,像素颜色就可以用如下线性插值公式计算:
Cfogged = Clit + f(gfog - Clit)
其中:Cfogged为最终结果。Clit为计算光照后的物体表面颜色。f为雾浓度。gfog为全局雾颜色。
为了在场景中得到雾化效果,必须向API说明雾的性质。常常需要下列三种信息:
- 雾化开关,如果要得到雾化效果,必须打开。
- 雾的颜色,即上式的gfog。
- 雾化距离,即dmin和dmax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值