Die Unternehmen Google und Binomial Quelltexte , einen Codec für die effiziente Kompression von Texturen und das dazugehörige universelle Dateiformat „.basis“ zur Verbreitung von Texturen auf Basis von Bildern und Videos. Der Code der Referenzimplementierung ist in C++ geschrieben und unter der Apache 2.0 Lizenz.
Basis Universal ergänzt die zuvor 3D-Datenkompressionssystem Draco und versucht, das Problem der Bereitstellung von Texturen für GPUs zu lösen. Bis jetzt waren Entwickler bei der Wahl zwischen leistungsstarken, aber GPUspezifischen Formaten, die viel Speicherplatz auf der Festplatte benötigen, und anderen Formaten, die eine Größenreduzierung ermöglichen, aber in Bezug auf die Leistung im Vergleich zu GPU-Texturen nicht konkurrieren können, eingeschränkt.
Das Format Basis Universal ermöglicht eine native Leistung für GPU-Texturen, bietet jedoch eine höhere Kompressionsrate.
Basis ist ein Zwischenformat, das vor der Anwendung eine schnelle Transkodierung in verschiedene niedrigstufige Texturformate für GPUs ermöglicht, die sowohl auf Desktop- als auch auf Mobilgeräten verwendet werden. Derzeit wird die Transkodierung in die Formate PVRTC1 (4bpp RGB), BC7 (Modus 6 RGB), BC1-5, ETC1 und ETC2 unterstützt. Zukünftig wird Unterstützung für das Format ASTC (RGB oder RGBA) und die Modi 4/5 RGBA für das Format BC7 sowie 4bpp RGBA für PVRTC1 erwartet.
Texturen im Basisformat benötigen 6-8 Mal weniger Videospeicher und erfordern ungefähr doppelt so wenig Datenübertragung wie Standardtexturen im JPEG-Format und 10-25% weniger als Texturen im RDO-Modus. Zum Beispiel, bei einer JPEG-Bildgröße von 891 KB, und einer ETC1-Textur von 1 MB, beträgt die Datengröße im Basisformat bei höchster Qualität 469 KB. Bei der Speicherung der Textur im Videospeicher benötigten die in Tests verwendeten JPEG- und PNG-Texturen 16 MB Speicher, während für Texturen im Format
Basis 2 MB Speicher bei der Transkodierung nach BC1, PVRTC1 und ETC1 und 4 MB bei der Transkodierung nach BC7 benötigt wurden.
Der Prozess der Übertragung bestehender Anwendungen auf Basis Universal ist relativ einfach. Es genügt, die vorhandenen Texturen oder Bilder mit dem vom Projekt bereitgestellten Tool "basisu" in ein neues Format zu kodieren und die erforderliche Qualitätsstufe auszuwählen. Anschließend muss in der Anwendung vor dem Rendering-Code der Basisu-Decoder initialisiert werden, der für die Übersetzung des Zwischenformats in das vom aktuellen GPU unterstützte Format verantwortlich ist. Dabei bleiben die Bilder in der gesamten Verarbeitungskette komprimiert und werden komprimiert in die GPU geladen. Anstelle einer vorzeitigen vollständigen Dekodierung des Bildes dekodiert die GPU selektiv nur die benötigten Teile des Bildes.
Es wird unterstützt, heterogene Texturarrays (Cubemap), volumetrische Texturen, Texturarrays, Mipmapping-Levels, Videosequenzen oder beliebige Texturausschnitte in einer einzigen Datei zu speichern. Beispielsweise ist es möglich, eine Serie von Bildern in einer Datei zu verpacken, um kleine Videos zu erstellen, oder mehrere Texturen mit einer gemeinsamen Palette und der Deduplication typischer Bildmuster zu kombinieren. Die Implementierung des Basis Universal Codecs unterstützt die Multithread-Kodierung mit OpenMP. Der Decoder funktioniert derzeit nur im Einzelfadenmodus.
Zusätzlich Basis Universal Decoder für Browser, bereitgestellt im WebAssembly-Format, das in Webanwendungen auf Basis von WebGL verwendet werden kann. Letztendlich beabsichtigt Google, die Unterstützung für Basis Universal in allen gängigen Browsern zu erreichen und es als tragbares Texturformat für WebGL und zukünftige Spezifikationen voranzutreiben. , konzeptionell ähnlich wie die APIs von Vulkan, Metal und Direct3D 12.
Es wird festgestellt, dass die Möglichkeit, Videos mit anschließender Verarbeitung nur auf der GPU einzufügen, Basis Universal zu einer interessanten Lösung für die Erstellung dynamischer Benutzeroberflächen in WebAssembly und WebGL macht, in denen Hunderte kleiner Videos gleichzeitig mit minimaler CPU-Belastung angezeigt werden können. Bis zur Einführung von SIMD-Anweisungen in WebAssembly ist ein solches Leistungsniveau bei herkömmlichen Codecs jedoch noch nicht erreichbar, weshalb texturbasiertes Video in Bereichen eingesetzt werden kann, in denen gewöhnliches Video nicht anwendbar ist. Derzeit wird ein Code mit zusätzlichen Optimierungen für Videos vorbereitet, der die Nutzung von mit Unterstützung für adaptive Füllung (CR).
Quelle: opennet.ru
