Společnosti Google a Binomial původní texty , kodek pro efektivní kompresi textur a s ním spojeného univerzálního souborového formátu „.basis“ pro distribuci textur na základě obrázků a videa. Kód referenční implementace je napsán v jazyce C++ a pod licencí Apache 2.0.
Basis Universal doplňuje dříve systém komprese 3D dat Draco a snaží se vyřešit problém s dodávkou textur pro GPU. Dosud byli vývojáři omezeni na výběr mezi nízkoúrovňovými formáty, které umožňují dosáhnout vysoké výkonnosti, ale jsou specifické pro GPU a zabírají mnoho místa na disku, a jinými formáty, které umožňují zmenšení velikosti, ale nemohou konkurovat GPU texturám z hlediska výkonu.
Formát Basis Universal umožňuje dosáhnout výkonu na úrovni nativních GPU textur, ale poskytuje vyšší úroveň komprese.
Basis je mezisouborový formát, který zajistí rychlé překódování do různých nízkoúrovňových GPU textur aplikovaných jak na desktopových systémech, tak na mobilních zařízeních. V současnosti je podporováno překódování do formátů PVRTC1 (4bpp RGB), BC7 (režim 6 RGB), BC1-5, ETC1 a ETC2. V budoucnu se očekává podpora formátu ASTC (RGB nebo RGBA) a režimů 4/5 RGBA pro formát BC7 a 4bpp RGBA pro PVRTC1.
Textury ve formátu basis zabírají 6-8krát méně video paměti a vyžadují přenos přibližně dvakrát méně dat než běžné textury na základě formátu JPEG a o 10-25% méně než textury v režimu RDO. Například při velikosti JPEG obrázku 891 KB a textury ETC1 o velikosti 1 MB, velikost dat ve formátu Basis činí 469 KB v režimu nejvyšší kvality. Při umístění textury do video paměti použité v testech textury ve formátu JPEG a PNG spotřebovaly 16 MB paměti, zatímco pro textury ve formátu
Basis bylo potřeba 2 MB paměti v případě překódování do BC1, PVRTC1 a ETC1, a 4 MB v případě překódování do BC7.
Proces převodu stávajících aplikací na Basis Universal je poměrně jednoduchý. Stačí přešifrovat existující textury nebo obrázky do nového formátu pomocí nástroje 'basisu', který projekt poskytuje, a vybrat požadovanou úroveň kvality. Poté je v aplikaci před vykreslovacím kódem nutné inicializovat dekodér basisu, který zodpovídá za přenos mezipaměťového formátu do formátu podporovaného aktuálním GPU. Při tom zůstávají obrázky v celém zpracovatelském řetězci komprimované, včetně načítání v komprimované podobě do GPU. Místo předběžného dekódování celého obrázku GPU selektivně dekóduje pouze potřebné části obrázku.
Podporuje se ukládání v jednom souboru heterogenních texturových mřížek (cubemap), objemových textur, texturových mřížek, úrovní mipmap, sekvencí videa nebo libovolných úryvků textur. Například je možné zabalit do jednoho souboru sérii obrázků pro vytvoření krátkých videí nebo sloučit několik textur za použití společné palety pro všechny obrázky a deduplikaci běžných obrazových vzorů. Implementace kódování Basis Universal podporuje vícestupňové kódování s využitím OpenMP. Dekodér prozatím funguje pouze v jednovláknovém režimu.
Dodatečně Dekodér Basis Universal pro prohlížeče dodávaný ve formátu WebAssembly, který lze použít v webových aplikacích založených na WebGL. Nakonec má Google v úmyslu dosáhnout podpory Basis Universal ve všech hlavních prohlížečích a propagovat jej jako přenosný formát textur pro WebGL a budoucí specifikaci. , konceptuálně podobné API Vulkan, Metal a Direct3D 12.
Funkce vkládání videa s následným zpracováním pouze na straně GPU činí Basis Universal zajímavým řešením pro vytváření dynamických uživatelských rozhraní na WebAssembly a WebGL, kde může být současně zobrazeno stovky malých videí s minimální zátěží na CPU. Před zavedením možnosti využití instrukcí SIMD v WebAssembly nebyla taková úroveň výkonu při tradičních kodecích dosud dosažitelná, proto může video na základě textur být použito v oblastech, kde je běžné video nepraktické. V současné době se připravuje k publikaci kód s dalšími optimalizacemi pro video, včetně možnosti použití s podporou adaptivního vyplňování (CR).
Zdroj: opennet.ru
