曝光(Exposure)

http://dev.gameres.com/Program/Visual/3D/exposure.htm世界看起来是什么样的?

  是啊,这个世界上有些东西看起来是那么漆黑,比如山洞,煤,晚上的床底等.而有些东西即使在晚上看起来也不是那么黑暗,比如沙子,以及人脸.有些部分是明亮的,白衬衣,雪,灯泡,而有些东西当然是非常耀眼的,如聚光灯,天空,太阳以及激光等.


计算机图形看起来是什么样的?

  在显示器上显示的图像有一个亮度范围,一般来说是255,从0(黑色)到255(白色)之间的一个值.

  现在我们的脑袋里已经存有了这些概念,那么如何能够在计算机屏幕上创建一个真实的这个世界的图像呢?自然世界有着一个及其宽阔的亮度范围,但是计算机只能显示他们非常狭小的一部分,你可能需要缩小真实世界的亮度以适应他,比如用0表示一个极其黑的山洞,而用255表示太阳.但是如果你这么做了,在表现图像的时候你会遇到非常严重的问题,比如说人脸,会变得非常暗.比如下面这副图:

 

 

 

 

 

太阳的亮度被假设为255,可以看到,太阳的表现非常漂亮,但天空就很暗了,甚至像傍晚一样.

有一种选择是你可以对亮度值进行剪裁,比如说如果一个物体比雪还要白的话就给他设置亮度为255.在下面你可以看到这副图:

现在地面看起来很棒了,但是天空看起来却异常明亮,甚至全白色了.你将无法看到太阳,并且云层就像浅蓝色北京上的一个窗口一样.


OK.我又想再问另外一个问题,照片看起来是怎样的?

   就像计算机屏幕,照相机对于亮度也只能表现一个很狭窄的范围.在相片里,最暗的东西看起来也并不是很黑,而最明亮的部分怎么也不会比他所处的环境明亮(译者注:原文是environment,应该理解成这个物体周围很进的一小片空间).

  但照片为什么看起来并没有遇到上面所说的问题呢?事实上,照片也有类似的问题,但是在处理这么大范围亮度的强度上,照相机做的很好.另外照相机还做了曝光控制.如果理解这些的话,会帮助我们更好的理解照片的生成.


拍摄照片的过程:

  在照片被拍摄的时候,快门只打开极短的时间让少量光线进入.光线被相机透镜聚焦成一张轻微感光的胶片.一旦胶片被保露在光线下,胶片所包含的化学物质就会分解,这样记录在胶片上的图像也会被破坏,可能照片会变得更亮.

  进入相机镜头的光线可以由快门时间以及光圈大小来控制.接着底片停止感光并显影出颜色.这是负片.再用灯泡把他晒到另外一张纸上这就是照片了.


那么他跟计算机图形有什么关系那?

  最简单化的照片模型告诉了我们为什么相机要擅长于拷贝更大范围的亮度强度.让我们考虑最初来自场景光线的曝光.想象在一快小小的胶片上有着100W mol的感光化学物质.光线落在了那个区域上,有50W mol的物质分解了,因此在照片上他只能显示出一半亮度的图像来.如果相同数量的光线又落在了这个区域上,又有一半的化学物质分解,剩下1/4了,图像将会是75%的亮度.随着越来越多的光线落在这个区域上,越来越多的化学物质会分解.然而,随着越来越少的化学物质存在于这个区域上,分解同样多的物质,你需要更多的光线.

上面这张图显示了随着落在胶片上的光线越来越多,化学物质的减少曲线.可以看到开始的时候化学物质减少的非常快,但是随着化学物质的减少,分解的速度也慢慢降低,最后,当然在没有化学物质剩下时停止了分解.

  在现实中,这是非常简化的但是很流行的图表.真是的胶片感光并不是完美地平滑的.事实上这副图在胶片接受了大量光线以后应该会再次开始下降.典型的效果就是: 曝晒.

  或许你还记得,这是一个指数衰减的图像.递减的速度和剩余的数量是成比例的.如果有更多的化学物质留在胶片上的话,他理所当然的分解的更快.

  那么,使用上面这副图,可以很轻易的知道在有一定数量的光线落在上面以后胶片还能有多少物质感光,那么就很容易得到照片上应该得到的结果.

  总的来说,下面这个方程给出了一切:

  brightness = 1 - e-light
  曝光控制:

  当然,一个照相机如果不能进行曝光控制的话他会是多么的没用.光线落在胶片上仅仅是光线进入照相机的结果,通过光圈,通过快门时间.为了更大程度的简化复杂度,我们可以忽略光圈和快门速度.而把他们单独抽象成一个变量K.较小的K将会返回一个较暗的亮度值.

  (light hitting film) = (light entering camera) * K
  brightness = 1 - e-(light hitting film)
  最后,让我们看一段伪代码:


  function Expose(float light, float exposure)

    return ( 1 - exp(light * exposure) ) * 255

  end function


  main procedure:

    for every pixel on the screen

计算每个象素上进入照相机的光线L.可以用射线跟踪或者其他什么

  Pixelvalue = Expose(L, K)

    plot this pixel with a brightness of Pixelvalue

  end of loop

  end of main procedure

  令人惊奇的是,这个函数将不再被更多的使用.甚至连那些麻辣的3D渲染程序,比如3D studio产生着令人作呕的,剪裁了亮度的图像,并且不允许创建亮度大于255的光源.这种限制实在是太黑色幽默了,在现实世界,亮度是有着一个巨大的范围!

参考文献:

  The Virtual Darkroom
http://tangle.seas.gwu.edu/~geigel/vdr/

  这是一个创建计算机图像,并且使用相片胶片类似的机制以黑白色渲染他们的系统.跟上面这个简化版本来说,这个软件要高级的很多,并且模拟微粒以及曝光两种模式.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值