Sistem Transkoding Tekstur Kompresi GPU Portabel LDR/HDR/HDR.
Basis Universal adalah open source superpress compressed LDR/HDR GPU terkompresi sistem pertukaran tekstur dari Binomial LLC yang mendukung dua format file menengah: standar .ktx2 terbuka dari grup Khronos, dan format file kami sendiri ".Basis". Format file ini mendukung transkode cepat ke hampir semua format tekstur GPU terkompresi yang dirilis dalam ~ 25 tahun terakhir.
Tujuan keseluruhan kami dengan proyek ini adalah untuk menyederhanakan pengkodean dan distribusi efisien dari tekstur LDR dan HDR GPU, dan konten video tekstur dengan cara yang kompatibel dengan GPU atau API rendering/grafik apa pun.
Sistem mendukung tiga mode: ETC1S, UASTC LDR, dan UASTC HDR. Libari c/c ++ encoder dan transcoder dapat dikompilasi ke kode asli atau WebAssembly, dan semua fitur encoder/transcoder dapat diakses dari JavaScript.
Catatan Rilis
Contoh WebGL Encoder/Transcoder Langsung
JavaScript API/WASM/WEBGL Info
Contoh gambar Contoh UASTC
ETC1S dan file LDR UASTC dapat ditranskode ke:
File HDR UASTC dapat ditranskodekan ke:
ETC1S: Kira-kira .3-3bpp Mode Superpressed Kualitas Rendah hingga Menengah berdasarkan subset dari ETC1 yang disebut "ETC1S". Mode ini mendukung tingkat kualitas variabel vs ukuran file (seperti JPEG), saluran alpha, kompresi bawaan, dan array tekstur secara opsional dikompresi sebagai urutan video menggunakan blok lewati (pengisian kondisional). Mode ini dapat dengan cepat ditranskode ke semua format tekstur LDR yang didukung.
UASTC LDR: Mode berkualitas tinggi 8 bit/pixel LDR. UASTC LDR adalah subset 19 mode dari format tekstur ASTC LDR 4X4 (8BPP) standar, tetapi dengan format blok kustom yang berisi petunjuk transkode. Transcoding UASTC LDR ke ASTC LDR dan BC7 sangat cepat dan sederhana, karena UASTC LDR adalah subset umum dari BC7 dan ASTC. Transcoders untuk format tekstur lainnya dipercepat oleh beberapa bit petunjuk khusus format yang ada di setiap blok LDR UASTC.
Mode ini mendukung tahap post-proses opsional opsional yang dioptimalkan (RDO) pasca proses yang mengkondisikan data tekstur LDR UASTC yang dikodekan dalam file .ktx2/.basis sehingga dapat lebih efektif dikompres LZ. Lebih detail di sini.
Berikut adalah dokumen spesifikasi LDR UASTC.
Berikut adalah dokumen spesifikasi HDR UASTC, dan beberapa gambar contoh terkompresi.
Baik file .basis dan .ktx2 mendukung level mipmap, array tekstur, cubeMaps, array cubeMap, dan video tekstur, dalam ketiga mode. Selain itu, file .basis mendukung array tekstur yang tidak seragam, di mana setiap gambar dalam file dapat memiliki resolusi atau jumlah level mipmap yang berbeda.
Dalam mode ETC1S, kompresor dapat mengeksploitasi korelasi warna dan pola di semua gambar di seluruh file menggunakan buku kode ujung/pemilih global, sehingga beberapa gambar dengan mipmaps dapat disimpan secara efisien dalam satu file. Mode ETC1S juga mendukung urutan video pendek, dengan blok lewati (pengisian kondisional) yang digunakan untuk tidak mengirim blok yang belum berubah relatif terhadap bingkai sebelumnya.
Format gambar LDR yang didukung untuk membaca adalah .png, .dds dengan mipmaps, .tga, .qoi, dan .jpg. Format gambar HDR yang didukung untuk membaca adalah .exr, .hdr, dan .dds dengan mipmaps. Itu dapat menulis .basis, .ktx2, .dds, .ktx (v1), .astc, .out, .exr, dan .png file.
Sistem ini sekarang mendukung memuat file .dds 2D dasar dengan mipmaps opsional, tetapi file .dds harus berada di salah satu format yang tidak terkompresi: 24bpp RGB, 32bpp RGBA/BGRA, setengah float RGBA, atau float RGBA. Menggunakan file .dds memungkinkan pengguna untuk mengontrol dengan tepat bagaimana MIPMAP dihasilkan sebelum kompresi.
Perpustakaan pengkodean dan alat baris perintah tidak memiliki dependensi pihak ke -3 yang belum ada dalam repo itu sendiri. Transcoder adalah file sumber .cpp tunggal (dalam transcoder/basisu_transcoder.cpp
) yang tidak memiliki dependensi pihak ke -3.
Kami membangun dan menguji di bawah:
Di bawah Windows dengan Visual Studio Anda dapat menggunakan file basisu.sln
yang disertakan. Atau, Anda dapat menggunakan CMake untuk membuat file VS Solution/Project baru.
Untuk membangun, pertama -tama instal cmake, lalu:
cd build
cmake ..
make
Untuk membangun dengan dukungan SSE 4.1 pada sistem x86/x64 (pengkodean kira -kira 15-30% lebih cepat), tambahkan -DSSE=TRUE
untuk baris perintah CMake. Tambahkan -DOPENCL=TRUE
untuk dibangun dengan dukungan OpenCl (opsional). Gunakan -DCMAKE_BUILD_TYPE=Debug
untuk membangun debug. Untuk membangun executable 32 -bit, tambahkan -DBUILD_X64=FALSE
.
Setelah membangun, alat baris perintah asli yang digunakan untuk membuat, memvalidasi, dan mentranskode/membongkar file .basis/.ktx2 adalah bin/basisu
.
Alat baris perintah mencakup beberapa tes pengkodean/transkode LDR/HDR otomatis:
cd ../bin
basisu -test
basisu -test_hdr
Untuk menguji codec dalam mode opencl (harus memiliki lib/header/driver opencl yang diinstal dan telah menyusun dukungan opencl dengan menjalankan cmake dengan -DOPENCL=TRUE
):
basisu -test -opencl
basisu -q 255 x.png
basisu -linear x.png
basisu -uastc x.png
basisu x.exr
Perhatikan pembaca .exr yang kami gunakan adalah Tinyexr, yang tidak mendukung semua mode kompresi .Exr yang mungkin. Alat seperti ImageMagick dapat digunakan untuk membuat file .exr yang dapat dibaca Tinyexr.
Atau, gambar LDR (seperti .png) dapat dikompresi ke UASTC HDR dengan menentukan -hdr
. Secara default, gambar LDR, ketika dikompresi ke UASTC HDR, pertama kali dikonversi dari SRGB ke lampu linier sebelum kompresi. Langkah konversi ini dapat dinonaktifkan dengan menentukan -hdr_ldr_no_srgb_to_linear
.
Yang penting, untuk kualitas terbaik, Anda harus menyediakan basisu dengan gambar sumber asli yang tidak terkompresi . Jenis kompresi lossy lainnya yang diterapkan sebelum basisu (termasuk ETC1/BC1-5, BC7, JPEG, dll.) Akan menyebabkan artefak multi-generasi muncul dalam tekstur output akhir.
-fastest
(yang setara dengan -uastc_level 0
) menempatkan encoder UASTC LDR/HDR dalam mode tercepat (tetapi berkualitas lebih rendah).
-slower
menempatkan encoder UASTC LDR/HDR dalam mode kualitas yang lebih tinggi tetapi lebih lambat (setara dengan -uastc_level 3
). Level default adalah 1, dan tertinggi adalah 4 (yang cukup lambat).
-q X
, di mana X berkisar dari [1.255], mengontrol level Kualitas Mode ETC1S vs. Ukuran File. 255 adalah kualitas tertinggi, dan standarnya adalah 128.
-debug
menyebabkan enkoder mencetak informasi debug verbose internal dan pengembang.
-stats
untuk melihat berbagai statistik kualitas (PSNR).
-linear
: ETC1S Default ke metrik SRGB Colorspace, UASTC LDR saat ini selalu menggunakan metrik linier, dan default HDR UASTC untuk metrik RGB tertimbang (dengan 2,3,1 bobot). Jika input adalah peta normal, atau jenis konten tekstur non-SRGB (non-photographic) lainnya, pastikan untuk menggunakan -linear
untuk menghindari artefak ekstra yang tidak perlu. (Metrik peta normal Angular untuk UASTC LDR/HDR pasti bisa dilakukan dan dalam daftar TODO kami.)
Menentukan -opencl
Mengaktifkan Mode OpenCl, yang saat ini hanya mempercepat encoding ETC1S.
Kompresor multithreaded secara default, yang dapat dinonaktifkan menggunakan opsi baris perintah -no_multithreading
. Transcoder saat ini berulir tunggal, meskipun utas aman (yaitu mendukung dekompresi beberapa irisan tekstur secara paralel).
basisu -uastc -uastc_rdo_l 1.0 -mipmap x.png
-uastc_rdo_l X
mengontrol pengaturan kualitas RDO (optimasi tingkat-distorsi). Semakin rendah nilai ini, semakin tinggi kualitasnya, tetapi semakin besar ukuran file terkompresi. Nilai yang baik untuk dicoba adalah antara .2-3.0. Standarnya adalah 1.0.
basisu -mipmap -q 200 x.png
Ada beberapa opsi mipmap untuk mengubah kernel filter, ruang warna filter untuk saluran RGB (linier vs SRGB), dimensi mipmap terkecil, dll. Alat ini juga mendukung file CubeMap yang menghasilkan, array tekstur 2D/CubeMap, dll. Generator MIPMAP otomatis, Anda dapat membuat file tekstur .dds .dds yang tidak terkompresi dan masukkan ke kompresor.
basisu -comp_level 2 x.png
Pada beberapa gambar langka (yang dengan gradien langit biru datang untuk mengikat), Anda mungkin perlu meningkatkan pengaturan ETC1S -comp_level
, yang berkisar dari 1,6. Ini mengontrol jumlah upaya keseluruhan yang digunakan Encoder untuk mengoptimalkan buku kode ETC1S dan aliran data terkompresi. Comp_level yang lebih tinggi secara signifikan lebih lambat.
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
Lihat teks bantuan untuk daftar lengkap opsi baris perintah alat. Alat baris perintah hanyalah pembungkus tipis di atas perpustakaan encoder.
Anda dapat menggunakan alat baris perintah atau memanggil transcoder langsung dari JavaScript atau kode C/C ++ ke Decompress .KTX2/.Basis file ke data tekstur GPU atau data gambar yang tidak terkompresi. Untuk membongkar file .ktx2 or.basis ke beberapa file .png/.exr/.ktx/.dds:
basisu x.ktx2
Gunakan opsi -no_ktx
dan -etc1_only
/ -format_only
untuk membongkar ke lebih sedikit file.
-info
dan -validate
hanya akan menampilkan informasi file dan tidak mengeluarkan file apa pun.
File mipmapped, cubemap, atau array tekstur. KTX/.dds file akan berada dalam berbagai format tekstur GPU terkompresi (PVRTC1 4BPP, ETC1-2, BC1-5, BC7, dll.), Dan sepengetahuan kami ada Sayangnya (pada tahun 2024) masih belum ada alat penampil .ktx atau .dds yang benar dan andal mendukung setiap format tekstur GPU yang kami dukung. File BC1-5 dan BC7 dapat dilihat menggunakan kompresonator AMD, dll1/2 menggunakan alat kompresi tekstur Mali, dan pvrtc1 menggunakan pvrtextool Imagination Tech. RenderDoc memiliki penampil file tekstur yang berguna untuk banyak format. Mac OSX Finder mendukung pratinjau file .exr dan .ktx dalam berbagai format GPU. Windows 11 Explorer dapat mempratinjau file .dds. Penampil OpenHDR online berguna untuk melihat file gambar .exr/.hdr.
Direktori 'WebGL' berisi empat demo WebGL sederhana yang menggunakan transcoder dan kompresor yang dikompilasi untuk Wasm dengan Emscripten. Demo ini online di sini. Lihat detail lebih lanjut di file ReadMe di sini.
Baik transcoder dan encoder dapat dikompilasi menggunakan Emscripten untuk WebAssembly dan digunakan di web. Satu set pembungkus JavaScript ke codec, yang ditulis dalam C ++ dengan Extensions Emscripten, terletak di webgl/transcoding/basis_wrappers.cpp
. Pembungkus JavaScript mendukung hampir semua fitur dan mode, termasuk video tekstur. Lihat file readme.md dan cmakelists.txt di webgl/transcoder
dan webgl/encoder
.
Untuk membangun transcoder WASM, setelah menginstal Emscripten:
cd webgl/transcoder/build
emcmake cmake ..
make
Untuk membangun encoder Wasm:
cd webgl/encoder/build
emcmake cmake ..
make
Ada dua demo web encoding/transcoding sederhana, yang terletak di webgl/ktx2_encode_test
dan webgl/texture_test
, yang menunjukkan cara menggunakan encoder dan transcoder's javaScript wrapper API.
Beberapa contoh sederhana yang menunjukkan cara secara langsung memanggil encoder C ++ dan API perpustakaan transcoder adalah dalam example/examples.cpp
.
Lihat wiki di sini.
Anda dapat mengunduh dan menginstal basis universal menggunakan VCPKG Dependency Manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
Dasar Port Universal di VCPKG terus diperbarui oleh anggota tim Microsoft dan kontributor komunitas. Jika versi sudah ketinggalan zaman, silakan buat masalah atau tarik permintaan pada repositori VCPKG. (9/10/2024: Dukungan HDR UASTC belum tersedia di sini.)
Perpustakaan transcoder dan core encoder adalah Apache 2.0. Transcoder tidak menggunakan perpustakaan atau dependensi pihak ke -3. Lihat lisensi.
Perpustakaan Encoder adalah Apache 2.0, tetapi menggunakan beberapa modul pihak ke -3 open source (dalam 'encoder/3rdparty' dan di direktori 'zstd') untuk memuat .qoi, .dds, .exr gambar, untuk menangani kompresi ZSTD, dan ke Bongkar blok tekstur ASTC. Lihat lisensi dan folder .reuse.
Repositori telah diperbarui agar sesuai dengan alat Pemeriksa Lisensi Reuse (https://reuse.software/). Lihat .reuse
Subdirectory.
Online .Exr HDR Gambar Penampil File
Windows HDR + WCG Image Viewer - Penampil gambar HDR sejati untuk Windows. Lihat juga repo GitHub.
Renderdoc
AMD Compressonator
Microsoft's DirectXTex
Pvrtextool
Alat Kompresi Tekstur Mali - sekarang sudah usang
Untuk tautan, makalah, dan alat/perpustakaan yang lebih berguna, lihat akhir spesifikasi tekstur HDR UASTC.
E-mail: info @ binomial dot info, atau hubungi kami di twitter
Inilah Halaman Wiki Sponsor.