胡说八道

学而不思则罔,思而不学则殆

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
      对于自然界的光的表现来说HDR无疑拥有最为自然,最为直接的控制。我们在使用HDR的时候有两个很重要的部分,一个是对于一些Texture的存储格式,另外一个就是对于HDR的显示。

     我们先来说说第一点也就是保存HDR信息的存储格式,我们知道在DX8.x里面的Texture格式都被限制在了0-1.0的范围内,而在DX9里面因为提供了FP Texture的支持,所以能够自然的直接的支持超越1.0的范围的光照信息。但是16/32bit FP Texture由于需要大量的显存空间和带宽来保存和传输,不可避免的就很容易的成为程序的性能的杀手,所以我们采用某种折中的办法就显得在现阶段比较有价值。但是我们如何突破非FP Texture的1.0的范围?这里有很多的办法可以帮助我们达到这样的目的。比如说我们使用Alpha通道来保存附加的信息来使我们保存的光照信息突破1.0的范围。这里有的朋友就会问了,我们需要这种超越1.0的光照信息有什么用?在这里举一个简单的例子,比如说是反射贴图,我们假设某金属表面某个象素的反射贴图的光照计算出来的是4.0,我们不使用HDR的话,我们保存在反射贴图里面的光照信息就是1.0,最后我们Render的时候使用这个1.0乘以反射率0.2最终得到的是0.2的光照。但是我们可以看到真正的光照应该是4.0*0.2=0.8。所以不使用HDR的时候上面的那个例子的渲染结果是不正确的。这里就可以看出HDR在某些情况下是非常重要的。

     最后一点就是对于HDR的显示,我们知道显卡的FrameBuffer是传统的0-1.0范围的Buffer。如果我们不作处理,那么大于1.0的光照信息全部丢失,也就是凡是大于1.0的光照部分都会成为一片白色,这样我们这些光照的信息就丢失了。我们如何在不丢失细节的情况下显示我们的HDR的信息呢?使用Tone Mapping来处理我们最后需要显示的光照信息,这样就能最大的保留我们的细节了。
posted on 2004-12-29 11:23  胡说八道  阅读(731)  评论(0)    收藏  举报