繁体   English   中英

DXGI_FORMAT的确切色彩空间是什么?

[英]What are the exact color spaces of DXGI_FORMATs?

在DXGI_FORMAT的官方文档中,它告诉我们sRGB颜色空间中只有带有_SRGB枚举后缀的格式。 我认为没有此后缀的其他格式都在线性空间中。 但是我在DirectXTex库中发现了格式转换功能的一个非常奇怪的行为。 (您可以从http://directxtex.codeplex.com/下载)

首先,我使用NVIDIA Photoshop DDS插件将纹理文件导出为DXGI_FORMAT_R32G32B32A32_FLOAT。 然后,我通过LoadFromDDSFile()函数加载此文件,并通过Convert()函数将其格式转换为DXGI_FORMAT_R16G16B16A16_UNORM。 (这两个功能均由DirectXTex库提供。)

你猜怎么着? 将图像转换为DXGI_FORMAT_R16G16B16A16_UNORM之后,所有像素的亮度也发生了变化,整个图像变得比以前更亮。

如果在将图像转换为DXGI_FORMAT_R16G16B16A16_UNORM格式后将像素值从sRGB空间手动转换为线性空间,则所得像素值与输入相同。 因此,我假设DirectXTex库将DXGI_FORMAT_R32G32B32A32_FLOAT视为线性颜色空间中的格式,并将DXGI_FORMAT_R16G16B16A16_UNORM视为sRGB颜色空间中的格式,然后将颜色空间从线性空间转换为sRGB空间。 (我试图找出为什么Convert()函数也转换色彩空间,但是它是由WIC实现的,并且没有源代码。)

那么,DirectXTex库中是否有任何bug? 还是DXGI_FORMAT的真正标准? 如果某些特殊DXGI_FORMAT的颜色空间不同,请告诉我在哪里可以找到它的规格。

任何帮助将不胜感激。 谢谢!

按照惯例,float RGB值是线性的,整数RGB值经过伽玛压缩。 伽玛压缩浮点数没有特别的好处,因为伽玛压缩的原因是在感觉上需要的地方使用更多的位,并且浮点数在整个过程中都有足够(也许过多)的位数, 并且已经被伪对数编码(使用指数) 。 来源

请注意,DXGI中不是特别是* _SRGB的整数RGB纹理的色彩空间不是sRGB,它取决于驱动程序,通常具有固定的0.5伽玛。

DirectXTex库似乎确实表现正常。 但是,请注意,您还依赖于用来捕获和显示DDS文件的任何软件的行为。 对于DirectXTex的更好测试是在库中进行往返转换float-> int-> float,然后以数字方式而不是视觉方式比较结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM