关于常见的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
- 关于常见的Sampling方式
- 关于Gibbs sampling
- 关于sampling softmax 中重要性采样的论文阅读笔记
- 关于配色常见的几种搭配方式
- 关于shell中常见功能的实现方式总结
- 关于List常见使用方式
- Sampling
- 常见的排序方式
- 常见的加密方式
- 常见的分页方式
- 常见的加密方式
- 常见的加密方式!
- 关于二维数组常见调用方式
- 关于重要性采样(Importance Sampling)
- 关于动态抽样(Dynamic Sampling)
- SEO 作弊的常见方式
- oracle常见的连接方式
- 常见的个人电脑入侵方式
- 【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView
- STL 容器 list
- 死锁
- Eclipse构建gradle项目
- 2017网易计算机视觉题目
- 关于常见的Sampling方式
- 使用恶意USB设备解锁锁屏状态
- websockert
- 苹果对开发者账号:个人、组织(公司、企业)、教育机构。
- 123.PHP 周边性能优化
- Oracle安转问题及解决方法
- NOIP2014 联合权值 解题报告(乱搞(据说这道题是树状dp,感觉好像是))
- 比较两个数的大小
- win7 x64系统下怎么把PL/SQL连接64位Oracle数据库?