Google dan Binomial open source Basis sistem kompresi tekstur Universal

Google dan Binomial dibuka Kode sumber Dasar Universal, codec untuk kompresi tekstur yang efisien dan format file ".basis" universal terkait untuk mendistribusikan tekstur berbasis gambar dan video. Kode implementasi referensi ditulis dalam C++ dan disediakan berlisensi di bawah Apache 2.0.

Basis Universal melengkapi sebelumnya diterbitkan Sistem kompresi data Draco 3D dan mencoba memecahkan masalah dengan penyediaan tekstur untuk GPU. Hingga saat ini, pengembang dibatasi untuk memilih antara format tingkat rendah yang mencapai kinerja tinggi tetapi khusus GPU dan memakan banyak ruang disk, dan format lain yang mencapai pengurangan ukuran tetapi tidak dapat bersaing dengan tekstur GPU dalam kinerja.

Format Basis Universal memungkinkan Anda mencapai performa tekstur GPU asli, tetapi memberikan tingkat kompresi yang lebih tinggi.
Basis adalah format perantara yang menyediakan transcoding cepat tekstur GPU ke berbagai format tingkat rendah untuk digunakan pada sistem desktop dan perangkat seluler sebelum digunakan. Saat ini yang didukung adalah format PVRTC1 (4bpp RGB), BC7 (6 mode RGB), BC1-5, ETC1, dan ETC2. Dukungan di masa depan diharapkan untuk format ASTC (RGB atau RGBA) dan mode 4/5 RGBA untuk BC7 dan 4bpp RGBA untuk PVRTC1.

Google dan Binomial open source Basis sistem kompresi tekstur Universal

Tekstur dalam format dasar menggunakan memori video 6-8 kali lebih sedikit dan memerlukan transfer data kira-kira setengah dari jumlah tekstur biasa berdasarkan format JPEG dan 10-25% lebih sedikit dibandingkan tekstur dalam mode RDO. Misalnya, dengan ukuran gambar JPEG 891 KB dan tekstur ETC1 1 MB, ukuran data dalam format Basis adalah 469 KB dalam mode kualitas tertinggi. Saat menempatkan tekstur dalam memori video, tekstur JPEG dan PNG yang digunakan dalam pengujian menghabiskan 16 MB memori, sedangkan tekstur dalam
Basis memerlukan memori 2 MB untuk terjemahan ke BC1, PVRTC1 dan ETC1, dan 4 MB untuk terjemahan ke BC7.

Google dan Binomial open source Basis sistem kompresi tekstur Universal

Proses migrasi aplikasi yang ada ke Basis Universal cukup sederhana. Cukup dengan mengkode ulang tekstur atau gambar yang ada ke dalam format baru menggunakan utilitas β€œbasisu” yang disediakan oleh proyek, dengan memilih tingkat kualitas yang diperlukan. Selanjutnya, dalam aplikasi, sebelum merender kode, Anda perlu menginisialisasi transcoder basisu, yang bertanggung jawab untuk menerjemahkan format perantara ke format yang didukung oleh GPU saat ini. Pada saat yang sama, gambar di seluruh rantai pemrosesan tetap terkompresi, termasuk dimuat dalam bentuk terkompresi ke dalam GPU. Alih-alih melakukan transcoding terlebih dahulu pada seluruh gambar, GPU secara selektif hanya mendekode bagian-bagian penting dari gambar tersebut.

Ini mendukung penyimpanan susunan tekstur heterogen (peta kubus), tekstur volumetrik, susunan tekstur, level mipmap, urutan video, atau fragmen tekstur arbitrer dalam satu file. Misalnya, dimungkinkan untuk mengemas serangkaian gambar dalam satu file untuk membuat video kecil, atau menggabungkan beberapa tekstur menggunakan palet umum untuk semua gambar dan menghapus duplikasi template gambar biasa. Implementasi encoder Basis Universal mendukung pengkodean multi-thread menggunakan OpenMP. Transcoder saat ini hanya bekerja dalam mode single-threaded.

tambahan tersedia Dekoder Basis Universal untuk browser, dikirimkan dalam format WebAssembly, yang dapat digunakan dalam aplikasi web berbasis WebGL. Pada akhirnya, Google bermaksud untuk mendukung Basis Universal di semua browser utama dan mempromosikannya sebagai format tekstur portabel untuk WebGL dan spesifikasi masa depan. GPU Web, secara konseptual mirip dengan API Vulkan, Metal, dan Direct3D 12.

Perlu dicatat bahwa kemampuan untuk menyematkan video dengan pemrosesan selanjutnya hanya di sisi GPU menjadikan Basis Universal solusi menarik untuk menciptakan antarmuka pengguna dinamis di WebAssembly dan WebGL, yang secara bersamaan dapat menampilkan ratusan video kecil dengan beban CPU minimal. Sampai instruksi SIMD dapat digunakan di WebAssembly dengan codec tradisional, tingkat kinerja ini belum dapat dicapai, sehingga video berbasis tekstur dapat digunakan di area di mana video konvensional tidak dapat diterapkan. Kode dengan optimasi tambahan untuk video saat ini sedang dipersiapkan untuk dipublikasikan, termasuk kemampuan untuk menggunakannya I-frame dan P-frame dengan dukungan padding adaptif (CR).

Sumber: opennet.ru

Tambah komentar