Загрузка текстуры как RGB, а не s RGB в DirectX11 с использованием WIC
Я загружаю текстуры с помощью CreateWICTextureFromMemoryEx
от DirectXTK. Все, что я загружаю, преобразуется в sRGB
, Есть ли способ заставить WIC создать RGB
поверхность вместо?
Или, может быть, есть способ конвертировать уже загруженную текстуру из sRGB
в RGB
? Назад в D3DX раньше было D3DX11_FILTER_SRGB
флаг для этого (из того, что я понимаю), но это не устарело.
Любая помощь будет очень ценится, спасибо!
1 ответ
Загрузчик DirectX Tool Kit использует DXGI_FORMAT_*_SRGB
при загрузке изображений WIC по нескольким причинам:
Метаданные WIC для файла PNG содержат блок sRGB (
/sRGB/RenderingIntent
правда)Метаданные WIC для JPG указывают на sRGB (
/app1/ifd/exif/{ushort=40961}
это 1)Метаданные WIC для TIFF указывают sRGB (
/ifd/exif/{ushort=40961}
это 1)Если вы передадите 'true' в качестве параметра forceSRGB в Ex-версию функции
Таким образом, изображение, скорее всего, находится в цветовом пространстве sRGB. Следовательно DXGI_FORMAT_*_SRGB
указывает на то, что показания из этой текстуры должны подвергаться де-гамме, чтобы получить их в линейном цветовом пространстве. Я предполагаю, что вы не используете гамма-корректный рендеринг здесь?
Гамма-корректный рендеринг достигается с помощью
DXGI_FORMAT_*_SRGB
или формат обратного буфера HDR (10:10:10:2, 16:16:16:16). Вам также нужно использовать линейные цвета дляClear
, См. DeviceResources, Гамма-корректный рендеринг, Важность линейности и Освещение в линейном пространстве (т. Е. Гамма) для получения подробной информации.
Быстрое и простое решение, если вы управляете файлом текстуры, заключается в использовании texconv в библиотеке DirectXTex для преобразования исходного изображения в DDS
, Вы можете использовать различные переключатели, такие как -srgbi
или же -srgbo
чтобы заставить поведение SRGB вы после.
Обратите внимание, что я также добавляю опцию, позволяющую игнорировать метаданные sRGB при использовании WICTextureLoader для будущего выпуска DirectX Tool Kit. Лучше всего использовать линейный рендеринг, но иногда приятно иметь возможность избежать
DXGI_FORMAT_*_SRGB
Формат используется.