Google en Binomial bronbestanden , een codec voor efficiënte compressie van texturen en het bijbehorende universele bestandsformaat «.basis» voor het distribueren van texturen op basis van afbeeldingen en video. De referentie-implementatie is geschreven in C++ en onder de Apache 2.0-licentie.
Basis Universal bouwt voort op eerder systeem voor compressie van 3D-gegevens, Draco, en probeert het probleem op te lossen van het leveren van texturen voor GPU's. Tot nu toe moesten ontwikkelaars kiezen tussen lage-level formaten die hoge prestaties bieden, maar specifiek zijn voor GPU's en veel schijfruimte in beslag nemen, of andere formaten die compressie mogelijk maken, maar niet kunnen concurreren met GPU-texturen qua prestaties.
Het Basis Universal-formaat biedt prestaties op het niveau van native GPU-texturen, maar zorgt voor een hoger compressieniveau.
Basis is een tussentijds formaat dat snelle hercodering naar verschillende lage-level GPU-textuurformaten mogelijk maakt, gebruikt op zowel desktop- als mobiele systemen. Momenteel wordt translatie naar de formaten PVRTC1 (4bpp RGB), BC7 (modus 6 RGB), BC1-5, ETC1 en ETC2 ondersteund. In de toekomst wordt ondersteuning voor het ASTC-formaat (RGB of RGBA) en de modi 4/5 RGBA voor het BC7-formaat en 4bpp RGBA voor PVRTC1 verwacht.
Texturen in het basisformaat nemen 6-8 keer minder videogeheugen in beslag en vereisen ongeveer twee keer minder gegevensoverdracht dan typische JPEG-gebaseerde texturen en 10-25% minder dan texturen in RDO-modus. Bijvoorbeeld, met een JPEG-afbeelding van 891 Kb en een ETC1-textuur van 1 Mb, bedraagt de bestandsgrootte in het Basis-formaat 469 Kb in de hoogste kwaliteitsmodus. Bij het opslaan van de textuur in videogeheugen verbruikten de in tests gebruikte JPEG- en PNG-texturen 16 Mb geheugen, terwijl voor texturen in het
Basis-formaat slechts 2 Mb geheugen nodig was in het geval van translatie naar BC1, PVRTC1 en ETC1, en 4 Mb in het geval van translatie naar BC7.
Het proces om bestaande applicaties naar Basis Universal te migreren is vrij eenvoudig. Het is voldoende om bestaande texturen of afbeeldingen om te coderen naar een nieuw formaat met behulp van de door het project geleverde tool "basisu", waarbij de benodigde kwaliteitsniveau wordt geselecteerd. Vervolgens moet in de applicatie voor de rendercode de basisu-decoder worden geïnitialiseerd, die verantwoordelijk is voor het vertalen van het tussenformaat naar het door de huidige GPU ondersteunde formaat. Hierbij blijven afbeeldingen in de gehele verwerkingsketen gecomprimeerd, inclusief de gecomprimeerde opslag in de GPU. In plaats van de hele afbeelding proactief om te coderen, decodeert de GPU selectief alleen de benodigde delen van de afbeelding.
Het opslaan van heterogene textuurarrays (cubemap), volumetexturen, textuurarrays, mipmap-niveaus, videosequenties of willekeurige textuurextracten in één bestand wordt ondersteund. Het is bijvoorbeeld mogelijk om een serie afbeeldingen in één bestand te verpakken voor het maken van kleine video's, of om meerdere texturen samen te voegen met een gedeelde palet en deduplicatie van typische afbeeldingspatronen. De implementatie van de Basis Universal-encoder ondersteunt multithreading-codering met behulp van OpenMP. De decoder werkt momenteel alleen in een enkelvoudige threadmodus.
Aanvullend Basis Universal-decoder voor browsers, geleverd in WebAssembly-formaat, dat kan worden gebruikt in webapplicaties gebaseerd op WebGL. Uiteindelijk is Google van plan om ondersteuning voor Basis Universal in alle grote browsers te bereiken en het te promoten als een draagbaar textuurformaat voor WebGL en de toekomstige specificatie , conceptueel vergelijkbaar met de API's Vulkan, Metal en Direct3D 12.
Het is vermeldenswaard dat de mogelijkheid om video te integreren en deze vervolgens alleen aan de GPU te verwerken, Basis Universal een interessante oplossing maakt voor het creëren van dynamische gebruikersinterfaces op WebAssembly en WebGL, waarin honderden kleine video's gelijktijdig kunnen worden weergegeven met minimale belasting van de CPU. Totdat de mogelijkheid om SIMD-instructies in WebAssembly te gebruiken beschikbaar kwam, was dit niveau van prestaties met traditionele codecs nog niet haalbaar, waardoor video op basis van texturen kan worden gebruikt in gebieden waar reguliere video niet toepasbaar is. Momenteel wordt er gewerkt aan de publicatie van code met aanvullende optimalisaties voor video, inclusief de mogelijkheid om gebruik te maken van met ondersteuning voor adaptief vullen (CR).
Bron: opennet.ru
