Google en Binomial open source Basis Universeel textuurcompressiesysteem

Google en Binomiaal geopend bronteksten Universele basis, een codec voor efficiënte textuurcompressie en een bijbehorend universeel ".basis"-bestandsformaat voor het distribueren van op afbeeldingen en video gebaseerde texturen. De referentie-implementatiecode is geschreven in C++ en geleverde gelicentieerd onder Apache 2.0.

Basis Universeel is een aanvulling op eerder gepubliceerd Draco 3D-datacompressiesysteem en probeert het probleem op te lossen met het leveren van texturen voor de GPU. Tot nu toe waren ontwikkelaars beperkt tot het kiezen tussen low-level formaten die hoge prestaties leveren maar GPU-specifiek zijn en veel schijfruimte in beslag nemen, en andere formaten die een kleinere grootte bereiken maar qua prestaties niet kunnen concurreren met GPU-texturen.

Met het Basis Universal-formaat kunt u de prestaties van native GPU-texturen bereiken, maar biedt een hoger compressieniveau.
Basis is een tussenformaat dat snelle transcodering van GPU-texturen naar verschillende low-level formaten biedt voor gebruik op zowel desktopsystemen als mobiele apparaten vóór gebruik. Momenteel worden de formaten PVRTC1 (4bpp RGB), BC7 (6 RGB-modus), BC1-5, ETC1 en ETC2 ondersteund. Er wordt toekomstige ondersteuning verwacht voor het ASTC-formaat (RGB of RGBA) en 4/5 RGBA-modi voor BC7 en 4bpp RGBA voor PVRTC1.

Google en Binomial open source Basis Universeel textuurcompressiesysteem

Texturen in het basisformaat nemen 6-8 keer minder videogeheugen in beslag en vereisen ongeveer de helft zoveel gegevensoverdracht als typische texturen op basis van het JPEG-formaat en 10-25% minder dan texturen in de RDO-modus. Met een JPEG-beeldgrootte van 891 KB en een ETC1-textuur van 1 MB is de gegevensgrootte in het Basisformaat bijvoorbeeld 469 KB in de hoogste kwaliteitsmodus. Bij het plaatsen van texturen in het videogeheugen namen de in de tests gebruikte JPEG- en PNG-texturen 16 MB geheugen in beslag, terwijl texturen in
Basis vereiste 2 MB geheugen voor vertaling naar BC1, PVRTC1 en ETC1, en 4 MB voor vertaling naar BC7.

Google en Binomial open source Basis Universeel textuurcompressiesysteem

Het proces van het migreren van bestaande applicaties naar Basis Universal is vrij eenvoudig. Het is voldoende om bestaande texturen of afbeeldingen naar een nieuw formaat te hercoderen met behulp van het hulpprogramma “basisu” dat door het project wordt geleverd, waarbij het vereiste kwaliteitsniveau wordt geselecteerd. Vervolgens moet u in de toepassing, vóór de weergavecode, de basisu-transcoder initialiseren, die verantwoordelijk is voor het vertalen van het tussenformaat naar het formaat dat wordt ondersteund door de huidige GPU. Tegelijkertijd blijven afbeeldingen gedurende de gehele verwerkingsketen gecomprimeerd, inclusief het laden in gecomprimeerde vorm in de GPU. In plaats van preventief de hele afbeelding te transcoderen, decodeert de GPU selectief alleen de noodzakelijke delen van de afbeelding.

Het ondersteunt het opslaan van heterogene texture-arrays (cubemaps), volumetrische texturen, texture-arrays, mipmap-niveaus, videosequenties of willekeurige textuurfragmenten in één bestand. Het is bijvoorbeeld mogelijk om een ​​reeks afbeeldingen in één bestand te verpakken om kleine video's te maken, of om verschillende texturen te combineren met behulp van een gemeenschappelijk palet voor alle afbeeldingen en het ontdubbelen van typische afbeeldingssjablonen. De Basis Universal-encoderimplementatie ondersteunt multi-threaded-codering met behulp van OpenMP. De transcoder werkt momenteel alleen in single-threaded modus.

bovendien is beschikbaar Basis Universele decoder voor browsers, geleverd in WebAssembly-formaat, geschikt voor gebruik in WebGL-gebaseerde webapplicaties. Uiteindelijk is Google van plan Basis Universal in alle grote browsers te ondersteunen en het te promoten als een draagbaar textuurformaat voor WebGL en een toekomstige specificatie WebGPU, dat conceptueel vergelijkbaar is met de Vulkan-, Metal- en Direct3D 12-API's.

Opgemerkt wordt dat de mogelijkheid om video in te sluiten met de daaropvolgende verwerking ervan alleen aan de GPU-kant Basis Universal een interessante oplossing maakt voor het creëren van dynamische gebruikersinterfaces op WebAssembly en WebGL, die tegelijkertijd honderden kleine video's kunnen weergeven met minimale CPU-belasting. Totdat SIMD-instructies in WebAssembly met traditionele codecs kunnen worden gebruikt, is dit prestatieniveau nog niet haalbaar, dus op textuur gebaseerde video kan worden gebruikt in gebieden waar conventionele video niet toepasbaar is. Code met aanvullende optimalisaties voor video wordt momenteel voorbereid voor publicatie, inclusief de mogelijkheid om te gebruiken I-frames en P-frames met adaptieve vulling (CR) ondersteuning.

Bron: opennet.ru

Voeg een reactie