纹理过滤
使用三线性过滤,几乎看不出界 限的存在了
三线性过滤
三线性过滤的原理同双线性过滤一样, 只不过三线性过滤的采集范围更大:它 主要是在双线性过滤的基础之上增加了4 个的纹理元素采样参考,也就是三线性 过滤必须使用两次双线性过滤,即必须 计算2X4=8个像素的值。 三线性过滤可以比双线性过滤更有 效地解决不同LOD细节等级纹理过渡时 出现的组合交叉重叠现象。但是当物体 消失的方向(透视方向)和我们的视角有一 定夹角时,三线性过滤仍然存在失真现 从上图可以以看到,在使用三线性过 象。 滤后,虽然接缝现象不见了,但存在 有过渡模糊的现象 为什么会出现过渡模糊的现象呢?这是因为这条路相对于观察者来说,是相当 “扁平”的,所以一个像素在贴图上的图元像素会变得很扁。由于形状的不规 则,显示芯片在选择不同分辨率的Mip Mapping时会选较低分辨率的Mip Mapping,这样就会造成在某个方向下分辨率是适当的,但是在另一个方向则 会过渡模糊。
• •
•
•
• •
后置滤波法如果取很小的曲面参数,曲面上将是多个点映射到图象空间的同 后置滤波法 一个点B,取这些点的加权平均值作为图象空间屏幕点的亮度(颜色)计算值。 前置滤波法如果对曲面片进行不断的分割直至每一子曲面片经过向图象空间 前置滤波法如果对曲面片进行不断的分割直至每一子曲面片经过向图象空间 映射之后只包含1个象素为止,称为正向映射;或从图象空间的象素( 映射之后只包含1个象素为止,称为正向映射;或从图象空间的象素(所占 的矩形)出发,反求出它对应曲面片的4个角点,从而确定该象素对应的子 的矩形)出发,反求出它对应曲面片的4个角点, 曲面片,称为逆向映射。 曲面片,称为逆向映射。 将此子曲面片与参数空间对应,再由参数空间与纹理空间的映射决定纹理空 将此子曲面片与参数空间对应, 间区域,此时子曲面片对应的纹理空间是一个四边形区域, 间区域,此时子曲面片对应的纹理空间是一个四边形区域,先求出该区域的 纹理加权平均值作为该象素的光亮度或颜色的计算依据,达到一一对应。 纹理加权平均值作为该象素的光亮度或颜色的计算依据,达到一一对应。 景物空间右下方的子曲面片经过向图象空间映射之后只包含1个象素A 景物空间右下方的子曲面片经过向图象空间映射之后只包含1个象素A。 IA是子曲面片映射到纹理空间区域的纹理加权平均值 IA是子曲面片映射到纹理空间区域的纹理加权平均值,作为子曲面片显示点 是子曲面片映射到纹理空间区域的纹理加权平均值, A的光亮度或颜色计算值。 的光亮度或颜色计算值。
按照分辨率由高向低往上分层存放Mip-Map图映射表: 如果选取最高分辨率,即屏幕空间一象素几乎对应纹理空间的1 (20)个正方形。此时压缩倍数是20,正方形的边长是1,应选取 1层。 如果屏幕空间一象素几乎对应纹理空间的22个正方形,此时压缩 倍数是21,正方形的边长是2,应选取2层。 如果屏幕空间一象素几乎对应纹理空间的2N个正方形,此时压缩 倍数是2N-1,正方形的边长是N,应选取N层。
最大边法也叫斜边比较法
MIP-MAP步骤 MIP-MAP步骤
图左边是四棱锥型的mip-map, 其中纹理图案的层 数是[log2S] + 1, 也就是设置一张64X64的纹理图案, mip-map就以64X64为底的四棱锥, 一共有[log264] + 1 = 7层, 最上层为一个像素, 同时我们也知道为何纹理 图案都建议是2的幂次的原因. mip-map的存储是以一张查找表的形式存储的, 如图的右边, 一张64X64 的纹理图案的查找表的大小是128X128. 存储时先提取纹理图案中每像素 的R, G, B值, 然后对R, G, B值逐级压缩来得到. mip-map在确定屏幕上可见表面的纹理过程如下, (1). 计算屏幕上可见表面的中心在纹理空间上的映射点坐标(u, v). (2). 确定纹理空间中以(u, v)为中心, 边长为d的正方形, 要求正方形能覆盖表 面在纹理空间中映射的区域.(实际这样算d太复杂, 一般d为表面在纹理空间 中映射的区域的最大边长) (3). 根据d的大小确定使用哪一级的纹理map. 因为mip-map中的纹理图案存储的是特定的图案, 即只有边长d = 2^k, k = 0, 1, ..., [log2S]的图案, 对于在2^k < d < 2^(k + 1)的边长d, mip-map通过线性插 值第k层的纹理和第k + 1层的纹理得到
三线性过滤
三线性过滤,它的使用是和 mipmapping配合的。在mipmapping 中,由于采用了不同分辨率的纹理, 在这些不同分辨率的纹理交界的地方, 我们就有可能看见一个明显的边界,这 显然是不符合实际情况的。另外,在 场景中移动的时候,当显示的物体由 一个分辨率的纹理切换到另一个分辨 率的纹理的时候,我们就会看见纹理 突然发生了变化。采用三线性过滤就 可以避免这些问题,使不同分辨率的 纹理之间看起来是均匀变化的。
举个例子,你有一块256x256大小的纹理,当它开始向远离观察者的方向开始移 动时,你会看到它开始闪烁和颤动。这种现象的出现是因为我们把一大块纹理映 射到一个很小的区域而引起的。你可能在上一帧时,画的是纹理中(50,20)处的 像素,到了下一帧,却画的是纹理中(60,30)处的像素。如果这两个像素相差很 大,你就会观察到前面所说的现象了。
• Mip-Map图映射方法是一种牺牲精度来提高速度的纹理映射方法。 它 采用一个适当大小的正方形区域近似表示图象空间一个象素在纹理空 间的映射区域,用该正方形区域的样本平均值近似作为图象空间一个 象素的纹理计算值。 Mip-Map图映射方法预先将纹理函数值按照不同的分辨率记录在纹理 数组中,作为纹理查找表。其中低分辨率的函数值由比它高一级分辨 率的函数值取平均得到。 设t(u,v)是纹理函数,给定的分辨率是N×N(如512×512),将纹理 空间划分成N×N个小正方形区域,取每个小正方形区域中的纹理函 数平均值即得N×N个纹理值,按红、绿、蓝3个分量分别存放于3个 N×N的二维数组中,即为Mip图的第一级数据(在设定的N×N分辨 率下的最高分辨率纹理值)。 mip是拉丁文multum in parvo(聚集在一块小区域 内的许多东西)的缩写, mip-map技术根据初始的 纹理图案每边的分辨率S, 形成一个四棱锥型的mipmap
各向异性过滤
各向异性过滤主要作用通过增加更多的 贴图模型来消除Z轴旋转表面的锯齿状 线条、而达到更好的画面效果。它融合 了双线性过滤和三线性过滤的一些特点。 但从各向异性过滤又不同于传统的双线 性和三线过滤:后两者都是各向同性的 过滤,各方向上矢量值是一致的,在渲 染时各个图元像素的尺寸、形状都是固 启用各向异性过滤后可以看到几乎所有的 定的;各向异性过滤正好相反,它主要 失真包括过渡模糊的现象,都已经消失了 处理矢量方向上值不一致的数据,在渲 染时使用尺寸可变的图元像素。 不过在显卡实际工作中,上面几种过滤模式是相辅相承的。各向异性过滤一般都 配合双线性过滤或三线性过滤来运行的。不过,它的缺点也是很明显的:对每个 贴图来说,使用三线性过滤的情形下,最多会需要读取128个像素。这会占用很 多显存的带宽,因此会造成性能降低。 不过,这个问题在今天已经不再是问题了—目前主流的显示芯片在设计时就 考虑了对各项异性过滤的硬件支持并提供了相当高采样率如Radeon9500、 Radeon9700就提供了高达16X的采样率。
三线性过滤和各项异性过滤效果对比
Eropic Filtering(各向同性过滤) Filtering(各向同性过滤) 为了克服最近点采样过滤的缺点,人们开始应用线性过滤技术,这包括 了双线性过滤以及三线性过滤技术,最早出现的线性过滤技术,主要用与屏 幕平行的纹理处理,不考虑与屏幕倾斜成角度的变化,这被称为各向同性过 滤(当然是在各向异性过滤出现之后才开始这么称呼)。 Anisotropic Filtering(各向异性过滤) Filtering(各向异性过滤) 纹理不仅仅可以缩小、放大,它还可以倾斜、变形,这样古老的仅考虑 和屏幕平行的纹理的各向同性过滤技术就不怎么灵光了,各向异性过滤就应 运而生。 各向异性过滤是对一个针对变形的三维物体纹理的过滤技术,它对像素 点周围方形8个或更多的像素进行取样,获得平均值后映射到像素点上。各向 异性过滤可以取得比各向同性过滤中的三线性过滤更好的效果,相对的,也 需要更多的像素填充率,自然,处理起来也比三线性过滤来得更慢。 传统的各向同性过滤通常只包换正方形的纹理,各向异性过滤技术引入 了非正多边形的矩形、梯形和平行四边形纹理,这样就可以根据实际情况成 比例地调整单元,各向异性纹理过滤还可以和线性过滤或者mipmap过滤联合 使用,它们并不是互相排斥的关系:各向异性过滤当中,也可以选择双线性 还是三线性。 一般情况下,各向异性过滤技术从16个采样纹理像素中取平均值,其采 样像素是双线性过滤的4倍、三线性过滤的2倍。
双线性过滤
解决
其工作原理是将一个像素分成2X2的 纹理元素区域块这样我们就拥有A、 B、C、D 4个纹理元素区域了,然后 以目标纹理的像素点为中心,对该点 附近的这个4个像素颜色值求平均值。 再将这个平均颜色值贴至目标图 像素的位置上。双线性过滤的优点是 运算量少,效果也很不错. 这是未采用双线性过滤的效果, 可以看见很明显的马赛克现象。
图中铁丝网应该是均匀的,但 在这里成了不均匀的分布,在 移动的时候,这些地方就会感 到有闪烁。注意图中箭头所指 之处。
这是应用了mipmap后的效果
MIPMIP-MAP
• 通过Mip-Mapping,可以为较小 的多边形映射上面积较小的纹理, 这对减少纹理的扰动大有好处。 mipmapping是在纹理缓存里面装 载不同分辨率的纹理位图,当物 体里观察点较近的时候采用高分 辨率的纹理,离开观察点较远的 时候采用低分辨率的纹理位图, 就可以在很大程度上消除远端物 体纹理的闪烁感。mipmapping的 实现是以需要更大的纹理缓存为 代价的,因为纹理缓存里面需要 为场景中的物体保存不同分辨率 的几套位图。
MIPMIP-MAP