Сохранить карту нормалей как 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.