什么是 vulkan 色彩空间?

E1H*_*tus 4 graphics vulkan

在创建 vulkan 交换链期间,我一直停留在 VkSwapchainCreateInfoKHR 中的 imageColorSpace 和 imageFormat 参数上。我确实了解 imageFormat 是实际像素编码和存储在内存中的方式,如果它的颜色不是线性的,那么 vulkan 在着色器中的采样和写入操作期间将其转换为线性的。我的硬件仅支持 VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,我想这意味着交换链图像中的颜色应该以非线性方式存储,但 VK_FORMAT_B8G8R8A8_SRGB 会导致伽马 0.44 校正颜色,而 VK_FORMAT_B8G8R8A8_UNORM 工作正常。imageFormat 与 imageColorSpace 有何关系以及 imageColorSpace 指定了什么?

krO*_*oze 9

Vulkan 与色彩空间无关。尽管在比特转换为光子之前的某个时刻,必须知道色彩空间。这就是为什么在交换链创建中需要它。

imageFormat指定图像格式是什么(与 中的相同vkCreateImage())。imageColorSpace是交换链\显示在呈现图像时解释值的方式。

因此,如果有UNORM,则意味着未指定的色彩空间,并且它们是很好的原始位。或者更确切地说,这意味着您负责颜色空间(如果图像甚至存储颜色,而不完全是其他东西)。如果你使用VK_COLOR_SPACE_SRGB_NONLINEAR_KHRwith *_UNORM,这意味着交换链会占用你的位,并且它会假设它在呈现时已经是 SRGB 了。如果是*_SRGB,那么对于交换链本身来说没有什么不同,但是所发生的情况是创建的VkImages 是*_SRGB格式的,这意味着当使用它们时,颜色将为您线性化(与创建非交换链时发生的情况相同)交换链VkImage)。