Die Unternehmen Google und Binomial Quelltexte , einen Codec zur effizienten Kompression von Texturen sowie ein zugehöriges universelles Dateiformat „.basis“ zur Verbreitung von Texturen auf der Grundlage von Bildern und Videos. Der Code der Referenzimplementierung ist in C++ geschrieben und unter der Apache 2.0-Lizenz.
Basis Universal ergänzt zuvor 3D-Datenkompressionssystem Draco und versucht, das Problem der Bereitstellung von Texturen für GPUs zu lösen. Bisher waren Entwickler gezwungen, zwischen low-level Formaten zu wählen, die hohe Leistung bieten, jedoch GPU-spezifisch sind und viel Speicherplatz benötigen, und anderen Formaten, die eine Reduzierung der Größe ermöglichen, aber nicht mit GPU-Texturen in Bezug auf Leistung konkurrieren können.
Das Format Basis Universal ermöglicht die Leistung von GPU-Texturen, bietet jedoch ein höheres Kompressionsniveau.
Basis ist ein Zwischenformat, das eine schnelle Umwandlung in verschiedene niedrigstufige GPU-Texturformate ermöglicht, die sowohl auf Desktop- als auch auf mobilen Geräten verwendet werden. Derzeit werden die Formate PVRTC1 (4bpp RGB), BC7 (Modus 6 RGB), BC1-5, ETC1 und ETC2 unterstützt. Zukünftig wird die 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.
Basis-Texturen benötigen 6-8 Mal weniger Videospeicher und erfordern die Übertragung von etwa der Hälfte der Daten im Vergleich zu typischen JPEG-basierten Texturen und 10-25 % weniger im Vergleich zu RDO-Texturen. Zum Beispiel hat ein JPEG-Bild eine Größe von 891 KB, während die ETC1-Textur 1 MB groß ist, beträgt die Datengröße im Basisformat 469 KB im Modus höchster Qualität. Bei der Plazierung in Videospeicher benötigten die in Tests verwendeten JPEG- und PNG-Texturen 16 MB, während die Basis-Texturen.
Basis nur 2 MB Speicherplatz benötigten, wenn sie in BC1, PVRTC1 und ETC1 umgewandelt wurden, und 4 MB im Fall der Umwandlung in BC7.
Der Prozess zur Übertragung bestehender Anwendungen auf Basis Universal ist recht einfach. Es reicht aus, die vorhandenen Texturen oder Bilder mit dem im Projekt bereitgestellten Tool „basisu“ in das neue Format zu konvertieren und dabei die gewünschte Qualitätsstufe auszuwählen. Anschließend muss im Anwendungscode vor dem Rendering-Prozess der basisu-Decoder initialisiert werden, der für die Umwandlung des Zwischenformats in das vom aktuellen GPU unterstützte Format verantwortlich ist. Dabei bleiben die Bilder in der gesamten Bearbeitungskette komprimiert, einschließlich der komprimierten Übertragung an die GPU. Statt einer vorzeitigen vollständigen Dekodierung des Bildes dekodiert die GPU selektiv nur die erforderlichen Teile des Bildes.
Es wird unterstützt, heterogene Texturarrays (Cubemaps), Volumentexturen, Texturarrays, Mip-Map-Stufen, Video-Sequenzen oder beliebige Texturausschnitte in einer Datei zu speichern. Beispielsweise ist es möglich, eine Reihe von Bildern in einer Datei zu packen, um kleine Videos zu erstellen, oder mehrere Texturen zu kombinieren, die alle eine gemeinsame Palette verwenden und deduplizierte Bildmuster aufweisen. Der Basis Universal Encoder unterstützt die Multithreading-Codierung mit OpenMP. Der Rekodierer funktioniert derzeit nur im Einzel-Thread-Modus.
Zusätzlich Der Basis Universal Decoder für Browser wird im WebAssembly-Format geliefert und kann in Webanwendungen, die auf WebGL basieren, verwendet werden. Letztendlich strebt Google an, die Unterstützung von Basis Universal in allen wichtigen Browsern zu erreichen und es als tragbares Texturformat für WebGL und zukünftige Spezifikationen zu fördern. , das konzeptionell mit den APIs Vulkan, Metal und Direct3D 12 vergleichbar ist.
Es wird festgestellt, dass die Möglichkeit, Videos einzufügen und sie anschließend nur auf der GPU zu verarbeiten, Basis Universal zu einer interessanten Lösung für die Erstellung dynamischer Benutzeroberflächen in WebAssembly und WebGL macht, in denen gleichzeitig Hunderte kleiner Videos mit minimaler Belastung der CPU angezeigt werden können. Bis zur Einführung von SIMD-Instruktionen in WebAssembly war ein solches Leistungsniveau mit herkömmlichen Codecs bisher unerreichbar, sodass texturbasiertes Video in Bereichen eingesetzt werden kann, in denen herkömmliches Video nicht anwendbar ist. Derzeit wird ein Code mit zusätzlichen Optimierungen für Videos vorbereitet, der die Verwendung von mit Unterstützung für adaptives Füllen (CR).
Quelle: opennet.ru
