Google и Binomial открыли код системы сжатия текстур Basis Universal
24 мая 2019 года
Компании Google и Binomial открыли исходные тексты Basis Universal, кодека для эффективного сжатия текстур и связанного с ним универсального файлового формата ".basis" для распространения текстур на базе изображений и видео. Код эталонной реализации написан на языке С++ и поставляется под лицензией Apache 2.0.
Basis Universal дополняет ранее опубликованную систему сжатия 3D-данных Draco и пытается решить проблему с поставкой текстур для GPU. До сих пор разработчики были ограничены выбором между низкоуровневыми форматами, позволяющими добиться высокой производительности, но специфичными для GPU и занимающими много места на диске, и другими форматами, которые позволяют добиться уменьшения размера, но не могут конкурировать с GPU-текстурами по производительности.
Формат 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. Перекодировщик пока работает только в однопоточном режиме.
Дополнительно доступен декодировщик Basis Universal для браузеров, поставляемый в формате WebAssembly, который можно использовать в web-приложениях на базе WebGL. В конечном счёте, Google намерен добиться поддержи Basis Universal во всех основных браузерах и продвинуть его в качестве переносимого формата текстур для WebGL и будущей спецификации WebGPU, концептуально схожей с API Vulkan, Metal и Direct3D 12.
Отмечается, что возможность встраивания видео с его последующей обработкой только на стороне GPU делает Basis Universal интересным решением для создания динамических интерфейсов пользователя на WebAssembly и WebGL, в которых могут одновременно отражаться сотни небольших видео с минимальной нагрузкой на CPU. До появления возможности использования инструкций SIMD в WebAssembly при традиционных кодеках подобный уровень производительности пока недостижим, поэтому видео на основе текстур может использоваться в областях, где обычное видео неприменимо. В настоящее время готовится к публикации код с дополнительными оптимизациями для видео, включающий возможность использования I-кадров и P-кадров с поддержкой адаптивного заполнения (CR).
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.