Capitulum Sampling

来源:互联网 发布:你是唯一 知乎 编辑:程序博客网 时间:2024/06/06 14:14

蒙特卡洛积分模拟是离线渲染中一个最常用的方法,而关于其各种优化的研究有很多就是集中在改进其采样的模式。事实也确实如此,采样模式对最终的质量以及收敛速度会有很大的影响,比如需要做一个最简单的球面采样来计算ambient occlusion,可能就不会使用较原始的均匀分面采样,而会使用Cosine weighted sampling(属于Importance sampling)、spherical stratified或jettered sampling(属于Stratified sampling)。

Stratified sampling通过对原始的采样区域进行分割,然后确保每个区域内均有一定数量的采样点,这样就避免了在随机均匀采样中可能出现的一些区域漏掉采样的情形,进而在相同数量的采样点的情况下得到更好的采样质量。在做离线渲染时最常见的采样区域就是半球区域,对于半球面而言一个比较简单的stratified sampling方式就是对球面使用类似于经纬坐标分割的方式来进行区域的分解,然后对每个子区域进行一定数量的采样,最终就得到了stratified sampling。但是这里会有一个问题:使用经纬方式进行的区域分割得到的最终球面映射并不是很均匀,在极端与球面中间所得到的分布区域显然不同,因而这个也会在一定程度上对质量产生影响 。更好的一种方法是对球面进行绝对均匀的分割,然后在各个子区域上进行采样,这个研究也还是蛮多的。

最近看到了另外一种采样方法:Capitulum sampling,应该叫做花序采样,这里有稍详细的介绍。应该说这是一种从仿生学而受启示得到的方法:把植物中花芮的分布规律拿来做为Monte Carlo采样点的分布规律,如向日葵的花盘。这个的确比较有道理,植物的花芮分布肯定有某种神秘的进化规律在里边,然后得以保证每个区域可以受到均匀的太阳光照射来生长。Capitulum的分布大致如下左图所示,可以看出其跟普通的球面stratified还是有很大的不同的:

   

使用Capitulum sampling之后在采样结果上的确有比较明显的质量提升,比如来做ambient occlusion的计算时的效果如下:

从上到下分别是在64个采样点下的uniform sampling、stratified sampling、capitulum sampling(对比度不明显的话可以保存图片后查看)。

原创粉丝点击