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

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

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

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

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

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

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

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

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


person iseeall    schedule 26.11.2011    source источник
comment
Хорошо, друг предложил решение. BC5 ожидает формат BGRA, 8 бит на цвет. B и A должны быть установлены на 0. Компонент X нормали переходит в R, Z переходит в G, а Y (высота) опускается. Пиксельный шейдер получает компоненты X в [0] и z в [1] результата вызова Sample.   -  person iseeall    schedule 30.11.2011


Ответы (1)


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

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

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

person iseeall    schedule 26.11.2011