软阴影进化论

当然软阴影对于游戏来说早就不是什么新鲜事了。不过,软阴影的全部不只是把shadowmap怎样灵活投影一下+PCF就搞定,物理正确的实时软阴影却仍然具有挑战意义。尽管大多数玩家区分不了HDR和Bloom,但人活着毕竟要做点有意义的事,有点追求不是吗?

Ahem,早在2002年, P.P Sloan的一篇"Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environment"(真够长的,后面还有更长的)被siggraph收录,是为大家耳熟能详的PRT。PRT可以很好的处理静态场景下,一般化的distant light对场景的光照和阴影。它需要额外的预处理过程以计算transfer function,处理量较大而且根据你对最终效果的需要你可能要一个GI solver来帮你解决计算transfer function的问题。PRT效果是很好但由于上述的限制,MSR的研究员们继续地搞……

时光飞逝,让我们跃过LDPRT直接来到Shadow Field……2005年, 周昆、胡耀华他们的一篇siggraph "Precomputed shadow field for dynamic scenes"利用先前解决的SH Product,以及光源和遮挡物预先计算所谓的source radiance field(SRF)和object occlusion field(OOF),可以解决一定数量下动态物体和动态local光源的光照和阴影问题。由于数据量问题,还是使用SH作为压缩(也有wavelet的选择,但由于基的数量太多,wavelet的版本更慢限制更多如光源的旋转),所以也是更适合低频的环境。相比PRT,这个做法已经减少了很多预处理的工作,并能解决动态光源和动态物件。一大飞跃不是么?

马不停蹄,稍后的2006年里,siggraph "Real-time soft shadows in dynamic scenes using spherical harmonic exponentiation"中,认知到先前shadow field的很大部分计算消耗在SH product上,场景中物件或光源越多越复杂,SH product也会发生越多次。基于这点,把SH的计算转换到log space,这样一来多次的SH product就变成无比简单的SH add。然后把log space中的计算结果累加到结束为止,再经过一次exponentiation pass,就还原了原先在shadow field中昂贵的多次SH product。此外还有简化模型为球集,并为在CPU上为接收面选择一个hierarchy tree cut以简化计算且可避免错误地多次累加shadow。事已至此,已经有一个相当不错的动态(物件、光照)低频光照环境下的软阴影解决方案了。

之后2007年,P.P Sloan在上面的基础上又有一篇"Image-based Proxy Accumulation for Real-time Soft Global Illumination"。这篇的贡献主要把上面一篇SHEXP的CPU计算都纳入了GPU中,并可以模拟一把低频的GI效果,当然这GI很粗略啦,权当一看。

呼……soft shadow的科技树造到底了?且看今年的siggraph吧!

你可能感兴趣的:(软阴影进化论)