Recientemente Google y Binomial dieron a conocer que han abierto el código fuente de Basis Universal, el cual es un códec para comprimir eficientemente texturas y el formato de archivo asociado .basis para distribuir texturas basadas en imágenes y vídeos. El código de implementación de referencia está escrito en C ++ y se suministra bajo la licencia Apache 2.0.
Basis Universal complementa el sistema de compresión de datos 3D Draco y está tratando de resolver el problema con la entrega de texturas para GPU.
Hasta ahora, los desarrolladores se han visto limitados por la elección entre formatos de bajo nivel que permiten un alto rendimiento, pero específicos para la GPU y que ocupan una gran cantidad de espacio en disco, y otros formatos que permiten reducir el tamaño, pero no pueden competir con las texturas de la GPU en el rendimiento.
Sobre Basis
El formato Basis Universal permite alcanzar niveles de rendimiento de texturas GPU nativas, pero proporciona un mayor nivel de compresión.
La base es un formato intermedio que, antes de su uso, proporciona una transcodificación rápida a varios formatos de bajo nivel de texturas de GPU que se utilizan tanto en sistemas de escritorio como en dispositivos móviles.
Actualmente, la transmisión se admite en los formatos PVRTC1 (4bpp RGB), BC7 (modo 6 RGB), BC1-5, ETC1 y ETC2. En el futuro, se espera que se admitan los modos ASTC (RGB o RGBA) y 4/5 RGBA para BC7 y 4bpp RGBA para PVRTC1.
Las texturas en el formato ocupan de 6 a 8 veces menos memoria de video y requieren aproximadamente dos veces menos datos que las texturas típicas basadas en el formato JPEG y 10-25% menos que las texturas en el modo RDO.
Por ejemplo, con un tamaño de imagen JPEG de 891 KB y texturas ETC1 de 1 MB, el tamaño de los datos en formato básico es de 469 KB en el modo de mayor calidad.
Al colocar las texturas en la memoria de vídeo, las texturas utilizadas en las pruebas en formatos JPEG y PNG consumieron 16 MB de memoria, mientras que las texturas en formato básico requerían 2 MB de memoria en el caso de transmisión en BC1, PVRTC1 y ETC1, y 4 MB en caso de transmisión en AC7.
El proceso de conversión de aplicaciones existentes a Basis Universal es bastante simple:
Basta con recodificar texturas o imágenes existentes en un nuevo formato utilizando la utilidad «basisu» proporcionada por el proyecto, seleccionando el nivel de calidad requerido.
Además, en la aplicación, antes del código, se debe inicializar el codificador, que es el responsable de traducir el formato intermedio al formato compatible con la GPU actual.
Al mismo tiempo, las imágenes de toda la cadena de procesamiento permanecen comprimidas, incluida la descarga en forma comprimida en la GPU. En lugar de recodificar de forma proactiva la imagen completa, la GPU decodifica selectivamente solo las partes necesarias de la imagen.
Admite guardar en un solo archivo arrays de texturas (mapa de cubos), texturas masivas, arreglos de texturas, niveles de mipmap, secuencias de vídeo o fragmentos de textura arbitrarios.
Por ejemplo, es posible empaquetar en un solo archivo de serie de imágenes para crear vídeos pequeños o combinar varias texturas usando una paleta común para todas las imágenes y la deduplicación de plantillas de imágenes típicas.
Google quiere que basis se convierta en un estándar
La implementación del codificador Basis Universal es compatible con la codificación multiproceso mediante OpenMP. El recodificador solo funciona en modo de un solo hilo.
Además, el decodificador del navegador Basis Universal está disponible en el formato web, que se puede usar en aplicaciones web basadas en WebGL.
En última instancia, Google pretende admitir Basis Universal en todos los navegadores principales y promocionarlo como un formato de textura portátil para WebGL y la futura especificación de WebGPU , conceptualmente similar a Vulkan, Metal y Direct3D API 12.
Se observa que la capacidad de integrar vídeo con su procesamiento posterior solo en el lado de la GPU hace de Basis Universal una solución interesante para crear interfaces de usuario dinámicas en WebAssembly y WebGL, que pueden reflejar simultáneamente cientos de vídeos pequeños con una carga mínima en la CPU.
Hasta la posibilidad de utilizar las instrucciones SIMD en WebAssembly con los códecs tradicionales, tal nivel de rendimiento aún no es alcanzable, por lo que el vídeo basado en texturas se puede usar en áreas donde el video normal no es aplicable.
Fuente: https://opensource.googleblog.com/