Google ja Binomial allika koodid , effektiivse tekstuuride tihendamise koodeki ja sellega seotud universaalse failivormingu „.basis” jaoks, et levitada tekstuure, mis põhinevad piltidel ja videol. Viidatud rakenduse kood on kirjutatud keeles C++ ja lisensiga Apache 2.0.
Basis Universal täiendab varem 3D-andmete tihendamise süsteemi Draco ja püüab lahendada tekstuuride pakkumise probleemi GPU-dele. Seni olid arendajad piiratud valikuga, mis koosneb kas madala taseme formaatidest, mis tagavad kõrge jõudluse, kuid on GPU-le spetsiifilised ja võtavad palju kettaruumi, või muudest formaatidest, mis võimaldavad andmete vähendamist, kuid ei suuda konkureerida GPU tekstuuride jõudlusega.
Basis Universal formaat võimaldab saavutada GPU tekstuuride algtaseme jõudlust, kuid pakub kõrgemat tihendustaset.
Basis on vahepealne formaat, mis võimaldab kiiret ümberkodeerimist erinevatesse madala taseme GPU tekstuuriformaatidesse, mida kasutatakse nii lauaarvutites kui ka mobiilseadmetes. Praegu toetatakse ümberkodeerimist PVRTC1 (4bpp RGB), BC7 (režiim 6 RGB), BC1-5, ETC1 ja ETC2 formaatidesse. Tulevikus oodatakse toetust ASTC formaadile (RGB või RGBA) ning BC7 formaadi režiimidele 4/5 RGBA ja 4bpp RGBA PVRTC1 jaoks.
Basis formaadis tekstuurid võtavad 6-8 korda vähem videomälu ja vajavad andmete edastamiseks umbes kaks korda vähem andmeid kui tüüpilised JPEG formaadis tekstuurid ning 10-25% vähem kui RDO režiimis tekstuurid. Näiteks JPEG pildi suurus on 891 KB ja ETC1 tekstuuri suurus 1 MB, Basis formaadis andmete suurus on kõige kõrgema kvaliteedi režiimis 469 KB. Tekstuuri viies videomälu, kasutatud testitavad tekstuurid JPEG ja PNG formaadis kulutasid 16 MB mälu, samas kui Basis formaadis tekstuurite jaoks oli BC1, PVRTC1 ja ETC1 formaadile vajaminev mälu 2 MB ning BC7 formaadi korral 4 MB.
Basis formaadis tekstuuride jaoks oli BC1, PVRTC1 ja ETC1 formaadis 2 MB mälu ning BC7 puhul 4 MB.
Protsess olemasolevate rakenduste üleviimiseks Basis Universali on piisavalt lihtne. Piisab olemasolevate tekstuuride või piltide uuesti kodeerimisest uude formaati projekti poolt pakutud utiliidi "basisu" abil, valides vajaliku kvaliteeditaseme. Edasi rakenduses tuleb enne renderdamise kode moodulit initsialiseerida basisu kodeerija, mis vastutab vaheformaadi tõlkimise toetatud GPU formaati. Sel juhul jäävad kõikidel töötlemisahelas olevatel piltidel kompressioon alles, sealhulgas laaditakse need GPU-sse kompressitud vormis. Selle asemel, et ette valmistada pilti täielikult, dekodeerib GPU selektiivselt ainult vajalikud pildi osad.
Toetatakse erinevate tekstuurimassiivide (cubemap), ruumiliste tekstuuride, tekstuurimassiivide, mipmap tasemete, video-sekveniliste või suvaliste teksturaalsete lõikude salvestamist ühte faili. Näiteks on võimalik ühte faili pakendada seeria pilte, et luua lühikeseid videoid või kombineerida mitmeid tekstuure, kasutades kõigile piltidele ühte ja sama paletti ning tüpiseeritud pildimusterite deduplikatsiooni. Basis Universali kodeerija rakendamine toetab mitme protsessi kodeerimist, kasutades OpenMP-d. Kodeerija töötab praegu ainult ühes protsessis.
Lisaks Basis Universali dekodeerija brauseritele, mis on saadaval WebAssembly formaadis, mida saab kasutada WebGL-põhistes veebirakendustes. Lõppkokkuvõttes kavatseb Google saavutada Basis Universali toetuse kõigis peamistes brauserites ja edendada seda kui ülekantavat tekstuuriformaati WebGL-i ja tuleviku spetsifikatsiooni jaoks. , mille kontseptsioon sarnaneb API Vulkan, Metal ja Direct3D 12-ga.
Pööratakse tähelepanu sellele, et video integreerimise võimalus koos selle edasise töötlemisega ainult GPU poolel teeb Basis Universali huvitavaks lahenduseks dünaamiliste kasutajaliideste loomiseks WebAssembly ja WebGL-is, kus samal ajal võivad peegelduda sadu väikeseid videoid, minimeeritud koormusega CPU-le. Enne SIMD juhiste kasutamise võimaluse tulekut WebAssembly-s, ei ole selline jõudlus traditsiooniliste koodekite puhul seni saavutatav, seega saab tekstuuripõhiseid videoid kasutada valdkondades, kus tavaline video ei ole rakendatav. Hetkel on valmimas kood lisaprobleemide optimeerimiseks video jaoks, sealhulgas koos adaptiivse täitmise toega (CR).
Allikas: opennet.ru
