Компании Google и Binomial
Basis Universal дополняет ранее
Формат Basis Universal позволяет добиться производительности уровня родных для GPU текстур, но обеспечивает более высокий уровень сжатия.
Basis является промежуточным форматом, перед применением обеспечивающим быстрое перекодирование в различные низкоуровневые форматы текстур GPU, применяемых как на настольных системах, так и на мобильных устройствах. В настоящее время поддерживается трансляция в форматы PVRTC1 (4bpp RGB), BC7 (режим 6 RGB), BC1-5, ETC1, и ETC2. В дальнейшем ожидается поддержка формата ASTC (RGB или RGBA) и режимов 4/5 RGBA для формата BC7 и 4bpp RGBA для PVRTC1.
Текстуры в формате basis занимают в 6-8 раз меньше видеопамяти и требует передачи примерно в два раза меньше данных, чем типовые текстуры на основе формата JPEG и на 10-25% меньше, чем текстуры в режиме RDO. Например, при размере JPEG-изображения в 891 Кб, а текстуры ETC1 в 1 Мб, размер данных в формате Basis составляет 469 Кб в режиме наивысшего качества. При размещении текстуры в видеопамяти, используемые в тестах текстуры в формате JPEG и PNG израсходовали 16 Мб памяти, в то время как для текстур в формате
Basis потребовалось 2 Мб памяти в случае трансляции в BC1, PVRTC1 и ETC1, и 4 Мб в случае трансляции в BC7.
Процесс перевода существующих приложений на Basis Universal достаточно прост. Достаточно перекодировать имеющиеся текстуры или изображения в новый формат при помощи предоставляемой проектом утилиты «basisu», выбрав необходимый уровень качества. Далее в приложении перед кодом отрисовки нужно инициализировать перекодировщик basisu, который отвечает за трансляцию промежуточного формата в поддерживаемый текущим GPU формат. При этом изображения на всей цепочке обработки остаются сжатыми, в том числе загружаются в сжатом виде в GPU. Вместо упреждающего перекодирования изображения целиком, GPU выборочно декодирует только необходимые части изображения.
Поддерживается сохранение в одном файле неоднородных массивов текстур (cubemap), объёмных текстур, массивов текстур, уровней mipmap, последовательностей видео или произвольных отрывков текстур. Например, возможна упаковка в одном файле серии изображений для создания небольших видео или объединение нескольких текстур с использованием общей для всех изображений палитры и дедупликацией типовых шаблонов изображений. Реализация кодировщика Basis Universal поддерживает многопоточное кодирование с использованием OpenMP. Перекодировщик пока работает только в однопоточном режиме.
Дополнительно
Отмечается, что возможность встраивания видео с его последующей обработкой только на стороне GPU делает Basis Universal интересным решением для создания динамических интерфейсов пользователя на WebAssembly и WebGL, в которых могут одновременно отражаться сотни небольших видео с минимальной нагрузкой на CPU. До появления возможности использования инструкций SIMD в WebAssembly при традиционных кодеках подобный уровень производительности пока недостижим, поэтому видео на основе текстур может использоваться в областях, где обычное видео неприменимо. В настоящее время готовится к публикации код с дополнительными оптимизациями для видео, включающий возможность использования
Источник: opennet.ru