Сохранить карту нормалей как 16-битную текстуру с WIC

У меня есть художественный конвейер, который включает в себя следующие шаги:

Карта нормалей генерируется. Я хочу сохранить только компоненты X и Y как байты без знака. Z опущен, потому что он реконструирован в пиксельном шейдере.

Карта нормалей сохраняется в промежуточном файле изображения, который затем подается в nvtt для сжатия в BC5.

Для сохранения карты нормалей мне нужно использовать Windows Imaging Component. Какой формат я должен использовать для хранения промежуточного изображения?

.png с любым из доступных форматов 16bpp не работает (GUID_WICPixelFormat16bppBGR565, 555, 5551, Gray, GrayFixedPoint, GrayHalf).

.bmp завершается успешно, например, GUID_WICPixelFormat16bppBGR565, но затем nvtt не может его загрузить.

Карты нормалей, которые я видел до сих пор, обычно синие с оттенками красного. Это изображения 24bpp или 16bpp? Тогда какой компонент удаляется (G?) И в каком формате они передаются в nvtt?

Потому что не имеет смысла записывать изображение только с 2 цветными каналами таким образом, как если бы оно имело 3 цветовых канала, как BGR565 (или только серый, если используется 16bppGray). BC5 без потерь и не должен испортить изображение, но промежуточный файл будет бесполезен для дальнейшего редактирования вручную.

1 ответ

Решение

Хорошо, друг предложил решение. BC5 ожидает формат BGRA, 8 бит на цвет.

B и A должны быть установлены в 0. X компонента нормали переходит в R, Z переходит в G, а Y (высота) опускается.

Пиксельный шейдер получает X в [0] и z в [1] компонентах результата вызова Sample.

Другие вопросы по тегам