关于常见的Sampling方式

来源:互联网 发布:js和jquery中的event 编辑:程序博客网 时间:2024/06/16 12:47

什么是Sampling,简单说就是每个“像素块”都是由无数个点来组成的,所以显示出来的颜色也应该是由无数个点来决定的,但是现实是不可能真的把所有的点的颜色算出来,所以只能取某一(或少数)点的颜色来作为代表,即Sampling(采样)。


Sampling会有啥问题呢:Aliasing。这个词的学术解释比较抽象,对于图形学这个方向来说,Aliasing可以简单的认为是锯齿(jaggies)以及摩尔条纹现象(moire patterns),所以后来的各种Sampling方法就是为了解决这两个问题而出现的。


关于摩尔条纹的问题,这个是由于每个Sampling点在x方向和y方向的间隔是一样的所导致的,也就是说是那种Regular Samples而不是Random Samples


最为简单粗暴的解决方法就是提高Sampling的次数,或者说是提高分辨率,但是缺点就是计算时间大幅度增加,这个在实际生产中是无法接受的,所以出现了其它的Sampling方式,既提升了品质,同时消耗的时间也不是很多。


那么理论上怎样的Sampling是好Sampling呢?即避免Aliasing呢?

1. 采样点均匀地分布在像素块之内,即不要聚成一堆(在二维层面上)。

2. 在一维层面上,也就是采样点往x和y方向的上投影点需要均匀分布在x和y的线上,不要聚成一堆。

3. 采样点之间存在某个最小的距离值。说白了还是不要聚成一堆。

以上三点是为了避免那种纯粹的Random Samples设计的。

4. 不要用Regular Samples,虽然这个完全避免了以上三点,但是这个会造成摩尔条纹。

当然,如果采样点足够多的话,随便什么样的采样方式都无所谓了。


常见的采样方式:

1. n-rooks sampling

这个方法就像是把n个rooks(象棋里的车)放在分成nxn的像素块里,然后每个rook在其所在横竖行都没有其它rook所在,即rooks之间无法互相“攻击”。

这种采样的好处就是在一维层面上能保证完全均匀,但是在二维层面上不能保证均匀分散不聚集。

2. jittered sampling

把像素块分为nxn小格子,然后每个小格子里面放一个采样点,具体位置随机。

效果比较好,基本保证了不聚成一堆,同时还不是regular sampling

3. multi jittered sampling

第一种与第二种方法的结合。

同时能保证二维层面上与一维层面上的均匀分布。


参考:

Realistic Ray Tracing, Second Edition

http://web.cs.wpi.edu/~emmanuel/courses/cs563/S10/talks/wk3_p1_wadii_sampling_techniques.pdf

https://www.cs.cmu.edu/afs/cs/academic/class/15462-s09/www/lec/13/lec13.pdf

0 0