2019独角兽企业重金招聘Python工程师标准>>>

为什么在纹理采样时需要texture filter(纹理过滤)。

我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一至。当纹理大于三维图形表面时,导至一个像素被映射到许多纹理像素上;当维理小于三维图形表面时,许多个象素都映射到同一纹理。

当这些情况发生时,贴图就会变得模糊或发生错位,马赛克。要解决此类问题,必须通过技术平滑texel和pixel之间的对应。这种技术就是纹理滤波。

不同的过滤模式,计算复杂度不一样,会得到不同的效果。过滤模式由简单到复杂包括:Nearest Point Sampling(最近点采样),Bilinear(双线性过滤)、Trilinear(三线性过滤)、Anisotropic Filtering(各向异性过滤)。

在了解这些之前,有必要了解什么是MipMap和什么时各向同性,各向异性。

2、 什么是MipMap?

Mipmap由Lance Williams 在1983的一篇文章“Pyramidal parametrics”中提出。Wiki中有很详细的介绍( http://en.wikipedia.org/wiki/Mipmap ) . 比如一张256X256的图,在长和宽方向每次减少一倍,生成:128X128,64X64,32X32,16X16,8X8,4X4,2X2,1X1,八张图,组成MipMap,如下图示。

Mipmap早已被硬件支持,硬件会自动为创建的Texture生成mipmap的各级。在D3D的API:CreateTexture中有一个参数levels,就是用于指定生成mipmap到哪个级别,当不指定时就一直生成到1X1。

3、 什么是各向同性和各向异性?

当需要贴图的三维表面平行于屏幕(viewport),则是各向同性的。当要贴图的三维表面与屏幕有一定角度的倾斜,则是各向异性的。

也可以这样理解,当一个texture贴到三维表面上从Camera看来没有变形,投射到屏幕空间中后U方向和V方向比例仍然是一样的,便可以理解成各向同性。反之则认为是各向异性。

4、 Nearest Point Sampling(最近点采样)

这个最简单,每个像素的纹理坐标,并不是刚好对应Texture上的一个采样点texel,怎么办呢?最近点采样取最接近的texel进行采样。

当纹理的大小与贴图的三维图形的大小差不多时,这种方法非常有效和快捷。如果大小不同,纹理就需要进行放大或缩小,这样,结果就会变得矮胖、变形或模糊。

5、 Bilinear(双线性过滤)

双线性过滤以pixel对应的纹理坐标为中心,采该纹理坐标周围4个texel的像素,再取平均,以平均值作为采样值。

双线性过滤像素之间的过渡更加平滑,但是它只作用于一个MipMap Level,它选取texel和pixel之间大小最接近的那一层MipMap进行采样。当和pixel大小匹配的texel大小在两层Mipmap level之间时,双线性过滤在有些情况效果就不太好。于是就有了三线性过滤。

6、 Trilinear(三线性过滤)

三线性过滤以双线性过滤为基础。会对pixel大小与texel大小最接近的两层Mipmap level分别进行双线性过滤,然后再对两层得到的结果进生线性插值。

三线性过滤在一般情况下效果非常理想了。但是到目前为止,我们均是假设是texture投射到屏幕空间是各向同性的。但是当各向异性的情况时,效果仍然不理想,于是产生了Anisotropic Filtering(各向异性过滤)。

7、 Anisotropic Filtering(各向异性过滤)

先看效果,左边的图采用三线性过滤,右边的图采用各向异性过滤。

各向同性的过滤在采样的时候,是对正方形区域里行采样。各向异性过滤把纹理与屏幕空间的角度这个因素考虑时去。简单地说,它会考滤一个pixel(x:y=1:1)对应到纹理空间中在u和v方向上u和v的比例关系,当u:v不是1:1时,将会按比例在各方向上采样不同数量的点来计算最终的结果(这时采样就有可能是长方形区域)。

我们一般指的Anisotropic Filtering(AF)均是基于三线过滤的Anisotropic Filtering,因此当u:v不为1:1时,则Anisotropic Filtering比Trilinear需要采样更多的点,具体要采多少,取决于是多少X的AF,现在的显卡最多技持到16X AF。

当开启16X AF的时候,硬件并不是对所有的texture采样都用16X AF,而是需要先计算屏幕空间与纹理空间的夹角(量化后便是上面所说的u:v),只有当夹角大到需要16X时,才会真正使用16X.

如果想了解AF的实现原理,可以查阅此篇Paper: “Implementing an anisotropic texture filter”. 现在AF都是硬件实现,因此只有少数人才清楚AF就尽是怎样实现了(其实细节我也没搞清楚),其实完全可以由Pixel Shader来实现AF,当然性能和由硬件做是没得比的。

8、 各过滤模式性能比较。

下表是各种过滤模式采一个pixel需要sample的次数:

Sample Number

Nearest Point Sampling

1

Bilinear

4

Trilinear

8

Anisotropic Filtering 4X

32

Anisotropic Filtering 16X

128

Anisotropic Filtering 16X效果最好,但是显卡Performance会下降很多,当然也是测试你手中显卡Texture Unit的好方法。如果你觉得你的显卡够牛,那么就把AA和AF都打到最高再试试吧:)

转载于:https://my.oschina.net/u/269082/blog/1591519

纹理过滤中的双线,三线过滤相关推荐

  1. 双线性过滤和三线过滤

    双线性过滤(Bilinear_filtering)是进行缩放显示的时候进行纹理平滑的一种纹理过滤方法. 在大多数情况下,纹理在屏幕上显示的时候都不会同保存的纹理一模一样,没有任何失真.正因为这样,所以 ...

  2. 使用Stream流的方式,遍历集合,对集合中的数据进行过滤

    Stream的更优写法 下面来看一下借助Java 8的Stream API,什么才叫优雅: package com.learn.demo01.Stream;import java.util.Array ...

  3. 使用传统的方式,遍历集合,对集合中的数据进行过滤

    循环遍历的弊端 Java 8的Lambda让我们可以更加专注于做什么(What),而不是怎么做(How),这点此前已经结合内部类进行 了对比说明.现在,我们仔细体会一下上例代码,可以发现: for循环 ...

  4. AutoML在推荐系统协同过滤中的探索与发现(附交流视频和PPT下载链接)

            导读:今天给大家带来第四范式资深研究员.香港科技大学博士姚权铭,在2019年底所做的分享<AutoML在推荐系统协同过滤中的探索与发现>,本文介绍了第四范式研究组将自动化机 ...

  5. 推荐系统系列教程之十:协同过滤中的相似度计算方法有哪些?

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了九期,今天按约推出第十期:协同过滤中的相似度计量方法有哪些?希望朋友们多点"在看",多多转发,我会在&q ...

  6. java文件上传过滤,struts2中文件上传过滤

    手动实现文件过滤 大部分时候,Web应用不允许浏览者自由上传,尤其不能允许上传可执行性文件--因为可能是病毒程序.通常,我们可以允许浏览者上传图片,上传压缩文件等:除此之外,还必须对浏览者上传的文件大 ...

  7. cad怎么选择一个对象打散vba_CADVBA中的选择集过滤.doc

    CAD中的选择集过滤 一.选择集过滤时的使用方式如下: Object 指使用SelectionSet这个方法适用的对象 1)????? object.Select Mode[, Point1][, P ...

  8. python敏感词过滤代码简单代码_Python 实现王者荣耀中的敏感词过滤示例

    Python 实现王者荣耀中的敏感词过滤示例 王者荣耀的火爆就不用说了,但是一局中总会有那么几个挂机的,总能看到有些人在骂人,我们发现,当你输入一些常见的辱骂性词汇时,系统会自动将该词变成" ...

  9. python骂人脚本_Python 实现王者荣耀中的敏感词过滤示例

    王者荣耀的火爆就不用说了,但是一局中总会有那么几个挂机的,总能看到有些人在骂人,我们发现,当你输入一些常见的辱骂性词汇时,系统会自动将该词变成"*",作为python初学者,就想用 ...

最新文章

  1. 一个小团队使用的知识管理方案与工具
  2. 独家 | 数据科学机器学习面试题,来挑战吧~
  3. 乐观锁和悲观锁,可重入锁和不可重入锁(1)
  4. 《水晶报表自动补空行,补格线思路》 【转】
  5. JAVA调用C语言写的SO文件
  6. mybatis教程--延迟加载详解
  7. 史上最经典CAP讲解
  8. 考古甜瓜子_数字考古与开源
  9. [转]Microsoft SQL Server 2005 整合、集成SP3方法
  10. 作为一个非天才型选手,普通程序员如何升级打怪?
  11. AutoCAD 2000-14的序列号大全
  12. 1359 信息学奥赛一本通 围成面积
  13. gitea mysql8_初试drone1.0+gitea—docker安装
  14. 五邑大学计算机学院院长,五邑大学计算机学院研究生导师介绍曹彩凤
  15. AWS免费套餐服务器部署NETCORE网站
  16. MFC 多线程编程总结
  17. [组图教程]:8大方法!解决CPU资源占用100%[ZT]
  18. PrestaShop支付接口-网银在线支付,在线支付收款,外贸收款
  19. 解决typora beta版本过期提示
  20. 四川安湖科技:抖音电商节怎么参加

热门文章

  1. UNCTF2020web方向部分题解
  2. PyTorch深度学习(18)网络结构LeNet、AlexNet
  3. C语言中关键字const、typedef
  4. k-近邻(应用sklearn的莺尾花数据集)
  5. 个人计算机架构和相关的设备组件
  6. 这款游戏可能是minecraft和迷你世界的共同敌人了吧!
  7. 基于Android的健康宝体检app介绍(一)
  8. 十二月十三号作业驱动作业
  9. 手机相机里面的m_手机里面照相机的像素怎么调
  10. 你真正的了解i++和++i吗?