资源描述
纹理过滤与反走样
朱元伟 计算机应用09研 2110912097
进行纹理过滤时,正在使用的纹理通常也正在被进行放大或缩小。换句话说,这个纹理将被映射到一个比它大或小的图元的图象上。纹理的放大会导致许多像素被映射到同一个纹理像素上。那么结果看起来就会使矮矮胖胖的。纹理的缩小会导致一个像素被映射到许多纹理像素上。其结果将会变得模糊或发生变化。 另外将一张黑白的世界象棋图映射到物体表面, 当物体表面小到接近单位像素时, 表面只能显示黑色或白色, 当物体位移或旋转时, 会出现黑白闪烁现象要解决这些问题,我们可以将一些纹理像素颜色融合到一个像素颜色上。
没有反走样
正弦滤波器
1.双线性过滤
1.1 双线性过滤的工作原理
其工作原理是将一个像素分成2X2的纹理元素区域块这样我们就拥有A、B、C、D 4个纹理元素区域了,然后以目标纹理的像素点为中心,对该点附近的这个4个像素颜色值求平均值。
再将这个平均颜色值贴至目标图像素的位置上。双线性过滤的优点是运算量少,效果也很不错.
上图中显示出一条直路你可以看到左边的斜线标志在某个距离外,会出现一些环状失真的现象
这是未采用双线性过滤的效果,可以看见很明显的马赛克现象。
这是采用了双线性过滤
后的效果,马赛克没有了。
1.2双线性过滤的问题
双线性过滤是最基本的3D纹理过滤技术,通过使用双线性过滤,不同像素间的过渡会变得比较圆滑,不过经过双线性处理后的图像会显得有些模糊,比较适用于有一定景深的静态影像,不适合非常小的三维物体,也不适用于移动中的物件。因为会产生如条纹和纹理变形等,当视角发生变化时,就可能感觉到闪烁感等的问题。
图中铁丝网应该是均匀的,但在这里成了不均匀的分布,在移动的时候,这些地方就会感到有闪烁。注意图中箭头所指之处。
这是应用了mipmap后的效果
2. MIP-MAP
2.1 MIP-MAP思想与算法
当一个物体离观察点较远的时候,并不需要这样高分辨率的纹理。mipmapping是在纹理缓存里面装载不同分辨率的纹理位图,当物体里观察点较近的时候采用高分辨率的纹理,离开观察点较远的时候采用低分辨率的纹理位图,就可以在很大程度上消除远端物体纹理的闪烁感。mipmapping的实现是以需要更大的纹理缓存为代价的,因为纹理缓存里面需要为场景中的物体保存不同分辨率的几套位图[1]。
Mip-Map图映射方法是对前置滤波法的一种加速办法,是一种牺牲精度来提高速度的纹理映射方法。 它采用一个适当大小的正方形区域近似表示图象空间一个象素在纹理空间的映射区域,用该正方形区域的样本平均值近似作为图象空间一个象素的纹理计算值。 Mip-Map图映射方法预先将纹理函数值按照不同的分辨率记录在纹理数组中,作为纹理查找表。其中低分辨率的函数值由比它高一级分辨率的函数值取平均得到。
设t(u,v)是纹理函数,给定的分辨率是N×N(如512×512),将纹理空间划分成N×N个小正方形区域,取每个小正方形区域中的纹理函数平均值即得N×N个纹理值,按红、绿、蓝3个分量分别存放于3个N×N的二维数组中,即为Mip图的第一级数据(在设定的N×N分辨率下的最高分辨率纹理值)。
设屏幕空间一象素对应到纹理空间的4个角点构成的四边形的最大边长d,按照分辨率由高向低往上分层存放Mip-Map图映射表:
如果选取最高分辨率,即屏幕空间一象素几乎对应纹理空间的1(20)个正方形。此时压缩倍数是20,正方形的边长是1,应选取1层。
如果屏幕空间一象素几乎对应纹理空间的22个正方形,此时压缩倍数是21,正方形的边长是2,应选取2层。
如果屏幕空间一象素几乎对应纹理空间的2N个正方形,此时压缩倍数是2N-1,正方形的边长是N,应选取N层。
mip-map在确定屏幕上可见表面的纹理过程如下[2]
(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层的纹理得到
2.2 MIP-MAP出现的问题
在mipmapping中,由于采用了不同分辨率的纹理,在这些不同分辨率的纹理交界的地方,我们就有可能看见一个明显的边界,这显然是不符合实际情况的。另外,在场景中移动的时候,当显示的物体由一个分辨率的纹理切换到另一个分辨率的纹理的时候,我们就会看见纹理突然发生了变化。
使用三线性过滤,几乎看不出界限的存在了
纹理突然发生了变化
3.三线性过滤
3.1 三线性过滤原理
三线性过滤技术主要是解决双线性过滤与Mip Mapping相配合使用时所出现的不同纹理层接缝的突发变化失真问题。三线性过滤的原理同双线性过滤一样,只不过三线性过滤的采集范围更大:它主要是在双线性过滤的基础之上增加了4个的纹理元素采样参考,也就是三线性过滤必须使用两次双线性过滤,即必须计算2X4=8个像素的值[3]。
三线性过滤可以比双线性过滤更有效地解决不同LOD细节等级纹理过渡时出现的组合交叉重叠现象。
从上图可以以看到,在使用三线性过滤后,虽然接缝现象不见了,但存在有过渡模糊的现象
从上图可以以看到,在使用三线性过滤后,虽然接缝现象不见了,但存在有过渡模糊的现象
3.2三线性过滤的问题
当物体消失的方向(透视方向)和我们的视角有一定夹角时,三线性过滤仍然存在失真现象。
为什么会出现过渡模糊的现象呢?这是因为这条路相对于观察者来说,是相当“扁平”的,所以一个像素在贴图上的图元像素会变得很扁。由于形状的不规则,显示芯片在选择不同分辨率的Mip Mapping时会选较低分辨率的Mip Mapping,这样就会造成在某个方向下分辨率是适当的,但是在另一个方向则会过渡模糊。
我们可以强迫显示芯片使用较高分辨率的贴图来解决这个问题。不过,这个方法只能用在方向是固定的情形,如果视角常常会转动(Z轴旋转表面),那它可能反而会变得更为模糊。当然,对于一般视角变化不大的情形,如一般的赛车游戏,效果还是不错的[4]。
不过,对于像是第一人称射击、飞行仿真等视角变化较大的游戏来说,这个方法就不见得这么有用了。针对这个问题,人们又推出了各向异性过滤技术。
4. 各向异性过滤
各向异性过滤主要作用通过增加更多的贴图模型来消除Z轴旋转表面的锯齿状线条、而达到更好的画面效果。它融合了双线性过滤和三线性过滤的一些特点。但从各向异性过滤又不同于传统的双线性和三线过滤:后两者都是各向同性的过滤,各方向上矢量值是一致的,在渲染时各个图元像素的尺寸、形状都是固定的;各向异性过滤正好相反,它主要处理矢量方向上值不一致的数据,在渲染时使用尺寸可变的图元像素。
启用各向异性过滤后可以看到几乎所有的失真包括过渡模糊的现象,都已经消失了
不过在显卡实际工作中,上面几种过滤模式是相辅相承的[5]。各向异性过滤一般都配合双线性过滤或三线性过滤来运行的。不过,它的缺点也是很明显的:对每个贴图来说,使用三线性过滤的情形下,最多会需要读取128个像素。这会占用很多显存的带宽,因此会造成性能降低。
不过,这个问题在今天已经不再是问题了—目前主流的显示芯片在设计时就考虑了对各项异性过滤的硬件支持并提供了相当高采样率如Radeon9500、Radeon9700。
参考文献 :
[1] 杜颖,吴保国,武玉国 全球虚拟地形环境中mip-map研究[J] 测绘科学技术学报 第5卷,第23期 2006.10
[2] 孙芳,戴卿,周太平 Mipmap应用于纹理绘制的新算法及实现[J] 应用科技 第35卷 ,第4期 2006.9
[3]汤彬.基于OpenGL的纹理映射研究[J].实验室研究 与探索,2006,25(5):576-579.
[4] 付恺,李春霞,杨克俭,李波,等.Bump Mapping原理及在OpenGL下的实现[J].交通与计算机,2004(2):
54-57.
[5] 郭立,杨毅 基于纹理贴图及高斯滤波的纹理反走样方法[J] 第34卷,第5期 2008.3
展开阅读全文