我正在使用CreateWICTextureFromMemoryEx从DirectXTK加载纹理。加载的所有内容都转换为sRGB。有没有办法强迫WIC创建RGB曲面?
或者有一种方法可以将已经加载的纹理从sRGB转换为RGB?在D3DX中,曾经有一个D3DX11_FILTER_SRGB标志(据我所知),但并不反对。
任何帮助都将是非常感谢的,谢谢!
发布于 2016-09-22 16:28:25
DirectX工具包加载器在加载DXGI_FORMAT_*_SRGB图像时使用DXGI_FORMAT_*_SRGB,原因如下:
/sRGB/RenderingIntent为真)。/app1/ifd/exif/{ushort=40961}为1)。/ifd/exif/{ushort=40961}为1)。因此,图像实际上很可能在sRGB颜色空间。因此,DXGI_FORMAT_*_SRGB表示从该纹理中读取的数据应该受de-γ的约束,才能使它们进入线性颜色空间。我假设你在这里没有使用伽马正确的渲染?
使用
DXGI_FORMAT_*_SRGB或HDR (10:10:10:2,16:16: 16:16:16:16)来实现伽马-正确渲染。您还需要为Clear使用线性颜色。有关详细信息,请参阅DeviceResources、伽马校正渲染、线性的重要性和线性空间照明(即伽玛)。
如果您控制纹理文件,一个快速而简单的解决方法是使用DirectXTex库中的DirectXTex将源图像转换为DDS。您可以使用各种开关(如-srgbi或-srgbo )来强制您所追求的SRGB行为。
请注意,我还添加了一个选项,让您在将来发布sRGB时忽略WICTextureLoader元数据。线性渲染是最好的,但有时可以选择避免使用
DXGI_FORMAT_*_SRGB格式。
UPDATE:最新版本的DirectX工具包中的WICTextureLoader有以下选项标志,这些标志帮助加载程序确定适合您的场景的正确选择:
*_SRGB格式,则该格式将始终返回*_SRGB格式。WIC_LOADER_IGNORE_SRGB将让加载程序忽略上面的Will元数据。WIC_LOADER_SRGB_DEFAULT,它假设缺少元数据意味着它应该是*_SRGB。https://stackoverflow.com/questions/39634189
复制相似问题