转载自 纹理基础知识和过滤模式详解

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

我们的纹理 要贴到三维图形表面,而三维图形上的pixel中心与纹理上的texel中心并不一致(pixel不一定对应texture上的采样中心texel).大小也不一定一致.

  • 当纹理大于三维图形表面时,导致一个像素被映射到许多纹理像素上.
  • 当纹理小于三维图形表面时,导致许多个像素都映射到相同纹理.
    当这些情况发生时,贴图就会发生模糊或者发生错误.要解决此类问题.必须通过技术平滑texel和pixel之间的对应关系.这种技术叫做纹理滤波.

不同的过滤模式,计算复杂度不一样.会得到不同的效果.
过滤模式由简单到复杂包括:

  • 最近邻插值采样 (Nearest Point Samplir)
  • 双线性过滤 (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. 什么是各向同性 和 各向异性 ?

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

也可以这样理解,当一个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(三线性过滤)

三线性过滤以双线性过滤为基础。

  1. 会对pixel大小与texel大小最接近的两层Mipmap level分别进行双线性过滤
  2. 然后再对两层得到的结果进生线性插值。

三线性过滤在一般情况下效果非常理想了。

  • 但是到目前为止,我们均是假设是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。

8. 各过滤模式性能比较

下表是各种过滤模式 采一个pixel需要sample的次数
一般而言,采样数越多,效果最好,但具体使用时要综合考虑性能。

过滤模式 采样数
Nearest Point Sampling 1
Bilinear 4
Trilinear 8
Anisotropic Filtering 4X 32
Anisotropic Filtering 16X 128

纹理基础知识和过滤模式详解相关推荐

  1. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. C语言基础知识入门(大全详解)

    一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...

  3. linux之find命令,Linux基础知识之find命令详解

    在运维人员操作系统时,要接触大量的文件,为了避免忘记文件存放位置的尴尬,就需要我们有一种文件查找工具的帮忙,下面是两个文件查找工具的详解,locate以及find,分别分享给大家. 第一款工具: Lo ...

  4. Android基础知识——Android SDK Manager详解

    做Android开发时,免不了使用Android SDK Manager,安装需要的sdk版本.buildTools版本等等.下图展示了2016.11.16号Android SDK Manager所有 ...

  5. 【Audio音频开发】音频基础知识及PCM技术详解

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...

  6. 前端必备基础知识:window.location 详解

    作者简介: 李中凯 八年多工作经验 前端负责人, 擅长JavaScript/Vue. 掘金文章专栏:https://juejin.im/user/57c7cb8a0a2b58006b1b8666/po ...

  7. linux中dd命令详解,Linux基础知识之dd命令详解

    本文先简要介绍dd的参数,然后通过几个实例介绍dd的应用,这些素材整理来源于网络. dd 是 Linux/UNIX 下的一个非常有用的命令,其作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的 ...

  8. vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定

    学网络,就在IE-LAB 国内高端网络工程师培养基地 MUX VLAN(Multiplex VLAN )提供了一种通过VLAN进行网络资源控制的机制.通过MUX VLAN提供的二层流量隔离的机制可以实 ...

  9. Spotify敏捷模式详解三部曲第一篇:研发团队

    本文转自:Scrum中文网 引言 2018年4月,来自北欧瑞典的音乐流媒体公司.百亿美元独角兽Spotify创造了历史,它成为了当代上市公司当中,第一家通过"直接上市"的方式在美国 ...

最新文章

  1. 没有点真的大项目工程经验,你真以为能进大厂的算法岗?
  2. SPOJ 694 Distinct Substrings(后缀数组)
  3. 设计模式四:简单工厂
  4. android手写简单mvp,[webpack]手写一个mvp版本的webpack
  5. JavaScript中的一些特殊用法(一)
  6. java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级
  7. 重载函数编译后的新名字
  8. html 多页面合并,让多个HTML页面 使用 同一段HTML代码
  9. Set,Map数据结构
  10. ResultSet用法集锦
  11. STM8系列芯使用STVP烧写程序设定读保护和如何解除读保护操作
  12. 数据治理平台对比及atlas的安装和介绍
  13. html字体标签设计,36个重要的HTML标签
  14. task02 EDA
  15. IEC61850缩略语一览表
  16. python中的scipy基础知识_python中SciPy是什么?
  17. 叶问短线绝招之拨云见日
  18. 思科全球副总裁、大中华区首席技术官曹图强:网络安全不是奢侈品,而是必需品...
  19. WPF入门教程详解1——label、TextBlock、Button、Border、RadioButton、CheckBox、 数据绑定、案例、ToolTip、GroupBox、Expand、Fram
  20. 【整理】PJSIP开源库详解

热门文章

  1. 证明“我是我”是一个怎样的过程?
  2. 基于JAVA政府采购线上招投标平台计算机毕业设计源码+系统+数据库+lw文档+部署
  3. KubeSphere 添加NFS存储
  4. struct 中 typedef的用法
  5. 预祝大家平安夜圣诞节快乐
  6. 台式电脑系统崩掉该如何?
  7. Kong的插件:Request Size Limiting
  8. 当你觉得一个人孤独的时候
  9. 没有Console线,又不知道自己通过哪个IP连接到路由器,怎么办?
  10. 利用水文分析提取山脊线山谷线