Google e Binomial open source Basis Sistema di compressione delle texture universale

Google e binomio ha aperto testi di origine Base universale, un codec per una compressione efficiente delle texture e un formato file universale ".basis" associato per la distribuzione di texture basate su immagini e video. Il codice di implementazione di riferimento è scritto in C++ e in dotazione concesso in licenza con Apache 2.0.

Basis Universal completa il precedente pubblicato Draco sistema di compressione dati 3D e cerca di risolvere il problema fornendo texture per la GPU. Fino ad ora, gli sviluppatori si sono limitati a scegliere tra formati di basso livello che raggiungono prestazioni elevate ma sono specifici della GPU e occupano molto spazio su disco, e altri formati che ottengono una riduzione delle dimensioni ma non possono competere con le texture della GPU in termini di prestazioni.

Il formato Basis Universal consente di ottenere le prestazioni delle texture GPU native, ma fornisce un livello di compressione più elevato.
Basis è un formato intermedio che fornisce una transcodifica rapida delle texture GPU in vari formati di basso livello da utilizzare sia su sistemi desktop che su dispositivi mobili prima dell'uso. Attualmente supportati sono i formati PVRTC1 (4bpp RGB), BC7 (modalità 6 RGB), BC1-5, ETC1 ed ETC2. In futuro è previsto il supporto per il formato ASTC (RGB o RGBA) e le modalità 4/5 RGBA per BC7 e RGBA 4bpp per PVRTC1.

Google e Binomial open source Basis Sistema di compressione delle texture universale

Le texture nel formato base occupano 6-8 volte meno memoria video e richiedono il trasferimento di circa la metà dei dati rispetto alle texture tipiche basate sul formato JPEG e il 10-25% in meno rispetto alle texture in modalità RDO. Ad esempio, con una dimensione dell'immagine JPEG di 891 KB e una texture ETC1 di 1 MB, la dimensione dei dati nel formato Basis è di 469 KB nella modalità di massima qualità. Quando si inseriscono le texture nella memoria video, le texture JPEG e PNG utilizzate nei test consumano 16 MB di memoria, mentre le texture in
La base richiedeva 2 MB di memoria per la traduzione in BC1, PVRTC1 ed ETC1 e 4 MB per la traduzione in BC7.

Google e Binomial open source Basis Sistema di compressione delle texture universale

Il processo di migrazione delle applicazioni esistenti su Basis Universal è abbastanza semplice. È sufficiente ricodificare le texture o le immagini esistenti in un nuovo formato utilizzando l'utilità “basisu” fornita dal progetto, selezionando il livello di qualità richiesto. Successivamente, nell'applicazione, prima del codice di rendering, è necessario inizializzare il transcoder basiu, che è responsabile della traduzione del formato intermedio nel formato supportato dalla GPU corrente. Allo stesso tempo, le immagini durante l'intera catena di elaborazione rimangono compresse, incluso il caricamento in forma compressa nella GPU. Invece di transcodificare preventivamente l'intera immagine, la GPU decodifica selettivamente solo le parti necessarie dell'immagine.

Supporta il salvataggio di array di texture eterogenei (mappe cubiche), texture volumetriche, array di texture, livelli mipmap, sequenze video o frammenti di texture arbitrari in un unico file. Ad esempio, è possibile comprimere una serie di immagini in un unico file per creare piccoli video, oppure combinare diverse texture utilizzando una tavolozza comune per tutte le immagini e deduplicando i tipici modelli di immagine. L'implementazione del codificatore Basis Universal supporta la codifica multithread utilizzando OpenMP. Il transcodificatore attualmente funziona solo in modalità a thread singolo.

Inoltre è disponibile Base Decoder universale per browser, fornito in formato WebAssembly, che può essere utilizzato in applicazioni web basate su WebGL. Infine, Google intende supportare Basis Universal in tutti i principali browser e promuoverlo come formato di texture portatile per WebGL e una specifica futura Web GPU, concettualmente simile alle API Vulkan, Metal e Direct3D 12.

Va notato che la possibilità di incorporare video con la successiva elaborazione solo sul lato GPU rende Basis Universal una soluzione interessante per creare interfacce utente dinamiche su WebAssembly e WebGL, che possono visualizzare contemporaneamente centinaia di piccoli video con un carico minimo sulla CPU. Fino a quando le istruzioni SIMD non potranno essere utilizzate in WebAssembly con i codec tradizionali, questo livello di prestazioni non sarà ancora raggiungibile, quindi il video basato su texture può essere utilizzato in aree in cui il video convenzionale non è applicabile. Il codice con ulteriori ottimizzazioni per i video è attualmente in fase di preparazione per la pubblicazione, inclusa la possibilità di utilizzo I-frame e P-frame con supporto dell'imbottitura adattiva (CR).

Fonte: opennet.ru

Aggiungi un commento