Kompania Google dhe Binomial tekste të burimeve , një kodek për kompresimin efikas të teksturave dhe formatin universal të skedarëve " .basis" për shpërndarjen e teksturave të bazuara në imazhe dhe video. Kodi i implementimit referues është shkruar në gjuhën C++ dhe nën licencën Apache 2.0.
Basis Universal kompleton të kompresimit të të dhënave 3D Draco dhe përpiqet të zgjidhë problemin e shpërndarjes së teksturave për GPU. Deri tani, zhvilluesit ishin të kufizuar në zgjedhjen midis formateve të ulëta që ofrojnë performancë të lartë, por janë specifike për GPU dhe zënë shumë hapësirë në disq, dhe formateve të tjera që mundësojnë uljen e madhësisë, por nuk mund të konkurrojnë me teksturat GPU në performancë.
Formati Basis Universal lejon arritjen e performancës së nivelit natyror për teksturat GPU, por siguron një nivel më të lartë kompresimi.
Basis është një format ndërmjetës, i cili para aplikimit siguron rikodimin e shpejtë në formate të ndryshme të ulëta të teksturave GPU që përdoren si në sistemet desktop, ashtu edhe në pajisjet mobile. Aktualisht, mbështetet përkthimi në formatet PVRTC1 (4bpp RGB), BC7 (modaliteti 6 RGB), BC1-5, ETC1, dhe ETC2. Në të ardhmen pritet mbështetje për formatin ASTC (RGB ose RGBA) dhe modalitetet 4/5 RGBA për formatin BC7 dhe 4bpp RGBA për PVRTC1.
Teksturat në formatin basis zënë 6-8 herë më pak memorie video dhe kërkojnë të kalojnë përafërsisht gjysmën e të dhënave më shumë se teksturat tipike të bazuara në formatin JPEG dhe 10-25% më pak se teksturat në modalitetin RDO. Për shembull, me një madhësi të imazhit JPEG prej 891 Kb, dhe teksturën ETC1 në 1 Mb, madhësia e të dhënave në formatin Basis arrin në 469 Kb në modalitetin e cilësisë më të lartë. Gjatë ruajtjes së teksturave në memorie video, teksturat e përdorura në testet JPEG dhe PNG shpenzuan 16 Mb memorie, ndërsa për teksturat në formatin
Basis nevojiteshin 2 Mb memorie në rastin e përkthimit në BC1, PVRTC1 dhe ETC1, dhe 4 Mb në rastin e përkthimit në BC7.
Procesi i transferimit të aplikacioneve ekzistuese në Basis Universal është mjaft i thjeshtë. Mjafton të rikodoni teksturat ose imazhet ekzistuese në formatin e ri duke përdorur mjetin e ofruar nga projekti "basisu", duke zgjedhur nivelin e nevojshëm të cilësisë. Më pas, në aplikacion para kodit të renderimit duhet të inicializohet rikoduesi basisu, i cili është përgjegjës për përkthimin e formatit ndërmjetës në formatin e mbështetur nga GPU aktual. Në këtë proces, imazhet në të gjithë zinxhirin e përpunimit mbesin të kompresuara, duke përfshirë ngarkimin e tyre në një formë të kompresuar në GPU. Në vend që të rikodoni paraprakisht të gjithë imazhin, GPU dekodon selektivisht vetëm pjesët e nevojshme të imazhit.
Mbështetet ruajtja në një skedë të vetme të grupeve të ndryshme të teksturave (cubemap), teksturave volumetrike, grupeve të teksturave, niveleve mipmap, seri videosh ose pjesë të rastësishme të teksturave. Për shembull, është e mundur të paketohet në një skedë një seri imazhesh për krijimin e videove të vogla ose të bashkohen disa tekstura duke përdorur një paletë të përbashkët për të gjitha imazhet dhe deduplimin e modeleve të zakonshme të imazheve. Implementimi i koduesit Basis Universal mbështet kodimin me shumë thirrje duke përdorur OpenMP. Rikoduesi aktualisht funksionon vetëm në modalitet të vetëm.
Shtesë dekoduesi Basis Universal për shfletuesit, i ofruar në formatin WebAssembly, i cili mund të përdoret në aplikacionet web të bazuara në WebGL. Në fund, Google synon të arrijë mbështetje për Basis Universal në të gjitha shfletuesit kryesorë dhe të promovojë atë si një format të transfertë për tekstura për WebGL dhe specifikimin e ardhshëm , konceptualisht i ngjashëm me API Vulkan, Metal dhe Direct3D 12.
Vërehet se mundësia e integrimit të videove me përpunimin e saj të mëtejshëm vetëm nga GPU e bën Basis Universal një zgjidhje tërheqëse për krijimin e ndërfaqeve dinamike të përdoruesit në WebAssembly dhe WebGL, në të cilat mund të reflektohen njëkohësisht qindra video të vogla me ngarkesë minimale në CPU. Përpara përdorimit të instrukcioneve SIMD në WebAssembly, një nivel i tillë performancës ende nuk është arritur me kodeka tradicionale, prandaj videoja e bazuar në tekstura mund të përdoret në fusha ku videoja e zakonshme nuk është e përdorshme. Aktualisht, është duke u përgatitur për publikim kodi me optimizime shtesë për videon, duke përfshirë mundësinë e përdorimit me mbështetje për mbushjen adaptuese (CR).
Burimi: opennet.ru
