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

OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标 图形编程技术 阅读详情

原文地址:纹理基础知识和过滤模式详解


1、 为什么在纹理采样时需要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的次数:

类型 采样数
Nearest Point Sampling 1
Bilinear 4
Trilinear 8
Anisotropic Filtering 4X 32
Anisotropic Filtering 16X 128

一般而言,采样数越多,效果最好,但具体使用时要综合考虑性能。


关于纹理滤波方式 1、 为什么在纹理采样时需要texture filter       我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一至。当纹理大于三维图形表面时,导至一个像素被映射到许多纹理像素上;当维理小于三维图形表面时,许多个象素都映射到同一纹理。 当这些情况发生时,贴图 阅读详情

相关推荐

纹理过滤

前言 当纹理贴到具体的像素上时,纹理中心不一定位置上刚好对应着像素坐标的中心,因此在贴图时会产生一定的偏差,会产生模糊错位等问题。这时我们就需要纹理的映射过程进行一定的处理时,这就是纹理过滤。 最近点采样(Nearest Point Sampling) 这是一种最简单的采样过滤方式,它对于纹理采样点texel与最终画面上的pixel不对应时,会采样离这个pixel最近的texel进行采样。这...

派大星PatrickStar的博客 3664

渲染的本质: 纹理过滤(Texture filtering)技术

在计算机图形学中,纹理过滤或者说纹理平滑是在纹理采样中使采样结果更加合理,以减少各种人为产生的穿帮现象的技术。纹理过滤分为放大过滤和缩小过滤两种类型。对应于这两种类型,纹理过滤可以是通过对稀疏纹理插值进行填充的重构过滤(需要放大)或者是需要的纹理尺寸低于纹理本身的尺寸时(需要缩小)的一种抗锯齿过滤。简单来讲,纹理过滤就是用来描述在不同形状、大小、角度和缩放比的情况下如何应用纹理。根据使用的过滤算法...

dick_zhang的博客 2万+

OpenGL纹理详解

OpenGL纹理详解 现实生活中,纹理最通常的作用是装饰我们的物体模型,它就像是贴纸一样贴在物体表面,使得物体表面拥有图案。但实际上在OpenGL中,纹理的作用不仅限于此,它可以用来存储大量的数据,一个典型的例子就是利用纹理存储地形信息。 纹理对象和参数 现代OpenGL中,纹理对象和顶点数组对象(VAO)及缓存对象(VBO)一样,需要调用glGenTextures函数生成。 生成纹理对象 同样的,纹理对象需要进行绑定。OpenGL中纹理可以分为1D,2...

水上漂的专栏 6460

深入解析纹理贴图——纹理过滤及MipMap技术

当纹理被应用到三维物体上时,随着物体表面的形状和相机视角的变化,会导致纹理在渲染过程中出现一些问题,如锯齿状边缘、失真、模糊等。 纹理过滤的作用是解决这些问题,以获得更好的渲染效果。其目的是在纹理被应用到三维模型上时,通过对纹理上的像素进行插值或采样,使得纹理在不同距离和角度下呈现出更平滑、更真实的外观。

Mapmost的博客 3135

纹理的各种过滤详解

最近在研究Direct3D游戏的开发,真次让我对纹理过滤有了深刻的了解了! 希望和大家一起的分享!            纹理过滤只要分为四种过滤方法                   (1)---->最近点采样过滤                     在程序中,我们并不是必须要使用纹理过滤。Direct3D可以被设置来计算纹理像素的地址,这个地址通常不是一个整数值,这时,可以简单的

jiangtao_killer的专栏 3558

纹理过滤中的双线,三线过滤

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

weixin_34121282的博客 3556

OpenGL纹理过滤以及纹理Wrapping mode

在三维动态场景中,如果一个纹理对象迅速地远离观察点而去,此时纹理图像必须随被投影的图像一起缩小,否则很产生抖动或者闪烁的现象。为了避免产生抖动或者闪烁,OpenGL必须对纹理图像进行过滤,适当的对它进行缩小,是它在映射到无替代 表面时,不会产生令人不快的人工视觉效果。为了避免这种效果,我们可以指定一系列预先过滤的分辨率递减的问题图像,成为mipmap。mipmap使用了一些精巧的方法把图像数据挑选到内存中。

Jackery's Special Column 2844

OGL纹理之纹理过滤器和多级渐进纹理mipmap

纹理过滤器 纹理图像映射到屏幕坐标系的图元中,很多时候不是和屏幕坐标系(像素)一一对应的,因此需要进行放大或缩小(尽量避免一个方向上放大一个方向上缩小,避免这个问题最好方法是不要使用扭曲的纹理坐标)以铺满对应的图元。纹理过滤器通过glTexParameteri函数来指定。 1)放大纹理过滤器 //GL_NEAREST最近点采样块有明显锯齿,GL_LINEAR线性过滤效果较好 glTexPa

自由理想的足迹 3199

OpenGL之纹理过滤的四种方式

<br />I.纹理过滤:<br />当三维空间里面的多边形经过坐标变换、投影、光栅化等过程,变成二维屏幕上的一组象素的时候,对每个象素需要到相应纹理图像中进行采样,这个过程就称为纹理过滤。<br /><br />II.纹理过滤通常分为2种情况:<br /> a) 纹理被缩小 GL_TEXTURE_MIN_FILTER <br /> 比如说一个8 x 8的纹理贴到一个平行于xy平面的正方形上,最后该正方形在屏幕上只占4 x 4的象素矩阵,这种情况下一个象素对应着多个纹理单元。<br /> b) 纹理被

sharp2wing的专栏 8968

Android OpenGL 纹理绘制图像---基础知识

纹理贴图的基础知识和实现的流程

qiaoyanfei的专栏 2657

大模型训练(1):流水线并行

Gpipe的方法是,在训练时计算和运用的是micro-batch里的均值和方差,但同时持续追踪全部mini-batch的移动平均和方差,以便在测试阶段进行使用。流水线并行的核心思想是:在模型并行的基础上,进一步引入数据并行的办法,即把原先的数据再划分成若干个更小的batch,分批送入GPU进行训练,算一部分就让下一个GPU动起来。从实验结果可知,在关掉NVlinks的情况下,Gpipe一样也能实现随着GPU数量的增加,训练速度也增加的效果。前文说过,随着模型的增加,每块GPU中存储的中间结果也会越大。

呆呆象呆呆的博客 1968

Android OpenGL ES(七)----理解纹理与纹理过滤

1.理解纹理   OpenGL中的纹理可以用来表示图像,照片,甚至由一个数学算法生成的分形数据。每个二维的纹理都由许多小的纹理元素组成,它们是小块的数据,类似于我们前面讨论过的片段和像素。要使用纹理,最常用的方式是直接从一个图像文件加载数据。   每个二维纹理都有其自己的坐标空间,其范围是从一个拐角的(0,0)到另一个拐角的(1,1)。按照惯例,一个维度叫做S,而另一个称为T。当我们想要把

李元静 6685

中文实体关系抽取数据集大盘点:从百度Duie2.0到医疗CBLUE,哪个更适合你的NLP项目?

本文全面分析了中文实体关系抽取领域的主流数据集,包括百度DuIE 2.0、医疗CBLUE等,帮助开发者根据项目需求选择最适合的数据集。文章详细对比了各数据集的特点、适用场景及优化策略,为自然语言处理项目提供实用指南。

weixin_29284657的博客 121

【Direct3D】纹理过滤

与人不求备,检身若不及。 ——《尚书·伊训》。 与人:对于别人。备:完备,十全十美。检身:检在自己。不及:不够。这两句大意是:对于别人不求全责备.检查自己总觉得像是有某些不足。这两句是说对待别人.不应过于苛求.要看到人家的长处,优点;而对待自己要严格.要经常认识自己的不足,这样才指保持谦虚、谨慎.既能学到别人的长处,又能克服自身的缺点。然而在现实生活中,人们往往过分地苛求别人,过高地估计自己。因此,熟记这个名句,常常对照检查自己,是会受益非浅的。可供论述严以律己、宽以待人时引用。 纹理过滤 什么是纹.

春秋繁露 1239

Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案

【代码】Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案。

2401_86789230的博客 2万+

Qualcomm平台下基于QSEE的指纹识别方案移植之四TA移植

本文只介绍TA移植的过程,不做技术分析,关于TA开发另做记录。 一、TA介绍 TA,Trusted application 可信应用,是运行于QSEE中的可执行程序。 指纹TA文件如下,形式一般是 xxx.mbn; xxx.b0 ~ xxx.b6, xxx.flist, xxx.mdt; xxx.mbn 可以理解为其它几个文件的集合,签名的时候用的就是这个文件,签完名之后,有对应的工具将它...

梦路遥 7548

浅谈OPenGL中的纹理过滤

纹理图像中的纹理单元和屏幕上的像素几乎从来不会形成一对一的对应关系。线性过滤并不是把最邻近的纹理单元应用到纹理坐标中,而是把这个纹理坐标作为的纹理单元的加权平均值应用到这个纹理坐标上(线性插值)。线性过滤最显著的特征就是当纹理本拉伸时出现的失真图像,但是和最邻近过滤模式下所呈现的斑驳状像素块相比,这种失真更接近真实,没有那种人工操作的 痕迹。GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。

danshiming的博客 1413

STM32CubeMX-电机控制2-电机相关配置部分

STM32CubeMX-电机霍尔传感器 写在前面的话:之前一直使用库函数,调程序时总会觉得是配置出现问题,要画一些时间去检查配置程序,所以目前转到了STM32CubeMX。写这些内容一方面是整理记录,因为是刚入门,所以难免出现错误,希望能得到大家指正;另一方面是因为自己一个人调试,走了很多弯路,写下来希望能给相同处境的人一些参考。 步骤一: 电机霍尔传感器接口 我目前使用的是STM32F4,电机的...

niker_co的博客 1万+

OpenGL纹理映射与环绕模式

转载自 OpenGL超级宝典笔记——纹理映射 基础过滤 在纹理映射过程中,纹理元素与屏幕上的像素几乎不是一一对应的。一般情况下,在把纹理映射到几何图形的表面上时,我们需要对其进行拉伸或收缩。 根据一个纹理贴图的拉伸或收缩来计算颜色片段的过程称为纹理过滤。OpenGL中有放大过滤器和缩小过滤器。这两种过滤器的pname参数分别为GL_TEXTURE_MAG_FILTER,GL_TEXTURE_...

【黑键】 2127

S型速度曲线C程序实现

S型速度曲线C语言程序实现 前言 S型曲线相较于梯形速度曲线具有运行更加平稳的特点,S型曲线共有八种运行情况,感兴趣可以查阅相关文献 代码段 #include <stdio.h> #include <math.h> #define FP64 double int main(void) { /**************************** 定义相关变量(需要映射到PLC寄存器才能进行监控) ***********************/ FP6

LSX312441548的博客 8391

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 111

OpenGL ES 3.0纹理过滤技术详解:Mipmap、Wrap模式与采样器状态

OpenGL ES 3.0作为移动设备上主流的图形API,其纹理处理技术直接影响渲染质量和性能。本文将深入解析纹理过滤的核心机制,包括Mipmap生成、过滤模式选择和纹理环绕方式,帮助开发者掌握高效纹理渲染的关键技巧。 ## 一、纹理过滤基础:从像素到纹素的桥梁 纹理过滤是解决纹理映射时**像素与纹素不匹配**问题的核心技术。当3D物体表面的纹理被映射到屏幕像素时,会出现两种典型情况: -

gitblog_01139的博客 888

Power domain 划分该如何下手

假如PD1比PD3更always on的话,我们只需要插入普通buffer即可,因为PD3 on,PD1也肯定是ON,PD1 off,PD3肯定时off,PD1能cover PD3的电源情况,因此使用普通buffer也可,但是处于省电角度,我们还是使用AO buffer;在我们做多power domain时,在切分power domain时,需要谨慎,稍有不慎,就会出现congestion以及timing问题,那问题来了,我们在切分power domain时有什么考究么,今天小编就和大家一起讨论讨论。

芯冰乐 206

WebGPU纹理采样技术详解:各向异性过滤与MIP映射

你是否曾在3D场景中观察到远处纹理模糊成色块,或倾斜表面出现明显的锯齿状纹路?这些问题源于传统纹理采样技术在处理视角变化时的固有缺陷。WebGPU作为新一代Web图形API,通过精细化的纹理采样控制为开发者提供了底层解决方案。本文将系统解析MIP映射(MIP Map)与各向异性过滤(Anisotropic Filtering)技术原理,通过12个代码示例与8张对比图表,帮助你掌握从基础采样到高级优...

gitblog_00964的博客 1306

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OpenGL 纹理过滤和 mip 贴图

一、概念 1. 纹理过滤 当纹理贴到具体像素上时,像素需要到纹理图像中进行采样,这个过程称为纹理过滤。 纹理过滤通常有两种情况:放大(GL_TEXTURE_MAG_FILTER)和缩小(GL_TEXTURE_MIN_FILTER)。 2. mip 贴图 mip 贴图只适用于纹理过滤缩小的场景,其原理是将纹理按照2的倍数进行缩放,直至图像1*1的大小。在贴图时,OpenGL 会自动选择合适大小的纹理...

阿飞的博客 2018

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Unity Shader-兰伯特光照模型与Diffuse Shader
下一篇: Unity Shader-Phong光照模型与Specular
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值