Сжатие карты нормалей DXT5 в Vulkan
В DX10 принято сжимать карты нормалей, помещая значение Y в зеленый канал, а значение X в альфа-канал, и применять сжатие DXT5 (затем компонент Z восстанавливается в шейдере). Какой соответствующий формат в Vulkan? Самое близкое, что я могу найти, это VK_FORMAT_BC5_UNORM_BLOCK, который представляет собой неподписанные каналы RG с DXT5. Это эквивалентно? Если да, то сохраните ли вы его как R: X и G: Y или наоборот (имеет ли это значение)? Или есть более новые форматы сжатия, которые работают лучше?
1 ответ
DXT5 был переименован в BC3 в DX10 . Эквивалентные форматы сжатых текстур Vulkan следуют соглашению об именах DX10+. Так
VK_FORMAT_BC3_UNORM_BLOCK
это именно то, что вы привыкли использовать.
При этом использование DXT5/BC3 для карт нормалей устарело десять лет назад, даже во времена DX10. Обычный способ справиться с этим в настоящее время — использовать BC5 для хранения компонентов X и Y, генерируя Z в шейдере. Вы получаете лучшее качество для того же размера текстуры.
Но еще более современным эквивалентом является использование BC7 с 2-канальным раздельным режимом кодирования . Хотя для этого нужны более совершенные компрессоры.