Système de compression de texture universel de base open source Google et Binomial

Google et Binôme ont ouvert textes sources Base universelle, un codec pour une compression efficace des textures et un format de fichier universel ".basis" associé pour la distribution de textures basées sur des images et des vidéos. Le code d'implémentation de référence est écrit en C++ et fourni sous licence Apache 2.0.

Base Universelle complète précédemment publié Système de compression de données Draco 3D et tente de résoudre le problème de fourniture de textures pour le GPU. Jusqu'à présent, les développeurs étaient limités à choisir entre des formats de bas niveau qui atteignent des performances élevées mais sont spécifiques au GPU et occupent beaucoup d'espace disque, et d'autres formats qui permettent une réduction de taille mais ne peuvent pas rivaliser avec les textures GPU en termes de performances.

Le format Basis Universal permet d'obtenir les performances des textures GPU natives, mais offre un niveau de compression plus élevé.
Basis est un format intermédiaire qui permet un transcodage rapide des textures GPU vers divers formats de bas niveau pour une utilisation sur les systèmes de bureau et les appareils mobiles avant utilisation. Les formats PVRTC1 (RVB 4 bpp), BC7 (mode 6 RVB), BC1-5, ETC1 et ETC2 sont actuellement pris en charge. Une prise en charge future est attendue pour le format ASTC (RGB ou RGBA) et les modes 4/5 RGBA pour BC7 et 4bpp RGBA pour PVRTC1.

Système de compression de texture universel de base open source Google et Binomial

Les textures au format de base occupent 6 à 8 fois moins de mémoire vidéo et nécessitent de transférer environ deux fois moins de données que les textures typiques basées sur le format JPEG et 10 à 25 % de moins que les textures en mode RDO. Par exemple, avec une taille d'image JPEG de 891 Ko et une texture ETC1 de 1 Mo, la taille des données au format Basis est de 469 Ko en mode de qualité la plus élevée. Lors du placement des textures dans la mémoire vidéo, les textures JPEG et PNG utilisées dans les tests consommaient 16 Mo de mémoire, tandis que les textures dans
La base nécessitait 2 Mo de mémoire pour la traduction vers BC1, PVRTC1 et ETC1, et 4 Mo pour la traduction vers BC7.

Système de compression de texture universel de base open source Google et Binomial

Le processus de migration des applications existantes vers Basis Universal est assez simple. Il suffit de recoder les textures ou images existantes dans un nouveau format à l'aide de l'utilitaire « basisu » fourni par le projet, en sélectionnant le niveau de qualité requis. Ensuite, dans l'application, avant le code de rendu, vous devez initialiser le transcodeur basicu, qui est chargé de traduire le format intermédiaire vers le format pris en charge par le GPU actuel. Dans le même temps, les images tout au long de la chaîne de traitement restent compressées, y compris lorsqu'elles sont chargées sous forme compressée dans le GPU. Au lieu de transcoder de manière préventive l’intégralité de l’image, le GPU décode sélectivement uniquement les parties nécessaires de l’image.

Il prend en charge l'enregistrement de tableaux de textures hétérogènes (cubemaps), de textures volumétriques, de tableaux de textures, de niveaux de mipmap, de séquences vidéo ou de fragments de texture arbitraires dans un seul fichier. Par exemple, il est possible de regrouper une série d'images dans un seul fichier pour créer de petites vidéos, ou de combiner plusieurs textures en utilisant une palette commune pour toutes les images et en dédupliquant des modèles d'images typiques. L'implémentation de l'encodeur Basis Universal prend en charge l'encodage multithread à l'aide d'OpenMP. Le transcodeur ne fonctionne actuellement qu'en mode monothread.

en outre est disponible Décodeur Basis Universal pour navigateurs, livré au format WebAssembly, utilisable dans les applications Web basées sur WebGL. À terme, Google a l'intention de prendre en charge Basis Universal dans tous les principaux navigateurs et de le promouvoir en tant que format de texture portable pour WebGL et future spécification. WebGPU, qui est conceptuellement similaire aux API Vulkan, Metal et Direct3D 12.

Il est à noter que la possibilité d'intégrer la vidéo avec son traitement ultérieur uniquement du côté GPU fait de Basis Universal une solution intéressante pour créer des interfaces utilisateur dynamiques sur WebAssembly et WebGL, qui peuvent afficher simultanément des centaines de petites vidéos avec une charge CPU minimale. Jusqu'à ce que les instructions SIMD puissent être utilisées dans WebAssembly avec des codecs traditionnels, ce niveau de performances n'est pas encore atteint, de sorte que la vidéo basée sur les textures peut être utilisée dans des domaines où la vidéo conventionnelle n'est pas applicable. Le code avec des optimisations supplémentaires pour la vidéo est actuellement en cours de préparation pour publication, y compris la possibilité d'utiliser I-frames et P-frames avec support de rembourrage adaptatif (CR).

Source: opennet.ru

Ajouter un commentaire