纹理过滤(Texture Filtering)是什么,以及两种主要模式的区别

220 阅读3分钟

1. 纹理过滤的作用

当游戏中的一张小图片(例如 16x16 像素的精灵)被放大显示在屏幕上(例如放大到 160x160 像素)时,渲染引擎需要决定如何填充这些多出来的像素。这个决策过程就是纹理过滤

Godot 主要提供两种过滤模式:

  • Linear (线性过滤,也叫双线性过滤)
  • Nearest (邻近过滤)

2. Linear (线性过滤) - 为什么会导致模糊

  • 工作原理Linear 过滤会查看一个目标像素周围的多個原始像素,然后计算它们的颜色平均值。可以把它想象成在像素之间进行“颜色混合”或“过渡”。
  • 视觉效果:当你放大一张像素图时,Linear 会尝试让图像看起来更“平滑”。对于3D游戏中的真实感纹理(如照片、木材、岩石),这是非常理想的,因为它能减少锯齿和块状感。
  • 对像素艺术的副作用:但对于风格鲜明的像素艺术,这种“平滑”就成了“模糊”。它抹平了清晰的像素边缘和精心设计的颜色对比,完全破坏了像素艺术独有的美感。

3. Nearest (邻近过滤) - 为什么能保持清晰

  • 工作原理Nearest 过滤非常简单粗暴。对于屏幕上每一个要渲染的放大后的像素,它只寻找原始图像中最接近的、对应的那个单一像素,然后直接复制它的颜色。它不会进行任何混合或平均计算。
  • 视觉效果:这样做的结果就是,原始图像中的一个像素,在放大后会变成一个由多个相同颜色像素组成的、规整的方块。这完美地保留了像素艺术的清晰边缘和锐利对比。
  • 别名的利用:这种过滤方式会产生“锯齿”(Aliasing),但这正是像素艺术风格的一部分,甚至是其所追求的视觉效果。

视觉对比

假设你有一个 2x2 像素的简单图像,要把它放大到 8x8 屏幕像素。

  • 使用 Nearest:屏幕上的 8x8 区域会被整齐地划分为 4 个 4x4 的大色块,每个色块的颜色完全对应原始的 4 个像素。结果非常清晰。
  • 使用 Linear:Godot 会尝试在原始4个像素的颜色之间进行平滑过渡。在红色和蓝色像素的交界处,你会看到一系列逐渐从红变到紫再变到蓝的像素,导致整个图像看起来模糊不清。

在Godot中的实践

你提到的路径 rendering -> textures -> canvas textures -> default texture filter 是设置整个项目的默认纹理过滤方式。将其改为 Nearest 意味着你项目中所有2D纹理(如 Sprite2DTextureRect)在默认情况下都会使用邻近过滤,这对于像素艺术项目是最佳实践。

你也可以为单个纹理设置过滤模式:

  1. 文件系统 dock中选中你的纹理资源(如 .png 文件)。
  2. 导入 dock中,找到 “过滤器” (Filter)选项。
  3. 将其从 “线性” (Linear)改为 “最近” (Nearest)。
  4. 点击 “重新导入” (Reimport)。

这样做只会改变这一张纹理的过滤方式,让你可以更灵活地控制项目。

总结

特性Nearest (邻近过滤)Linear (线性过滤)
工作原理复制最近的单个像素混合周围多个像素的平均值
放大效果清晰、锐利、有块状感模糊、平滑
适合场景像素艺术、需要锐利边缘的UI3D纹理、照片、平滑渐变
别名产生锯齿(这正是我们想要的)抗锯齿(平滑锯齿)

所以,为了让你的像素艺术游戏看起来清晰、锐利,充满复古感,将默认纹理过滤器设置为 Nearest 是至关重要的一步!