【问题标题】:Why do we need texture filtering (bi-linear, trilinear, anisotropy...)为什么我们需要纹理过滤(双线性、三线性、各向异性……)
【发布时间】:2016-09-17 01:38:04
【问题描述】:

也许我对如何实现纹理映射的理解是错误的。我最近完全用 Java 构建了一个 3D 引擎(我知道我手头有很多时间)并且我完成了纹理映射部分。我这样做的方式是,当我将像素绘制到屏幕上时,我会在该位置查找纹理的颜色。我知道纹理过滤有助于减少以更倾斜的角度观看的远距离纹理的模糊度。但是为什么这个问题甚至会首先出现呢?它没有在我的实现中。为什么缩小图像时会丢失分辨率?

这是我的引擎的图像。

【问题讨论】:

  • 我认为过滤解决的实际问题不是模糊,而是你在飞机远端得到的过度锐化的外观。 Bad 过滤使它看起来很模糊。见:oi62.tinypic.com/zmds7n.jpg
  • 另外,想想为什么图像编辑程序在缩小图像时会执行过滤。您正在失去分辨率,因为可用于表示同一图像的像素较少。所以你做了一些过滤,试图让这些像素代表一个以上的源像素。
  • 好吧,当我缩小图像时,我的像素比我需要绘制的像素多得多。我所要做的就是选择我要绘制的像素。这不会导致图像模糊。但是,当我拉伸图像时,我没有足够的像素来覆盖更大的画布,我必须开始插入中间像素,这会导致图像模糊。
  • 当您必须选择要绘制的像素时,您会遗漏信息。它不会产生模糊的图像,但通常会产生锯齿状的图像。看看这个:你能看出用“最近邻”(你的算法)和 Paint.Net 的“最佳”算法缩小图像之间的区别吗? i.imgur.com/7csNSaA.png
  • 这是有道理的,但大多数在线消息来源都说没有 AF 会导致纹理被拉伸和模糊。

标签: graphics 3d textures texture-mapping


【解决方案1】:

两个词:奈奎斯特定理。

您的纹理是一个信号,屏幕像素是采样位置(因此术语采样器是指将纹理采样到屏幕像素的单元)。奈奎斯特定理说,要忠实地表示带有样本的信号,该信号不得包含高于平均采样频率一半的频率。如果不满足该约束,则会发生混叠。因此,当您缩小纹理时,您实际上是对其进行二次采样,如果纹理信号中的采样距离变得大于(即采样频率低于)最高解析纹理特征之间距离的两倍,则会导致混叠。

因此,在每个离散采样系统中,在采样器之前都有一个所谓的“抗混叠滤波器”。

【讨论】:

  • 在我投票之前快速提问。那么各向异性是一种抗锯齿算法吗?
  • @JackLe:不。各向异性是形容事物不一样的名词(如字典中的),无论方向如何。在纹理过滤的情况下,各向异性意味着过滤截止频率在方向之间变化以反映任一方向的采样密度。此外,您通常不会应用过滤器“算法”,而是应用方法(含义上的细微差别)。
  • 我阅读了大量的维基百科。显然,屏幕上的像素在垂直方向上的延伸与在 3d 空间中水平方向上的延伸不同。 MIPmapping 使用各向同性缩放,这意味着缩放后的纹理在 x 和 y 方向上的收缩量相同,这不适合像素在屏幕上的拉伸方式。各向异性使用 RIP 映射,它一次向一个方向拉伸纹理,使其能够找到“完美”的纹理映射大小。谢谢你:)
【解决方案2】:

两个字:云纹图案

见:https://en.wikipedia.org/wiki/Moir%C3%A9_pattern

如果你的纹理中有规律的重复图案,那么当它被采样的频率接近纹理中图案的频率时,这些大面积明暗区域的图案就会出现。

这就是为什么经常使用棋盘来展示双线性过滤的好处。

用棋盘纹理试试你的引擎。

请注意,这一种频率混叠效应,如“奈奎斯特定理”答案中所述,但这种特殊的混叠效应很容易理解,无需任何复杂的数学运算。

【讨论】:

    【解决方案3】:

    您可以轻松理解,当您显示的像素少于原始图像中的像素时,您会丢失信息并产生令人不快的伪影。细节太多,有些乱七八糟。

    考虑一个序列或红色/绿色/蓝色像素。如果每隔三个像素采样一次,您将获得纯红色、纯绿色或纯蓝色行,具体取决于您从哪里开始。如果采样率接近 3,您将观察到几个红​​色、绿色、蓝色像素相继出现的序列。这称为混叠。 (就像在过去一样,当你通过直接抽取来缩小精灵时,效果是灾难性的。)

    解决方法是让目标像素是它所覆盖的源像素的混合,这相当于平均过滤器的效果。实际上,通过减小它们的幅度,您可以更均匀地投射细节。当 X 和 Y 的缩放因子不同时,过滤器将是各向异性的。

    另请注意,插值没有帮助,因为当您需要超像素分辨率时,它会创建亚像素分辨率。 (在前面的示例中,您会在 RGB 运行之间获得缓慢的混合。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多