http://www.crytek.com/sites/default/files/20100301_lpv.pdf
http://www.crytek.com/sites/default/files/2010-I3D_CLPV.ppt
2010 i3d上的一个文章,ppt的有图,pdf则更加的详细一些。
crytek在之前的sig09上的介绍了light propagation volume,本blog里面也有了介绍:http://blog.csdn.net/ccanan/article/details/4975066
一些重复的事情就省去了。
开篇介绍了相当多的reference的东西,都是很不错的文章,尽管有些和crytek介绍的算法没有太大关系,但也是帮助crytek结出这么个果实不可或缺的部分。
再次对作者(Anton Kaplanyan@Crytek GmbH和Carsten Dachsbachery@VISUS / University Stuttgart)表示敬意,真是阅读了大量的文章,并且做了分析,在这基础上做了实现,最终分享出来,把游戏业进一步的向前推进,可谓hardcore!
后面的步骤和09sig上的文章差不多(本身时间也就是差了几个月么):
LightPropagationVolume Initialization:
- 渲染reflective shadow map(rsm)
- rsm的每个pixel被看作是反射光的一个分布,作为virtual point light(vpl for short)照亮light propagation volume
- 这里存储的值是sh系数
然后重复做这个propagation,就模拟了光的传递。
Cascade
看名字就知道怎么回事了,和cascaded shadow map类似的做法,有过渡,有snap to grid来防止抖动。
实现细节
使用2阶sh系数,也就是4个数(这个绝对是挺低的)。
cascade grid是rgba16f的32x32x32的3d texture。
rsm的resolution是256
light propagation部分做了8次迭代。
sth more
在有了之前的实现之后,这样几件事情顺理成章了:
- 做多次bounce
- 对particle一类的做indirectlighting
- glossy reflection