ImagePlugin::default_nearest() vs default_linear()

Bevy 0.18.1 中 ImagePlugin 提供两种便捷构造方法,区别仅在纹理采样过滤模式。

源码实现

// Bevy 默认 = default_linear()
impl Default for ImagePlugin {
    fn default() -> Self { ImagePlugin::default_linear() }
}
 
impl ImagePlugin {
    pub fn default_linear() -> ImagePlugin {
        ImagePlugin { default_sampler: ImageSamplerDescriptor::linear() }
    }
    pub fn default_nearest() -> ImagePlugin {
        ImagePlugin { default_sampler: ImageSamplerDescriptor::nearest() }
    }
}
 
impl ImageSamplerDescriptor {
    pub fn linear() -> Self {
        Self {
            mag_filter: ImageFilterMode::Linear,
            min_filter: ImageFilterMode::Linear,
            mipmap_filter: ImageFilterMode::Linear,
            ..Default::default()
        }
    }
    pub fn nearest() -> Self {
        Self {
            mag_filter: ImageFilterMode::Nearest,
            min_filter: ImageFilterMode::Nearest,
            mipmap_filter: ImageFilterMode::Nearest,
            ..Default::default()
        }
    }
}

关键差异

维度default_linear()default_nearest()
mag_filterImageFilterMode::LinearImageFilterMode::Nearest
min_filterImageFilterMode::LinearImageFilterMode::Nearest
mipmap_filterImageFilterMode::LinearImageFilterMode::Nearest
采样纹素数单 mip 层通常 4 tap;trilinear 时约 8 tap单 mip 层通常 1 tap
是否创造新颜色在颜色边界处通常会产生中间色否(始终返回参与采样的原始纹素值)
放大效果平滑但模糊锐利、像素化
性能影响略多计算;具体取决于 mipmap / AF / GPU 实现略少计算;具体取决于 mipmap / GPU 实现
Bevy 默认✅ 是需显式设置

影响范围

default_sampler全局默认,影响所有标记为 ImageSampler::Default 的图片。单张图片可通过 ImageSampler::Descriptor(...) 覆盖。

使用场景

  • default_linear()(默认):照片、写实纹理、渐变、3D 游戏
  • default_nearest():像素画、精灵图动画、复古风格、UI 元素

wgpu 映射

ImageFilterMode 直接映射到 wgpu FilterMode

  • NearestFilterMode::Nearest(D3D11: D3D11_FILTER_MIN_MAG_MIP_POINT
  • LinearFilterMode::Linear(D3D11: D3D11_FILTER_MIN_MAG_MIP_LINEAR

通过 as_wgpu() 方法转换为 wgpu SamplerDescriptor

各引擎对比

引擎设置方式
BevyImagePlugin::default_nearest()
UnityTexture Import → Filter Mode → “Point (no filter)“
GodotImport Settings → Filter → “Nearest”
LÖVElove.graphics.setDefaultFilter("nearest")

相关页面