Google dhe Binomial hapën kodin e sistemit të kompresimit të teksturave Basis Universal

Kompania Google dhe Binomial hapën kodet burimore Basis Universal, një kodek për kompresim efektiv të teksturave dhe formatin universal të skedarëve lidhur me të «.basis» për shpërndarjen e teksturave mbi bazën e imazheve dhe videove. Kodi i implementimit referues është shkruar në gjuhën C++ dhe ofrohet nën licencën Apache 2.0.

Basis Universal plotëson më parë të publikuar sistemin e kompresimit të të dhënave 3D Draco dhe përpiqet të zgjidhë problemin e ofrimit të teksturave për GPU. Deri tani, zhvilluesit kanë qenë të kufizuar në zgjedhjen midis formateve të ulta që ofrojnë performancë të lartë, por janë specifike për GPU dhe zënë shumë hapësirë në disk, dhe formateve të tjera që lejojnë tkurrje të madhësisë, por nuk mund të konkurrojnë me teksturat e GPU-së në performancë.

Formati Basis Universal ofron performancë në nivelin e teksturave native për GPU, por siguron një nivel më të lartë kompresimi.
Basis është një format ndërmjetës, i cili para përdorimit siguron rikodim të shpejtë në formate të ndryshme të ulta të teksturave GPU, të përdorura si në sistemet desktop ashtu edhe në pajisjet mobile. Aktualisht mbështetet translacioni në formatet PVRTC1 (4bpp RGB), BC7 (modi 6 RGB), BC1-5, ETC1 dhe ETC2. Në të ardhmen pritet mbështetje për formatin ASTC (RGB ose RGBA) dhe modet 4/5 RGBA për formatin BC7 dhe 4bpp RGBA për PVRTC1.

Google dhe Binomial hapën kodin e sistemit të kompresimit të teksturave Basis Universal

Teksturat në formatin basis zënë 6-8 herë më pak memorie video dhe kërkojnë të transferojnë rreth dyfish më shumë të dhëna se teksturat tipike të bazuara në formatin JPEG dhe 10-25% më pak se teksturat në modin RDO. Për shembull, për një imazh JPEG prej 891 Kb, ndërsa tekstura ETC1 ka 1 Mb, madhësia e të dhënave në formatin Basis është 469 Kb në modin më të lartë të cilësisë. Kur tekstura ruhet në memorien video, teksturat e përdorura në testet me formatet JPEG dhe PNG konsumuan 16 Mb memorie, ndërsa për teksturat në formatin
Basis kërkohej 2 Mb memorie në rastin e translacionit në BC1, PVRTC1 dhe ETC1, dhe 4 Mb në rastin e translacionit në BC7.

Google dhe Binomial hapën kodin e sistemit të kompresimit të teksturave Basis Universal

Procesi i transferimit të aplikacioneve ekzistuese në Basis Universal është mjaft i thjeshtë. Mjafton të rikonvertohen teksturat ose imazhet ekzistuese në formatin e ri me ndihmën e utilitarit "basisu" të ofruar nga projekti, duke zgjedhur nivelin e nevojshëm të cilësisë. Më pas, në aplikacion, para kodit të renderimit, duhet të inicohet kodifikuesi basisu, i cili është përgjegjës për translacionin e formatit të përkohshëm në formatin e mbështetur nga GPU aktual. Kështu, imazhet në të gjithë zinxhirin e përpunimit mbeten të kompresuara, përfshirë ngarkimin e tyre në një format të kompresuar në GPU. Në vend të rikonvertimit të parakohshëm të imazhit të tërë, GPU dekodon në mënyrë selektive vetëm pjesët e nevojshme të imazhit.

Mbështetet ruajtja në një skedar të grupeve të heterogjene të teksturave (cubemap), teksturave volumetrike, grupeve të teksturave, niveleve mipmap, sekuencave të videove ose fragmenteve të rastësishme të teksturave. Për shembull, është e mundur paketimi në një skedar të serisë së imazheve për të krijuar video të vogla ose bashkimi i disa teksturave duke përdorur një paletë të përbashkët për të gjitha imazhet dhe deduplifikimin e modeleve tipike të imazhit. Realizimi i kodifikuesit Basis Universal mbështet kodimin me shumë procese duke përdorur OpenMP. Kodifikuesi aktualisht funksionon vetëm në modin një procesor.

Shtesë është në dispozicion Dekoduesi Basis Universal për shfletues, i ofruar në formatin WebAssembly, mund të përdoret në aplikacionet web të bazuara në WebGL. Në fund, Google ka ndërmend të arrijë mbështetje për Basis Universal në të gjithë shfletuesit kryesorë dhe ta promovojë atë si një format të transportueshëm të teksturave për WebGL dhe specifikimin e ardhshëm. WebGPU, konceptualisht i ngjashëm me API Vulkan, Metal dhe Direct3D 12.

Vërehet se mundësia e integrimit të videove me përpunim të mëpasshëm vetëm në anën e GPU-së e bën Basis Universal një zgjidhje interesante për krijimin e ndërfaqeve dinamike të përdoruesit në WebAssembly dhe WebGL, ku mund të reflektohen njëkohësisht qindra videove të vogla me ngarkesë minimale në CPU. Deri në shfaqjen e mundësisë për përdorimin e instrukcioneve SIMD në WebAssembly me kode tradicionale një nivel i tillë performancë ende nuk është arritur, kështu që video të bazuara në tekstura mund të përdoren në fusha ku videoja e zakonshme nuk aplikohet. Aktualisht, po përgatitet për publikim kodi me optimizime të tjera për videon, duke përfshirë mundësinë e përdorimit I-frames dhe P-frames me mbështetje për mbushjen adaptuese (CR).

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster