Earlier today, Google and Binomial announced that they have partnered to open source a sophisticated texture compressor and a high-performance transcoder for Binomial’s cross-platform Basis Universal texture format. This format can help solve a long-standing problem in the 3D ecosystem: how can 3D textures assets be efficiently packaged or transmitted for an application in a way that is both compact AND can be efficiently processed by the wide diversity of GPU hardware texture engines - each of which has a preferred native format?
This problem is particularly acute for WebGL/WebXR applications that have to transmit their 3D assets over the network in real-time, but even native mobile and PC games often ship with texture assets in multiple native GPU formats - significantly bloating install sizes and complicating texture transcoding and distribution for developers.
Textures in the Basis Universal format are similar in size to a JPEG image but they can be efficiently and flexibly transcoded to a wide variety of GPU native formats on the target device without needing to be fully decompressed. Google and Binomial are contributing this format to the open and royalty-free glTF standard being managed by the 3D Formats working group at Khronos.
The Compressed Texture Transmission Format (CTTF) subgroup of glTF at Khronos has been working for some time with Binomial to integrate Basis Universal technology into glTF. This effort is very complementary to glTF’s existing geometry compression extension that uses Google’s Draco geometry compression technology. Once the CTTF extension is complete, glTF files will be enabled to include both compressed geometry and textures in 3D asset files suitable for games, virtual and augmented reality, maps, photos, small-videos and more!
Now that the Basis Universal texture compressor and transcoder are freely available in open source, the development of the CTTF extension for glTF can be accelerated, and immediately supported with tools available for any developer to freely use.
What is in the Basis Universal open source release?
The initial open source release for Basis Universal includes both a state-of-the-art compressor to create Basis Universal textures, and a transcoder to convert Basis Universal textures into the following GPU formats: PVRTC1 opaque, ETC1, ETC2 basic alpha, BC1-5, and BC7 opaque. Over the coming months, more functionality will be added including BC7 transparent, ASTC opaque and alpha, PVRTC1 transparent, and higher quality BC7/ASTC. The Basis Universal transcoder is available in C++ and WebAssembly - enabling seamless integration into diverse native and Web pipelines. Google and Binomial will be working together to continue to support, maintain and add features, so check back frequently for the latest.
How can I try Basis Universal in my own application?
To access the Basis Universal code and see a demo visit GitHub. Firstly compress your texture images using the compressor, choosing the quality settings that make sense for your project (you can also submit multiple images for small videos or optimization purposes, just know they’ll share the same color palette). Insert the transcoder code before your rendering code, which will turn the Basis Universal format assets into the native GPU format for your specific device at runtime. The image stays compressed throughout this process, even on your GPU. Instead of needing to decode and read the whole image, the GPU will read only the parts it needs. Enjoy the performance benefits!
Join us to help create the dream of a Universal Texture format!
The Khronos 3D Formats Working Group is working very closely with Google and Binomial on this significant contribution to create a truly cross-platform, universal texture transmission open standard as part of glTF. Khronos welcomes any company to join to take part in the evolution of glTF and have a seat in the 3D Formats Working group. We’re looking forward to seeing what people do with Basis Universal now that it's open sourced. Feedback is welcome, tell us how you are using it via GitHub!