Google en Binomiale oopbron Basis Universele tekstuurkompressiestelsel

Google en Binomiaal oopgemaak bronkode Universele basis, 'n kodek vir doeltreffende tekstuurkompressie en 'n gepaardgaande universele ".basis" lêerformaat vir die verspreiding van beeld- en video-gebaseerde teksture. Die verwysingsimplementeringskode is geskryf in C++ en verskaf gelisensieer onder Apache 2.0.

Basis Universal komplementeer voorheen gepubliseer Draco 3D-datakompressiestelsel en probeer om die probleem op te los met die verskaffing van teksture vir die GPU. Tot nou toe was ontwikkelaars beperk tot die keuse tussen laevlakformate wat hoë werkverrigting behaal, maar GPU-spesifiek is en baie skyfspasie in beslag neem, en ander formate wat groottevermindering bereik, maar nie met GPU-teksture in werkverrigting kan meeding nie.

Die Basis Universal-formaat laat jou toe om die werkverrigting van inheemse GPU-teksture te bereik, maar bied 'n hoër vlak van kompressie.
Basis is 'n intermediêre formaat wat vinnige transkodering van GPU-teksture bied na verskeie laevlakformate vir gebruik op beide rekenaarstelsels en mobiele toestelle voor gebruik. Tans ondersteun is PVRTC1 (4bpp RGB), BC7 (6 RGB modus), BC1-5, ETC1, en ETC2 formate. Toekomstige ondersteuning word verwag vir ASTC-formaat (RGB of RGBA) en 4/5 RGBA-modusse vir BC7 en 4bpp RGBA vir PVRTC1.

Google en Binomiale oopbron Basis Universele tekstuurkompressiestelsel

Teksture in die basisformaat neem 6-8 keer minder videogeheue op en vereis die oordrag van ongeveer die helfte soveel data as tipiese teksture gebaseer op die JPEG-formaat en 10-25% minder as teksture in RDO-modus. Byvoorbeeld, met 'n JPEG-beeldgrootte van 891 KB en 'n ETC1-tekstuur van 1 MB, is die datagrootte in die Basis-formaat 469 KB in die hoogste kwaliteit modus. Wanneer teksture in videogeheue geplaas is, het JPEG- en PNG-teksture wat in toetse gebruik is, 16 MB geheue verbruik, terwyl teksture in
Basis benodig 2 MB geheue vir vertaling na BC1, PVRTC1 en ETC1, en 4 MB vir vertaling na BC7.

Google en Binomiale oopbron Basis Universele tekstuurkompressiestelsel

Die proses om bestaande toepassings na Basis Universal te migreer is redelik eenvoudig. Dit is genoeg om bestaande teksture of beelde in 'n nuwe formaat te herkodeer met die "basisu" -program wat deur die projek verskaf word, en die vereiste kwaliteitsvlak te kies. Vervolgens, in die toepassing, voor die weergawe-kode, moet u die basis-transkodeerder inisialiseer, wat verantwoordelik is vir die vertaling van die intermediêre formaat in die formaat wat deur die huidige GPU ondersteun word. Terselfdertyd bly beelde deur die hele verwerkingsketting saamgepers, insluitend om in saamgeperste vorm in die GPU te laai. In plaas daarvan om die hele prent vooraf te transkodeer, dekodeer die GPU selektief net die nodige dele van die prent.

Dit ondersteun die stoor van heterogene tekstuur skikkings (kubuskaarte), volumetriese teksture, tekstuur skikkings, mipmap vlakke, video rye of arbitrêre tekstuur fragmente in een lêer. Dit is byvoorbeeld moontlik om 'n reeks beelde in een lêer te pak om klein video's te skep, of om verskeie teksture te kombineer deur 'n gemeenskaplike palet vir alle beelde te gebruik en tipiese beeldsjablone te dedupliseer. Die Basis Universal encoder implementering ondersteun multi-threaded enkodering met behulp van OpenMP. Die transkodeerder werk tans net in enkeldraadmodus.

Daarbenewens beskikbaar Basis Universele dekodeerder vir blaaiers, gelewer in WebAssembly-formaat, wat in WebGL-gebaseerde webtoepassings gebruik kan word. Uiteindelik beoog Google om Basis Universal in alle groot blaaiers te ondersteun en dit te bevorder as 'n draagbare tekstuurformaat vir WebGL en 'n toekomstige spesifikasie WebGPU, wat konseptueel soortgelyk is aan die Vulkan, Metal en Direct3D 12 API's.

Daar word opgemerk dat die vermoë om video met die daaropvolgende verwerking slegs aan die GPU-kant in te sluit, Basis Universal 'n interessante oplossing maak vir die skep van dinamiese gebruikerskoppelvlakke op WebAssembly en WebGL, wat gelyktydig honderde klein video's met 'n minimale SVE-lading kan vertoon. Totdat SIMD-instruksies in WebAssembly met tradisionele kodeks gebruik kan word, is hierdie vlak van werkverrigting nog nie haalbaar nie, dus kan tekstuurgebaseerde video gebruik word in gebiede waar konvensionele video nie van toepassing is nie. Kode met bykomende optimaliserings vir video word tans voorberei vir publikasie, insluitend die vermoë om te gebruik I-rame en P-rame met aanpasbare vulling (CR) ondersteuning.

Bron: opennet.ru

Voeg 'n opmerking