Light Propagation Volumes in CryEngine 3

http://www.crytek.com/technology/presentations/

 

Kaplanyan, A.: Light Propagation Volumes in CryEngine 3这个,有PDF,PPT,video

 

 

 

个人感觉是今年siggraph上对游戏业界贡献最高的。

这之前典型的UE3里面带的基于静态场景预计算的irradiance volume的限制太大,killzone2也是用的这个。

halo3更加hardcore。

 

但是现在游戏,像crysis,farcry2这种都是场景可破坏的,天气系统导致太阳光方向乱变,这种情况下还能有GI效果,不能不说是个大贡献。

而且是在console上,一共3.3毫秒,太赞了。

 

 

 

开始读这个文章真的是比较棘手,因为之前接触GI东西太少,读起来很是费劲。

后来把相关知识补充一下,就好多了。

总体感觉,crytek这篇主要是把前人一些东西进一步整合,并没有在基础上做很大改进。

所以笔记记起来直接以相对高阶的记法就可以了。

 

1, 场景是基于deferred lighting的,不是deferred shading两个很像,只是有比较小的差别。

2, 首先画一个reflective shadow map

3, down sample reflective shadow map

4, 把这个down sample的RSM(reflective shadow map) 每个pixel做为一个surfel(参见前面的point based lighting), 每个surfel就是一个光源了,也叫虚拟光源(virtual point light, VPL for short)。

5, 接下来是虚拟光源注入radiance volume阶段,在point based lighting里面radiance volume是在八叉树里面的cell做的,这里我们用的GPu计算,所以用的是3D volume texture, 八叉树的cell就对应到volume tex的texel。

做的时候VPL就把SH系数保存在最近的texel里面,这里还没结束,因为正常光源需要传播比较远,而现在只是保存在最近的texel(也就是cell)里,其他的也应该有光照信息的cell还需要处理。

就涉及到接下来radiance传播了。

6,radiance 传播 : 接下来把radiance在volume texture里面传播,保持能量守恒定律,像周围几个方向传。

7,最后得出的volume texture就是动态记录了场景里面低频简介光照的信息,然后我们用position(文章里说是world space的position)来sample,进而得到间接光照信息。

 

基本思路就是这些,进一步延伸和优化下一个文章说吧。

你可能感兴趣的:(游戏,优化,video)