【问题标题】:MTKTextureLoader causing banding in grayscale imageMTKTextureLoader 导致灰度图像中的条带
【发布时间】:2019-06-13 03:17:35
【问题描述】:

我正在尝试在金属着色器中实现一个简单的 LUT 颜色等级。它适用于彩色 LUT,但当 LUT 为灰度时,就会出现问题。首先,加载灰度图像会导致“图像解码失败”错误,已通过this bug workaround 修复。

通过将图像重新表征为资产包中的纹理,它可以成功加载,但输出图像上有条带。果然,捕获 GPU 帧表明纹理中引入了条带:

在资源包或源 PNG 中进行快速查看时,不会出现此条带。检查纹理的像素格式显示它已被编码为 ASTC_4x4_sRGB,Apple documentation 声明这是低动态范围内容的压缩格式。似乎这种压缩可能是降低 LUT 纹理的原因。通常在使用 LUT 时,我会注意避免任何压缩,但我找不到在 MTKTextureLoader 中禁用压缩或强制像素格式的方法。

我还尝试了各种 MTKTextureLoader 选项,包括启用/禁用 sRGB、mipmap 等。

关于如何修复条带的任何想法?

【问题讨论】:

    标签: swift metal metalkit


    【解决方案1】:

    了解在资产目录中将MTKTextureLoader 与纹理资产一起使用时,大多数运行时纹理加载器选项都会被忽略,这一点很重要。这可能没有记录在案,但目前确实如此。

    您可以通过在 Xcode 资产目录编辑器中选择您的资产并将其像素格式显式设置为“8 位标准化 - RGBA ",在运行时映射到.rgba8Unorm

    【讨论】:

    • OOOOOOMG!这将教会我不要总是关闭属性窗格!几个小时以来,我一直在寻找类似的设置!
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2015-09-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多