d3d11 indirect lighting
http://www.gdcvault.com/free/category/280/conference/这里的一个文章
不过看着业界一点点迈向realtime GI,着实激动啊。
开卷列举了近期realtime indirect lighting的比较好的一些技术(paper),然后提到这个paper是包含:
- indirect lighting
- 和indirect lighting shadow
个人看法,indirect lighting和shadow同是计算光照相关的东西,很多方面的基本理念真的是非常相像。
比如基于rasterizer pipeline的话,都是有:
- screenspace----把需要计算的相关信息进行精确定位
- 有kernel的概念----想pcf等,也是rasterizer pipeline和单点(pixel)光照信息来自附近多点的时候的必然产物。
这个paper的indirect lighting的算法走的是screen space----来精确定位需要算什么。
然后在一定kernel上----进一步限定计算范围
用raytracing来计算间接光照。
所以最后下来,尽管标准意义上的raytracing是很昂贵的技术,但是在各种简化下,也可以在5970达到很高的fps了。
进一步细节:
- 使用RSM来存储直接光照的信息,texel作为VPL
- camera view来将每个pixel转到RSM space去,在一定kernel中来raytracing间接光照
- 最后得到的就是一个camera view的screenspace的间接光照buffer
这整个过程简直就是山寨screenspace shadow map(pcf filter),对比流程:
- light view构建depth
- camera view每个pixel转到lightview中去sample lightview-depth(shadow map),计算过程是kernel里面做的。
- 最后得到一个camera view的full screen的shadow buffer
- 最后往回一帖就好。
indirect lighting shadow
尽管觉得这个feature有点蛋疼,但是也是此paper的亮点:
基本算法:
- 建立3d grid
- 然后间接光照被挡住的才记下来
- 然后用上面的indirect lighting buffer减去这个被挡的lighting
- 就有了indirect lighting shadow
关键在3d grid这部分。
是用3d的texture来表示grid。
然后linklist来记录grid里面的triangles----这个只有dx11才有地。
然后再做occlution计算。
效果绝对刚刚地:(注意indirectlighting shadow)