d3d11 indirect lighting

来源:互联网 发布:威尔取模软件 编辑:程序博客网 时间:2024/05/01 02:15

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)

原创粉丝点击