Lighting Volumes

lighting volume link

 

light volume这篇是讲光照的,开始还以为是讲光柱的呢。

 

 

带来几个理念都非常好,gamefest2010真的是paper品质非常高啊,看得非常high。

作者是fear系列的开发studio----monolith的technical director。

 

考虑问题是从更加本源的点出发,然后结合多个方面的知识(图形学,数学,硬件)探求最棒的解决方案。

 

这tmd才是engineer该做的事情,说到这里就想起上次一个做过render的说render就那么回事,拿n年前siggraph弄一下,没什么云云----我只能说totally bullshit!

 

engineering的魅力就在于综合方面,既要从学术出发,又要考虑客观的现实(硬件),还要有项目的特点需求开发周期,乃至编程功力,这就是一个用不可穷尽的领域。

进入主题:

 

 

开篇明确了他们项目的需求,大城市里大规模光源。

主要想做的事情是找到一个取代lightmap的更好的技术。

 

这个light volume几乎就是deferred lighting取代forward lighting技术的一个翻版。

lightmap一个很本质上的缺陷就是它和geometry耦合度太高。

回顾deferred lighting : deferred lighting系列技术取代forward lighting几个根本点

  • 解决了lighting和geometry的耦合关系。
  • 将计算范围缩小到screen space

light volume也是这样:

  • 将lighting信息存储在volume texture里,realtime render时候从volume texture里面取lighting----解决offline cook lighting和geometry的耦合关系

这个volume texture倒是和crytek的light propagation voume那个很相像,就是用volume texture来做空间八叉树表示,然后里面存储光照信息。

volume texture存的是6个方向射过来的光---文中提到他们尝试sh系数,但是效果不满意,毕竟sh系数是保存低频信息,如果要求比较高就达不到了,总结下来还是很直接的直接捕捉6个方向的入射光最好。

这样下来是6*3=18个系数。

然后利用人眼对颜色(hue)不够敏感的特性,将6方向rgb lighting简化为1个rgb,6个lighting强度--9个系数。这样如果左边过来蓝光,右边红光,结果就是存个紫光,然后存强度这种。这直接导致存储信息减半。而且大家几乎看不出什么不对,所以是个很成功的尝试了。

 

而且这么一搞,变成rgb+intensity了,这不就是hdr encoding么,哥们们更high了,hdr还顺便解决了。

 

有texture就有mipmap,必须地。

dxt1的贴图压缩。

而且顺便这个volume texture结构天然就是可以用来做global illumination,大家happy。

 

 

一些问题,因为resolution有限,所以有的地方要求高contrast的时候就达不到,light bleeding也时有发生。

但是好在是texture,可以根据情况做一些调整,切换到高resolution来做,文章哦你给出用mask的方法来标识需要切换的地方。

 

然后lighting volume和irradiance volume也有很大不同,irradiance volume是cpu端存储octree,然后根据object position来访问octree的光照信息,插值出来sh系数,在object比较小的时候没问题。

但是一旦object巨大的时候,如fear里面的高楼大厦,那么一组的sh系数显然就不对了。

为了sh系数拆分mesh也不划算,所以volume texture真的是要好很多。

 

早期接触到volume texture,还觉得很废的东西,呵呵,这回好,一跃成为高杆必需品了,carmack他们也可能会用volume tex来做voxel。

你可能感兴趣的:(编程,object,存储,图形,encoding,2010)