Ein tragbares LDR/HDR -Transcodierungssystem für GPU -komprimierte Textur.
Basis Universal ist ein open -Source -Superkomprimiertes LDR/HDR -GPU -Komprimierungstextur -Austauschsystem von Binomial LLC, das zwei Zwischendateiformate unterstützt: das .Ktx2 Open Standard aus der Khronos -Gruppe und unser eigenes ".Basis" -Dateiformat. Diese Dateiformate unterstützen das schnelle Transkodieren auf praktisch jedes komprimierte GPU -Texturformat, das in den letzten ~ 25 Jahren veröffentlicht wurde.
Unser Gesamtziel bei diesem Projekt ist es, die Codierung und die effiziente Verteilung der tragbaren LDR- und HDR -GPU -Textur-, Bild- und Textur -Videoinhalte auf eine Weise zu vereinfachen, die mit jeder GPU- oder Rendering-/Graphics -API kompatibel ist.
Das System unterstützt drei Modi: etc1s, Uastc LDR und UASTC HDR. Auf die C/C ++ - Encoder- und Transcoder -Libaries können mit nativem Code oder WebAssembly zusammengestellt werden, und auf alle Decodierer-/Transcoder -Funktionen können über JavaScript zugegriffen werden.
Versionshinweise
Live -Encoder/TransCoder -WebGL -Beispiele
JavaScript API/WASM/WebGL -Info
UASTC HDR -Beispielbilder
ETC1S- und UASTC -LDR -Dateien können transkodiert werden auf:
UASTC -HDR -Dateien können transkodiert werden auf:
ETC1S: Ein rund 0,3-3BPP-superkomprimierter Modus mit niedrigem bis mittlerem Qualität basiert auf einer Teilmenge von usw. namens "etc1s". Dieser Modus unterstützt variable Qualität im Vergleich zu Dateigrößenstufen (wie JPEG), Alpha-Kanälen, integrierter Komprimierung und Texturarrays, die optional als Videosequenz unter Verwendung von Skip-Blöcken (bedingte Nachschub) komprimiert sind. Dieser Modus kann schnell auf alle unterstützten LDR -Texturformate transkodiert werden.
UASTC LDR: Ein hoher Qualitätsmodus von 8 Bit/Pixel LDR. UASTC LDR ist eine Subset des Standardmodus des Standard -Texturformats ASTC LDR 4x4 (8BPP), jedoch mit einem benutzerdefinierten Blockformat, das Transcodierungshinweise enthält. Die Transkodierung von UASTC LDR zu ASTC LDR und BC7 sind besonders schnell und einfach, da UASTC LDR eine gemeinsame Teilmenge von BC7 und ASTC ist. Die Transcoder für die anderen Texturformate werden durch verschiedene formatspezifische Hinweise, die in jedem UASTC-LDR-Block vorhanden sind, beschleunigt.
Dieser Modus unterstützt eine optionale Rate-Distortion-Optimized (RDO) nach der Prozessstufe, in der die codierten UASTC-LDR-Texturdaten in der Datei .KTX2/.basis destiert, sodass er effektiver LZ komprimiert werden kann. Weitere Details hier.
Hier ist das UASTC LDR -Spezifikationsdokument.
Hier ist das UASTC HDR -Spezifikationsdokument und einige komprimierte Beispielbilder.
Sowohl .Basis als auch .KTX2 -Dateien unterstützen MIPMAP -Ebenen, Texturarrays, Cubemaps, Cubemap -Arrays und Texturvideos in allen drei Modi. Darüber hinaus unterstützen .basis-Dateien ungleichmäßige Texturarrays, wobei jedes Bild in der Datei eine andere Auflösung oder Anzahl von MIPMAP-Ebenen haben kann.
Im ETC1S -Modus kann der Kompressor Farb- und Musterkorrelationen in allen Bildern in der gesamten Datei mit globalem Endpunkt/Selektor -Codebüchern ausnutzen, sodass mehrere Bilder mit MIPMaps effizient in einer einzelnen Datei gespeichert werden können. Der ETC1S -Modus unterstützt auch kurze Videosequenzen, wobei Skip -Blöcke (bedingte Nachschubs) verwendet werden, mit denen keine Blöcke gesendet werden, die sich nicht zum vorherigen Frame ändert.
Die für das Lesen unterstützten LDR -Bildformate sind .png, .dds mit mipmaps, .tga, .qoi und .jpg. Die für das Lesen unterstützten HDR -Bildformate sind .exr,. HDR und .DDs mit MIPMaps. Es kann .Basis, .Ktx2, .dds, .KTX (v1), .astc, .out, .exr und .png -Dateien.
Das System unterstützt nun das Laden grundlegend 2D-.DDS-Dateien mit optionalen MIPMAPs, aber die .DDS-Datei muss in einem der unterstützten unkomprimierten Formate enthalten sind: 24BPP RGB, 32BPP RGBA/BGRA, halbfrodiges RGBA oder Float RGBA. Durch die Verwendung von .dds -Dateien kann der Benutzer genau steuern, wie die MIPMaps vor der Komprimierung generiert werden.
Das Codierungsbibliothek und das Befehlszeilen -Tool haben keine Abhängigkeiten von Drittanbietern, die noch nicht im Repo selbst enthalten sind. Der Transcoder ist eine einzelne .cpp -Quelldatei (in transcoder/basisu_transcoder.cpp
), das keine Abhängigkeiten der Drittanbieter hat.
Wir bauen und testen unter:
Unter Windows mit Visual Studio können Sie die enthaltene basisu.sln
-Datei verwenden. Alternativ können Sie CMake verwenden, um neue VS -Lösung/Projektdateien zu erstellen.
Um zu erstellen, installieren Sie zuerst CMake, dann:
cd build
cmake ..
make
Um mit SSE 4.1 -Unterstützung auf X86/X64 -Systemen zu erstellen (die Codierung ist ungefähr 15-30% schneller), fügen Sie der CMAKE -Befehlszeile zu add -DSSE=TRUE
. Fügen Sie -DOPENCL=TRUE
um sie mit (optional) openCL -Unterstützung zu erstellen. Verwenden Sie -DCMAKE_BUILD_TYPE=Debug
um in Debug zu erstellen. Zum Erstellen von 32 -Bit -ausführbaren Ausführungen -DBUILD_X64=FALSE
hinzufügen.
Nach dem Erstellen wird das native Befehlszeilen -Tool zum Erstellen, Validieren und Transcoden/Auspacken .Basis/.KTX2 -Dateien ist bin/basisu
.
Das Befehlszeilen -Tool enthält einige automatisierte LDR/HDR -Codierungs-/Transcodierungstests:
cd ../bin
basisu -test
basisu -test_hdr
Um den Codec im OpenCL -Modus zu testen (muss OpenCL -Libs/Header/Treiber installiert und die OpenCL -Unterstützung zusammengestellt werden, indem CMake mit -DOPENCL=TRUE
ausgeführt wird):
basisu -test -opencl
basisu -q 255 x.png
basisu -linear x.png
basisu -uastc x.png
basisu x.exr
Beachten Sie, dass der .exr -Leser, den wir verwenden, TinyExRs, das nicht alle möglichen .exr -Komprimierungsmodi unterstützt. Tools wie Imagemagick können zum Erstellen von .exr -Dateien verwendet werden, die TinyExr lesen kann.
Alternativ können LDR -Bilder (wie .png) durch Angabe -hdr
zu UASTC HDR komprimiert werden. Standardmäßig werden LDR -Bilder, wenn sie zu UASTC HDR komprimiert werden, vor der Komprimierung zuerst von SRGB in lineares Licht konvertiert. Dieser Konvertierungsschritt kann deaktiviert werden, indem -hdr_ldr_no_srgb_to_linear
angegeben wird.
Wichtig ist, dass Sie für die beste Qualität Basisu mit ursprünglichen unkomprimierten Quellbildern liefern sollten. Jede andere Art von verlustiger Komprimierung, die vor der Basisu (einschließlich etc1/bc1-5, bc7, jpeg usw.) angewendet wird, wird dazu führen, dass in den endgültigen Ausgabetexturen Artefakte mit mehreren Generationen angezeigt werden.
-fastest
(was -uastc_level 0
entspricht) bringt die UASTC -LDR/HDR -Encoder in ihre schnellsten (aber niedrigeren Qualität) Modi.
-slower
setzt die UASTC -LDR/HDR -Encoder in höhere, aber langsamere Modi (äquivalent zu -uastc_level 3
). Die Standardebene beträgt 1 und der höchste beträgt 4 (was ziemlich langsam ist).
-q X
, wobei X von [1,255] reicht, steuert die Qualität des ETC1S -Modus im Vergleich zu einer Kompromissgröße der Dateigröße. 255 ist die höchste Qualität, und der Standard ist 128.
-debug
bewirkt, dass der Encoder interne und Entwickler-orientierte ausführliche Debug-Informationen druckt.
-stats
um verschiedene Qualitätsstatistiken (PSNR) zu sehen.
-linear
: ETC1S standardmäßig für SRGB -Farbspace -Metriken, UASTC LDR verwendet derzeit immer lineare Metriken, und die UASTC HDR -Standards für gewichtete RGB -Metriken (mit 2,3,1 Gewichten). Wenn die Eingabe eine normale Karte oder eine andere Art von Nicht-SRGB-Inhalt (nicht photografischer) Textur ist, verwenden Sie -linear
um zusätzliche unnötige Artefakte zu vermeiden. (Angular Normal Map -Metriken für UASTC LDR/HDR sind definitiv machbar und auf unserer Todo -Liste.)
Das Angeben von -opencl
ermöglicht den OpenCL -Modus, der derzeit nur usw. Codierung beschleunigt.
Der Kompressor ist standardmäßig multitHeads, was mit der Befehlszeilenoption -no_multithreading
deaktiviert werden kann. Der Transcoder ist derzeit Single -Faden, obwohl er fadensicher ist (dh es unterstützt die dekomprimierende Dekomprimierung mehrerer Texturscheiben parallel).
basisu -uastc -uastc_rdo_l 1.0 -mipmap x.png
-uastc_rdo_l X
steuert die Qualitätseinstellung RDO (Rate-Distortion-Optimierung). Je niedriger dieser Wert ist, desto höher ist die Qualität, desto größer die komprimierte Dateigröße. Gute Werte, die Sie versuchen sollten, sind zwischen 0,2 und 3,0. Der Standard ist 1.0.
basisu -mipmap -q 200 x.png
Es gibt mehrere MIPMAP Mit dem automatischen MIPMAP -Generator können Sie LDR- oder HDR -unkomprimierte .dds -Texturdateien erstellen und sie dem Kompressor füttern.
basisu -comp_level 2 x.png
Bei einigen seltenen Bildern (solche mit Blue Sky -Gradienten kommen zu binden) müssen Sie möglicherweise die Einstellung etc1s -comp_level
erhöhen, die von 1,6 reicht. Dies steuert die Menge an Gesamtaufwand, die der Encoder verwendet, um die Codebücher der ETC1S und den komprimierten Datenstrom zu optimieren. Höhere Comp_Level sind deutlich langsamer.
basisu x.png -comp_level 2 -max_endpoints 16128 -max_selectors 16128
basisu -tonemap x.exr
basisu -compare a.png b.png
basisu -compare_hdr a.exr b.exr
Eine vollständige Auflistung der Befehlszeilenoptionen des Tools finden Sie im Hilfegtext. Das Befehlszeilenwerkzeug ist nur eine dünne Wrapper auf der Encoder -Bibliothek.
Sie können entweder das Befehlszeilen -Tool verwenden oder den Transcoder direkt von JavaScript oder C/C ++ - Code auf den Dekomprimieren von .KTX2/.basis -Dateien zu GPU -Texturdaten oder unkomprimierten Bilddaten aufrufen. Sopacken Sie eine .KTX2 -oder -Basis -Datei an mehrere .png/.exr/.KTX/.dds -Dateien aus:
basisu x.ktx2
Verwenden Sie die Optionen -no_ktx
und -etc1_only
/ -format_only
um weniger Dateien zu entpacken.
-info
und -validate
werden nur Dateiinformationen angezeigt und keine Dateien ausgeben.
Die geschriebenen MIPMADK-, Cubemap- oder Textur-Array .KTX/.DDS-Dateien werden in einer Vielzahl komprimierter GPU-Texturformate (PVRTC1 4BPP usw. usw., BC1-5, BC7 usw.) angezeigt, und nach unserem Wissen gibt Leider (ab 2024) immer noch kein einzelnes .KTX- oder .dds Viewer -Tool, das jedes von uns unterstützte GPU -Texturformat korrekt und zuverlässig unterstützt. BC1-5- und BC7-Dateien können mit dem Kompressonator von AMD usw. mit dem Textur-Komprimierungsinstrument von Mali und PVRTC1 unter Verwendung von PVRTextool von Imagination Tech angezeigt werden. Renderdoc verfügt über einen nützlichen Texturdatei -Viewer für viele Formate. Der Mac OSX -Finder unterstützt die Vorschau von .exr- und .KTX -Dateien in verschiedenen GPU -Formaten. Der Windows 11 Explorer kann eine Vorschau von .dds -Dateien vorschauen. Der Online -OpenHDR -Viewer ist nützlich für das Anzeigen von .exr/.hdr -Bilddateien.
Das 'WebGL' -Verzeichnis enthält vier einfache WebGL -Demos, die den Transcoder und den Kompressor verwenden, der mit EMSCIPTEN mit WASM zusammengestellt wurde. Diese Demos sind hier online. Weitere Details in der Readme -Datei finden Sie hier.
Sowohl der Transcoder als auch der Encoder können mit EMSCIPTEN für WebAssembly kompiliert und im Web verwendet werden. Ein Satz von JavaScript -Verpackern zum Codec, das in C ++ mit Emscripten -Erweiterungen geschrieben wurde, befindet sich in webgl/transcoding/basis_wrappers.cpp
. Der JavaScript -Wrapper unterstützt fast alle Funktionen und Modi, einschließlich Texturvideos. Siehe Readme.md und CMakelists.txt -Dateien in webgl/transcoder
und webgl/encoder
.
So erstellen Sie den WASM -Transcoder nach der Installation von Emscripten:
cd webgl/transcoder/build
emcmake cmake ..
make
Um den WASM -Encoder zu bauen:
cd webgl/encoder/build
emcmake cmake ..
make
Es gibt zwei einfache Codierungs-/Transcodierungs -Web -Demos, die sich in webgl/ktx2_encode_test
und webgl/texture_test
befinden, die zeigen, wie die JavaScript -Wrapper -API des Encoder- und TransCoders verwendet werden.
Einige einfache Beispiele, die zeigen, wie die API von C ++ und example/examples.cpp
Library direkt aufgerufen werden kann.
Siehe das Wiki hier.
Sie können Basis universell mit dem VCPKG -Abhängigkeits -Manager herunterladen und installieren:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
Der Basis -Universal -Port in VCPKG wird von Microsoft -Teammitgliedern und Community -Mitwirkenden auf dem Laufenden gehalten. Wenn die Version veraltet ist, erstellen Sie bitte eine Ausgabe- oder Pull -Anfrage im VCPKG -Repository. (9/10/2024: UASTC HDR -Unterstützung ist hier noch nicht verfügbar.)
Die Transcoder- und Core -Encoder -Bibliotheken sind Apache 2.0. Der Transcoder verwendet keine Bibliotheken oder Abhängigkeiten von Drittanbietern. Siehe Lizenz.
Die Encoder -Bibliothek ist Apache 2.0, verwendet jedoch einige Open Source -Drittanbietermodule (in 'Encoder/3.Party' und im 'ZSTD' Verzeichnis) zum Laden von .qoi, .dds, .exr -Bilder, um die ZSTD -Komprimierung zu verarbeiten und auf ASTC -Texturblöcke auspacken. Sehen Sie die Lizenzen und die Ordner.
Das Repository wurde aktualisiert, um das Tool zur Überwachungslizenzkontrolle (https://reeuse.software/) zu entsprechen. Siehe das .reuse
-Unterverzeichnis.
Online .exr HDR Image Datei Viewer
Windows HDR + WCG Image Viewer - Ein echter HDR -Image -Betrachter für Windows. Siehe auch das Github Repo.
Renderdoc
AMD -Kompressonator
Microsoft's DirectXtex
Pvrtextool
Mali Textur Compression Tool - jetzt veraltet
Weitere nützliche Links, Papiere und Tools/Bibliotheken finden Sie im Ende der UASTC HDR -Texturspezifikation.
E-Mail: info @ binomial Punktinformationen oder kontaktieren Sie uns auf Twitter
Hier ist die Sponsoren Wiki -Seite.