我正在尝试在金属着色器中实现简单的LUT颜色等级。它与彩色LUT一起使用,但是当LUT为灰度时,问题就会出现。首先,加载灰度图像会导致“图像解码失败”错误,该错误已通过this bug workaround修复。
通过将图像重新表征为资产束中的纹理,可以成功加载图像,但是输出图像上出现了条纹。果然,捕获GPU帧表明纹理中已引入了条纹:
在资产捆绑包或源PNG中进行“快速查看”时,不会出现此带。检查纹理的像素格式表明它已编码为ASTC_4x4_sRGB,Apple documentation指出是低动态范围内容的压缩格式。似乎这种压缩可能会导致LUT纹理降级。通常,在使用LUT时,我会避免任何压缩,但是我找不到在MTKTextureLoader中禁用压缩或强制像素格式的方法。
我还尝试了各种MTKTextureLoader选项,包括启用/禁用sRGB,mipmap等。
关于如何解决条带的任何想法?