转载请注明出处为KlayGE游戏引擎,本文地址为http://www.klayge.org/?p=755
在KlayGE中的延迟渲染(一)里,我们推出了lighting pass里的计算,本篇将讲解G-Buffer阶段和Shading pass阶段。
G-Buffer分配
在Deferred Rendering的框架中,不管是Deferred Shading还是Deferred Lighting,G-Buffer的分配都是非常关键的。上一篇得出的lighting pass公式如下:
从公式可以看出,在light pass里需要的量有n,h,alpha,cspec,lc。因为h = (n + lc) / 2(见游戏中基于物理的渲染系列文章),而lc = normalize(l – p)(l是光源位置,p是要计算的点位置),所以最终需要G-Buffer提供的量有:n,p,alpha和cspec。要完整的保存这些量,一共需要8个通道,normal占3个,position占3个,alpha和cspec分别占一个。这样对G-Buffer来说消耗太大了,必须要缩减。
显而易见的是,normal是经过归一化的,只需要保存2个分量。http://aras-p.info/texts/CompactNormalStorage.html比较了多种保存2分量的方法,其中Spheremap transform速度和效果综合起来最佳,Crytek也在用同样的方法,即: