即使使用 [MTKTextureLoader.Option.SRGB : false],金属渲染奇怪的深色纹理?
Metal rendering odd darker textures even with [MTKTextureLoader.Option.SRGB : false]?
我已经检查了 this 问题。在纹理加载器选项中使用 [MTKTextureLoader.Option.SRGB : false]
不起作用。所有发生的事情都是当我做 [MTKTextureLoader.Option.SRGB : true]
时,它变暗了很多而不是稍微变暗了。一定有别的东西。这是这种不需要的行为的示例。
这是原始纹理供参考:
如您所见,我正在使用鼠标将原始的压实冰块纹理放在渲染的纹理上。即使使用 [MTKTextureLoader.Option.SRGB : false]
,它也轻得多。尽管我悬停在渲染纹理上的图像略微透明,但不想要的效果仍然清晰存在。
这是我的片段函数:
fragment half4 TextureFragment(VertexOut VertexIn [[stage_in]], texture2d<float> Texture [[texture(0)]]) {
constexpr sampler ColorSampler(mip_filter::nearest, mag_filter::nearest, min_filter::nearest);
float4 Color = Texture.sample(ColorSampler, VertexIn.TexCoord.xy / VertexIn.TexCoord.z);
return half4(Color.r, Color.g, Color.b, 1);
}
我该如何解决这个问题?我如何渲染实际纹理而不是较暗的版本?
注意:我必须解决问题,而不是解决问题。解决方法类似于片段着色器中的 return half4(Color.r+0.1, Color.g+0.1, Color.b+0.1, 1);
。我必须从根本上解决问题。为什么库中有这么多错误?
我也试过把黑色背景改成白色,但没有改变纹理,所以没用。
我想我曾经被告知要使用 Xcode 的 GPU 帧调试器检查纹理。这是什么意思?
将不胜感激。
为了加载这些 PNG 图像,我需要将 pixelFormat 设置为 bgra8Unorm_srgb 而不是 bgra8Unorm。为什么默认情况下不只是 bgra8Unorm_srgb? 指定如何执行此操作。我自己弄明白了,同时我没有收到其他评论,也没有其他答案。基本上是我一个人想出来的。
MetalView.colorPixelFormat = .bgra8Unorm_srgb
所以我可以
PipelineDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm_srgb
所以我得到了正确的渲染图像
我已经检查了 this 问题。在纹理加载器选项中使用 [MTKTextureLoader.Option.SRGB : false]
不起作用。所有发生的事情都是当我做 [MTKTextureLoader.Option.SRGB : true]
时,它变暗了很多而不是稍微变暗了。一定有别的东西。这是这种不需要的行为的示例。
如您所见,我正在使用鼠标将原始的压实冰块纹理放在渲染的纹理上。即使使用 [MTKTextureLoader.Option.SRGB : false]
,它也轻得多。尽管我悬停在渲染纹理上的图像略微透明,但不想要的效果仍然清晰存在。
这是我的片段函数:
fragment half4 TextureFragment(VertexOut VertexIn [[stage_in]], texture2d<float> Texture [[texture(0)]]) {
constexpr sampler ColorSampler(mip_filter::nearest, mag_filter::nearest, min_filter::nearest);
float4 Color = Texture.sample(ColorSampler, VertexIn.TexCoord.xy / VertexIn.TexCoord.z);
return half4(Color.r, Color.g, Color.b, 1);
}
我该如何解决这个问题?我如何渲染实际纹理而不是较暗的版本?
注意:我必须解决问题,而不是解决问题。解决方法类似于片段着色器中的 return half4(Color.r+0.1, Color.g+0.1, Color.b+0.1, 1);
。我必须从根本上解决问题。为什么库中有这么多错误?
我也试过把黑色背景改成白色,但没有改变纹理,所以没用。
我想我曾经被告知要使用 Xcode 的 GPU 帧调试器检查纹理。这是什么意思?
将不胜感激。
为了加载这些 PNG 图像,我需要将 pixelFormat 设置为 bgra8Unorm_srgb 而不是 bgra8Unorm。为什么默认情况下不只是 bgra8Unorm_srgb?
MetalView.colorPixelFormat = .bgra8Unorm_srgb
所以我可以
PipelineDescriptor.colorAttachments[0].pixelFormat = .bgra8Unorm_srgb
所以我得到了正确的渲染图像