材料过滤
编辑在计算机图形学中,纹理过滤或纹理平滑是用于确定纹理映射像素的纹理颜色的方法,使用附近纹素(纹理的像素)的颜色。 纹理过滤主要有两大类,放大过滤和缩小过滤。 根据具体情况,纹理过滤是一种重建过滤器,其中插值稀疏数据以填充间隙(放大),或者是一种抗锯齿 (AA) 类型,其中纹理样本存在的频率高于样本频率所需的频率 纹理填充(缩小)所需。 简而言之,过滤描述了如何以许多不同的形状、大小、角度和比例应用纹理。 根据所选的过滤器算法,结果将显示不同程度的模糊、细节、空间混叠、时间混叠和块。 视情况而定,可以在软件(例如软件渲染包)中或在硬件中执行实时过滤或 GPU 加速渲染,或两者兼而有之。 对于大多数常见的交互式图形应用程序,现代纹理过滤由专用硬件执行,该硬件通过内存缓存和预取优化内存访问,并实施可供用户和开发人员使用的一系列算法。
纹理过滤的方法有很多种,它们在计算复杂度、内存带宽和图像质量之间做出不同的权衡。
过滤的需要
编辑在任意 3D 表面的纹理映射过程中,会进行纹理查找以找出每个像素中心落在纹理上的位置。 对于由 3D 游戏和电影中的大多数表面典型的三角形组成的纹理映射多边形表面,该表面的每个像素(或从属像素样本)将与一些三角形和一组重心坐标相关联,用于 在纹理中提供一个位置。 这样的位置可能不会完美地位于像素网格上,需要一些功能来解决这些情况。 换句话说,由于纹理表面可以相对于观察者处于任意距离和方向,因此一个像素通常不直接对应于一个纹素。 必须应用某种形式的过滤来确定像素的最佳颜色。 不充分或不正确的过滤将在图像中显示为伪像(图像中的错误),例如“块状”、锯齿状或闪烁。
一个像素和它在屏幕上代表的纹素之间可以有不同类型的对应关系。 这些取决于纹理表面相对于观察者的位置,并且在每种情况下都需要不同形式的过滤。 给定映射到世界中正方形表面的正方形纹理,在某个观看距离处,一个屏幕像素的大小与一个纹素的大小完全相同。 更接近于此,纹素比屏幕像素大,需要适当放大——这一过程称为纹理放大。 在更远的地方,每个纹素都小于一个像素,因此一个像素覆盖多个纹素。 在这种情况下,必须通过纹理缩小根据覆盖的纹素选择合适的颜色。 OpenGL 等图形 API 允许程序员为缩小和放大过滤器设置不同的选择。
请注意,即使在像素和纹素大小完全相同的情况下,一个像素也不一定与一个纹素完全匹配。 它可能未对齐或旋转,并覆盖最多四个相邻纹素的部分。 因此仍然需要某种形式的过滤。
映射
编辑Mipmapping 是一种标准技术,用于节省纹理缩小过程中所需的一些过滤工作。 它对缓存一致性也非常有益——如果没有它,从远处纹理采样期间的内存访问模式将表现出极差的局部性,即使不执行过滤也会对性能产生不利影响。
在纹理放大过程中,任何像素需要查找的纹素数总是四个或更少; 然而,在缩小过程中,随着带纹理的多边形移动得更远,整个纹理可能会落入单个像素。 这将需要读取其所有纹素并组合它们的值以正确确定像素颜色,这是一项非常昂贵的操作。 Mipmapping 通过预过滤纹理并将其以较小的尺寸存储到单个像素来避免这种情况。 随着带纹理的表面移动得更远,应用的纹理切换到预过滤的较小尺寸。 不同大小的 mipmap 被称为“级别”,级别 0 是xxx尺寸(最接近观察者使用),并且随着距离的增加而增加级别。
过滤方法
编辑本节列出了最常见的纹理过滤方法,按计算成本和图像质量的递增顺序排列。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/198025/