纹理基础知识和过滤模式详解
转载自 纹理基础知识和过滤模式详解
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(三线性过滤)
三线性过滤以双线性过滤为基础。
- 会对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。
8. 各过滤模式性能比较
下表是各种过滤模式 采一个pixel需要sample的次数:
一般而言,采样数越多,效果最好,但具体使用时要综合考虑性能。
过滤模式 | 采样数 |
---|---|
Nearest Point Sampling | 1 |
Bilinear | 4 |
Trilinear | 8 |
Anisotropic Filtering 4X | 32 |
Anisotropic Filtering 16X | 128 |
纹理基础知识和过滤模式详解相关推荐
- [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- C语言基础知识入门(大全详解)
一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...
- linux之find命令,Linux基础知识之find命令详解
在运维人员操作系统时,要接触大量的文件,为了避免忘记文件存放位置的尴尬,就需要我们有一种文件查找工具的帮忙,下面是两个文件查找工具的详解,locate以及find,分别分享给大家. 第一款工具: Lo ...
- Android基础知识——Android SDK Manager详解
做Android开发时,免不了使用Android SDK Manager,安装需要的sdk版本.buildTools版本等等.下图展示了2016.11.16号Android SDK Manager所有 ...
- 【Audio音频开发】音频基础知识及PCM技术详解
个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...
- 前端必备基础知识:window.location 详解
作者简介: 李中凯 八年多工作经验 前端负责人, 擅长JavaScript/Vue. 掘金文章专栏:https://juejin.im/user/57c7cb8a0a2b58006b1b8666/po ...
- linux中dd命令详解,Linux基础知识之dd命令详解
本文先简要介绍dd的参数,然后通过几个实例介绍dd的应用,这些素材整理来源于网络. dd 是 Linux/UNIX 下的一个非常有用的命令,其作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的 ...
- vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定
学网络,就在IE-LAB 国内高端网络工程师培养基地 MUX VLAN(Multiplex VLAN )提供了一种通过VLAN进行网络资源控制的机制.通过MUX VLAN提供的二层流量隔离的机制可以实 ...
- Spotify敏捷模式详解三部曲第一篇:研发团队
本文转自:Scrum中文网 引言 2018年4月,来自北欧瑞典的音乐流媒体公司.百亿美元独角兽Spotify创造了历史,它成为了当代上市公司当中,第一家通过"直接上市"的方式在美国 ...
最新文章
- 没有点真的大项目工程经验,你真以为能进大厂的算法岗?
- SPOJ 694 Distinct Substrings(后缀数组)
- 设计模式四:简单工厂
- android手写简单mvp,[webpack]手写一个mvp版本的webpack
- JavaScript中的一些特殊用法(一)
- java se 开发web程序_JDiy快速开发WEB之javaSE环境搭建-初级
- 重载函数编译后的新名字
- html 多页面合并,让多个HTML页面 使用 同一段HTML代码
- Set,Map数据结构
- ResultSet用法集锦
- STM8系列芯使用STVP烧写程序设定读保护和如何解除读保护操作
- 数据治理平台对比及atlas的安装和介绍
- html字体标签设计,36个重要的HTML标签
- task02 EDA
- IEC61850缩略语一览表
- python中的scipy基础知识_python中SciPy是什么?
- 叶问短线绝招之拨云见日
- 思科全球副总裁、大中华区首席技术官曹图强:网络安全不是奢侈品,而是必需品...
- WPF入门教程详解1——label、TextBlock、Button、Border、RadioButton、CheckBox、 数据绑定、案例、ToolTip、GroupBox、Expand、Fram
- 【整理】PJSIP开源库详解