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几个根本点
light volume也是这样:
这个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。