Google та Binomial відкрили код системи стиснення текстур Basis Universal

Компанії Google та Binomial відкрили вихідні тексти Універсальна основа, кодека для ефективного стиснення текстур та пов'язаного з ним універсального файлового формату ".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.

Google та Binomial відкрили код системи стиснення текстур Basis Universal

Текстури у форматі basis займають у 6-8 разів менше відеопам'яті і вимагає передачі приблизно вдвічі менше даних, ніж типові текстури на основі формату JPEG і на 10-25% менше ніж текстури в режимі RDO. Наприклад, при розмірі JPEG-зображення в 891 Кб, а текстури ETC1 в 1 Мб розмір даних у форматі Basis становить 469 Кб в режимі найвищої якості. При розміщенні текстури у відеопам'яті, що використовуються в тестах текстури у форматі JPEG і PNG, витратили 16 Мб пам'яті, у той час як для текстур у форматі
Basis знадобилося 2 Мб пам'яті у разі трансляції у BC1, PVRTC1 та ETC1, та 4 Мб у разі трансляції у BC7.

Google та Binomial відкрили код системи стиснення текстур Basis Universal

Процес перекладу існуючих програм на Basis Universal досить простий. Достатньо перекодувати наявні текстури або зображення в новий формат за допомогою утиліти «basisu», що надається проектом, вибравши необхідний рівень якості. Далі в додатку перед кодом відтворення потрібно ініціалізувати перекодувальник basisu, який відповідає за трансляцію проміжного формату в формат GPU, що підтримується поточним. При цьому зображення на всьому ланцюжку обробки залишаються стислими, у тому числі завантажуються в стислому вигляді GPU. Замість попереджувального перекодування зображення повністю, GPU вибірково декодує лише необхідні частини зображення.

Підтримується збереження в одному файлі неоднорідних масивів текстур (cubemap), об'ємних текстур, масивів текстур, рівнів mipmap, послідовностей відео чи довільних уривків текстур. Наприклад, можлива упаковка в одному файлі серії зображень для створення невеликих відео або об'єднання кількох текстур за допомогою загальної для всіх зображень палітри та дедуплікації типових шаблонів зображень. Реалізація кодувальника Basis Universal підтримує багатопотокове кодування з використанням OpenMP. Перекодувач поки що працює тільки в однопотоковому режимі.

Додатково доступний декодувальник Basis Universal для браузерів, що постачається у форматі WebAssembly, який можна використовувати у веб-додатках на базі WebGL. В кінцевому рахунку, Google має намір домогтися підтримки Basis Universal у всіх основних браузерах і просунути його як переносний формат текстур для WebGL і майбутньої специфікації WebGPU, Концептуально схожою з API Vulkan, Metal і Direct3D 12.

Зазначається, що можливість вбудовування відео з його подальшою обробкою лише на боці GPU робить Basis Universal цікавим рішенням для створення динамічних інтерфейсів користувача на WebAssembly та WebGL, в яких можуть одночасно відображати сотні невеликих відео з мінімальним навантаженням на CPU. До появи можливості використання інструкцій SIMD в WebAssembly при традиційних кодеках подібний рівень продуктивності поки що недосяжний, тому відео на основі текстур може використовуватися в областях, де звичайне відео не застосовується. В даний час готується до публікації код із додатковими оптимізаціями для відео, що включає можливість використання I-кадрів та P-кадрів за допомогою адаптивного заповнення (CR).

Джерело: opennet.ru

Додати коментар або відгук