Загрузка текстуры как RGB, а не sRGB в DirectX11 с использованием WIC

Я загружаю текстуры с помощью CreateWICTextureFromMemoryEx от DirectXTK. Все, что я загружаю, преобразуется в sRGB, Есть ли способ заставить WIC создавать RGB поверхность вместо?

Или, может быть, есть способ конвертировать уже загруженную текстуру из sRGB в RGB? Вернуться в D3DX раньше было D3DX11_FILTER_SRGB флаг для этого (из того, что я понимаю), но это не устарело.

Любая помощь будет очень ценится, спасибо!

1

Решение

Набор инструментов DirectX загрузчик использует 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. Лучше всего использовать линейный рендеринг, но иногда приятно иметь возможность избежать DXGI_FORMAT_*_SRGB Формат используется.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]