SHPRT的一点体会

放假了,来更新一下 :)

PRT在给我们带来实时全局光照的同时也给我们带来了精度和数据量的问题。
通过DXSDK的例子不难发现,要让阴影有平滑的过度需要大量的顶点,这是利用了显卡帮我们做其中的颜色插值。但实际上对于稍复杂的场景,大量的顶点就意味着no-realtime。虽然逐象素PRT能缓解这方面的问题(nicky的文章有详细的描述),但庞大的数据量始终是令人头痛的。各种压缩的方法有待挖掘。

直接光照:
考虑到预计算的代价,一般给16或25个系数。
近似的算法使得软阴影与生俱来(要获得更硬的影子?对不起...)
同时,利用SH旋转不变的特性,实现动态光照。

预计算的所有时间几乎都用在了shadowray,也就是光线和面求交上了。
一般用octree或kdtree来减少求交的次数就能得到很大程度上的提速。



直接光照 +  间接光照:
在直接光照的基础上,对每个顶点或有效象素的射线方向求得最近相交的面,并累加构成此面三个点的系数。
就可以得到类似辐射度的color bleeding效果。



最后,关于PRT的扩展
虽然SH足以应付Diffuse BRDF,但却无法有效得处理高光
因为一旦碰到更复杂的光照函数时,预计算的时间则会以级数形式增长
所以这个时候wavelet是更好的选择,据说可以把计算时间仍然控制在O(n)
具体可以参考Triple Product Wavelet Integrals for All-Frequency Relighting

posted on 2006-10-02 13:39  chaz  阅读(1359)  评论(4编辑  收藏  举报