Le aziende Google e Binomial testi sorgente , un codec per la compressione efficiente delle texture e un formato di file universale correlato «.basis» per la distribuzione delle texture basate su immagini e video. Il codice di riferimento è scritto in C++ e sotto licenza Apache 2.0.
Basis Universal integra il precedente Il formato Basis Universal consente prestazioni native per le texture GPU, ma offre un livello di compressione superiore.
Basis è un formato intermedio, che consente una rapida ricodifica in diversi formati a basso livello per texture GPU, utilizzate sia su sistemi desktop che sui dispositivi mobili. Attualmente, è supportata la traslazione in formati PVRTC1 (4bpp RGB), BC7 (modalità 6 RGB), BC1-5, ETC1 e ETC2. In futuro è attesa la supporto per il formato ASTC (RGB o RGBA) e per le modalità 4/5 RGBA per il formato BC7 e 4bpp RGBA per PVRTC1.
Le texture nel formato basis occuperanno da 6 a 8 volte meno memoria video e richiederanno la trasmissione di circa la metà dei dati rispetto alle texture standard basate su formato JPEG e tra il 10 e il 25% in meno rispetto alle texture in modalità RDO. Ad esempio, con un'immagine JPEG di 891 Kb e una texture ETC1 di 1 Mb, la dimensione dei dati nel formato Basis è di 469 Kb in modalità di qualità più alta. Quando si posizionano le texture nella memoria video, le texture testate in formato JPEG e PNG hanno impiegato 16 Mb di memoria, mentre per le texture nel formato
Basis sono stati necessari 2 Mb di memoria nel caso di traslazione in BC1, PVRTC1 e ETC1, e 4 Mb nel caso di traslazione in BC7.
Basis ha richiesto 2 MB di memoria nel caso della traduzione in BC1, PVRTC1 e ETC1, e 4 MB nel caso della traduzione in BC7.
Il processo di conversione delle applicazioni esistenti in Basis Universal è piuttosto semplice. È sufficiente ricodificare le texture o le immagini esistenti in un nuovo formato utilizzando l'utilità "basisu" fornita dal progetto, scegliendo il livello di qualità desiderato. Successivamente, nell'applicazione, prima del codice di rendering, è necessario inizializzare il ricodificatore basisu, responsabile della traduzione del formato intermedio nel formato supportato dalla GPU attuale. In questo processo, le immagini rimangono compresse lungo tutta la catena di elaborazione, comprese quelle caricate in forma compressa nella GPU. Invece di decodificare preventivamente l'immagine interamente, la GPU decodifica selettivamente solo le parti necessarie dell'immagine.
È supportata la conservazione in un unico file di array di texture eterogenei (cubemap), texture volumetriche, array di texture, livelli mipmap, sequenze video o frammenti di texture arbitrari. Ad esempio, è possibile impacchettare in un unico file una serie di immagini per creare brevi video o combinare più texture utilizzando una comune palette per tutte le immagini e deduplicando modelli di immagini standard. L'implementazione del codec Basis Universal supporta la codifica multithreading tramite OpenMP. Il ricodificatore attualmente funziona solo in modalità monothread.
Inoltre Il decodificatore Basis Universal per browser, fornito in formato WebAssembly, può essere utilizzato nelle applicazioni web basate su WebGL. Alla fine, Google intende ottenere il supporto di Basis Universal in tutti i principali browser e promuoverlo come formato portabile di texture per WebGL e per la futura specifica. , concettualmente simile alle API Vulkan, Metal e Direct3D 12.
Si segnala che la possibilità di integrare video con successiva elaborazione solo lato GPU rende Basis Universal una soluzione interessante per la creazione di interfacce utente dinamiche su WebAssembly e WebGL, in cui possono essere visualizzati contemporaneamente centinaia di piccoli video con un carico minimo sulla CPU. Fino all'introduzione della possibilità di utilizzare istruzioni SIMD in WebAssembly, livelli di prestazioni simili non sono raggiungibili con codec tradizionali, pertanto video basati su texture possono essere utilizzati in ambiti dove un video normale non è applicabile. Attualmente, è in fase di pubblicazione un codice con ottimizzazioni aggiuntive per video, che include la possibilità di utilizzare con supporto per il riempimento adattivo (CR).
Fonte: opennet.ru
