游戏画面设置中的“各向异性过滤”是做什么的?
栏目:公司新闻 发布时间:2024-04-29
游戏设置中的“各向异性过滤”具体是影响什么东西的?x4x8x16又有什么区别?这个选项吃显卡性能还是吃CPU性能?“各向异性”是指“x方向”和“y方向”采用“不一样的缩略比”的意思比如256x256的贴图,不是从正面看,

游戏设置中的“各向异性过滤”具体是影响什么东西的?x4 x8 x16又有什么区别?这个选项吃显卡性能还是吃CPU性能?

“各向异性”是指“x方向”和“y方向”采用“不一样的缩略比”的意思

比如256x256的贴图,不是从正面看,而是偏斜着看,x方向就很窄了,y方向几乎没变化

这时候,显卡会把“256x256”的贴图过滤成“128x256”甚至“64x256”的贴图后渲染模型

这样渲染出来的画面看上去会更自然


如果不使用“各向异性过滤”会发生什么现象呢?

如果坚持使用256x256分辨率,横向移动的时候画面会出现雪花现象,因为像素是跳着采样的

如果缩放成64x64分辨率,那么模型整体变模糊,因为y轴方向本该用256分辨率,却用了64分辨率

先回答简单的问题,吃显卡的。

再回答复杂的,异向过滤是啥意思。贴图本身是矩形,到了3d游戏里根据视角变化看上去可能变窄,变矮,变梯形,这时候一个像素该显示什么颜色就要去检测一下周围其他像素的颜色,让图案更线性,不至于明显马赛克。

我用两个你可能接触过的东西来解释。

你平时用Word(或一些文字软件),文字的边缘就开启了柔化功能,如果不开启,文字边缘就有锯齿。

你平时玩的Photoshop(或者任何一个看图软件),打开一张图片,整个图像开启了一个叫做插值过滤的功能,当有些相邻像素的颜色差别太大时,比如一个是纯黑,一个是纯白,它就会在两者之间给你加一个灰色像素,这可以柔化整个图像中的噪点。如果关掉插值过滤,图片会按照原始像素的方式显示,可能出现噪点。

而游戏包含了上述两种类似功能。第一种通常叫做抗锯齿,是对3D对象的边缘进行柔化,比如在近景人物与远景之间的轮廓进行柔化,避免对象边缘有锯齿感。第二种就是贴图过滤,对贴图做一个柔化。

如果不开贴图过滤,3D贴图通常比2D图片多一种状况,第一是有噪点,第二是花纹,当贴图是某种密集的重复图案时,并且角度有一定倾斜时,在图案有时会组合出奇怪、有规律的花纹(典型的是远处的地砖)。开启贴图过滤可以缓和这种花纹。

而各项异性就是比较常用的一种贴图过滤类型,擅长处理贴图在倾斜时的花纹,而且占用性能较低。而x4、x8、x16选项表示采样范围,x4表示基于4x4个像素进行采样,x16表示基于16x16个像素进行采样(你可以理解为柔化滤镜的范围),值越大,计算范围越大,占用的性能越多,如果该游戏有大量密集图案的贴图,你可以开大点,反之可以开小点,节约点性能。

不开的话, 由于贴图的时候画面会形变. 于是视角越倾斜, 越远处的东西就会越模糊.

左: 无各向异性采样. 右: 有各向异性采样.

众所周知, 渲染的时候有个往模型上贴图的过程: CPU会把贴图加载到显存里, 贴图的时候, 找到像素对应的纹理颜色贴上来. 但对于远处的东西, 需要取一大块区域, 然后模糊一下才行(不然会摩尔纹).

于是为了求快, 每个像素对应的纹理, 是直接按着正方形的区域去取的.

比如下图的1号区域(假设它是一个像素), 它明明对应纹理上一块斜四边形的"纹素", 实际上却把一整个方形(红框)里的东西贴过来[1]. 在在近处没有问题, 格子比较小, 但放远处, 这误差, 这问题还不大? 所以我们理当斜着取.

实际执行的时候计算机并不会"模糊一下", 而是一开始就加载了一级一级缩放过的材质贴图 (图3左), 这样在远处采样时, 可以直接用低清图去贴, 免得有摩尔纹(屏幕上对应远方的像素数量少, 采样频率低, 会混叠).

而各向异性过滤, 就是在每一级上, 多存一些图长宽上压缩比不同的图(所以叫各『向』『异』性), 这样就和"斜着取"近似了,) 就抵消了一部分采样时的形变. (按我理解, "过滤"一词, 指的就是对显存中纹理图的范围查询本身, 把贴图当数据, 需要筛选合适的纹理数据读出)

下图是显存里放着的纹理, 左边是没有各向异性过滤时, 分层放置的贴图, 占据的内存空间比较:

左: 关闭(1倍显存) / 中: X2 (2倍显存) / 右: X16 (3倍显存)

上述的图和解释, 都直接来源于GAMES101 现代计算机图形学入门 闫令琪老师, 最后一张图的前两张是我P的.

非要说吃运算资源的话, 大概是载入贴图的时候, CPU多费一些功夫去压缩, 会费一些内存的IO.

本回答是初学者的笔记 (涉及引擎和硬件如何真实实现的地方待修改)

纹理的插值(过滤)方式。

最近邻采样直接在纹理上找离采样点最近的纹素。

双线性插值在采样点最近的四个纹素上加权平均。

三线性插值在采样点所处mipmap层级的相邻两张纹理中分别做双线性插值,然后将两个结果加权平均。

但以上三种方式都不针对视角与模型表面有夹角的情况。

它们是各向同性的。采样点是正方形or正方体分布。


如果视角这么斜着看地面:

想象屏幕上每个像素点,每个像素其实是个正方形

将这个正方形沿着视角看的方向投射出去,其实是个四棱锥

这个四棱锥与地面相交,形成的是一个梯形,或者是一个别的没什么特征的四边形。

再用正方形的方式采样,就不怎么准确了。

所以各向异性过滤就是干这个的。


至于倍数,一般情况下,要么不开,要么开最大。

平台注册入口