Google 与 Binomial 开源 Basis Universal 纹理压缩系统

谷歌和二项式 开了 源代码 通用基础,一种用于高效纹理压缩的编解码器以及用于分发基于图像和视频的纹理的关联通用“.basis”文件格式。 参考实现代码是用C++编写的 提供 在 Apache 2.0 下获得许可。

Basis Universal 补充了之前的内容 发表 Draco 3D数据压缩系统并试图解决为GPU提供纹理的问题。 到目前为止,开发人员只能在实现高性能但特定于 GPU 并占用大量磁盘空间的低级格式和实现尺寸减小但在性能上无法与 GPU 纹理竞争的其他格式之间进行选择。

Basis Universal 格式允许您实现本机 GPU 纹理的性能,但提供更高级别的压缩。
Basis 是一种中间格式,可在使用前将 GPU 纹理快速转码为各种低级格式,以便在桌面系统和移动设备上使用。 目前支持的格式有 PVRTC1 (4bpp RGB)、BC7(6 RGB 模式)、BC1-5、ETC1 和 ETC2 格式。 未来预计将支持 ASTC 格式(RGB 或 RGBA)以及 BC4 的 5/7 RGBA 模式和 PVRTC4 的 1bpp RGBA。

Google 与 Binomial 开源 Basis Universal 纹理压缩系统

基本格式的纹理占用的视频内存少 6-8 倍,所需传输的数据量大约是基于 JPEG 格式的典型纹理的一半,比 RDO 模式的纹理少 10-25%。 例如,JPEG 图像大小为 891 KB,ETC1 纹理为 1 MB,Basis 格式的数据大小在最高质量模式下为 469 KB。 将纹理放入显存时,测试中使用的 JPEG 和 PNG 纹理消耗了 16 MB 内存,而
Basis 需要 2 MB 内存来转换为 BC1、PVRTC1 和 ETC1,需要 4 MB 内存来转换为 BC7。

Google 与 Binomial 开源 Basis Universal 纹理压缩系统

将现有应用程序迁移到 Basis Universal 的过程非常简单。 使用项目提供的“basisu”实用程序将现有纹理或图像重新编码为新格式就足够了,选择所需的质量级别。 接下来,在应用程序中,在渲染代码之前,需要初始化basisu转码器,它负责将中间格式翻译成当前GPU支持的格式。 同时,整个处理链中的图像保持压缩状态,包括以压缩形式加载到 GPU 中。 GPU 不会预先对整个图像进行转码,而是有选择地仅对图像的必要部分进行解码。

它支持在一个文件中保存异构纹理数组(立方体贴图)、体积纹理、纹理数组、mipmap 级别、视频序列或任意纹理片段。 例如,可以将一系列图像打包在一个文件中以创建小视频,或者使用所有图像的通用调色板并删除典型图像模板的重复数据来组合多个纹理。 Basis Universal 编码器实现支持使用 OpenMP 的多线程编码。 转码器目前仅在单线程模式下工作。

另外 是可用的 Basis 浏览器通用解码器,以 WebAssembly 格式提供,可用于基于 WebGL 的 Web 应用程序。 最终,Google 打算在所有主要浏览器中支持 Basis Universal,并将其推广为 WebGL 的可移植纹理格式和未来规范 网络GPU,概念上类似于 Vulkan、Metal 和 Direct3D 12 API。

值得注意的是,嵌入视频并仅在 GPU 端进行后续处理的能力使 Basis Universal 成为在 WebAssembly 和 WebGL 上创建动态用户界面的有趣解决方案,它可以以最小的 CPU 负载同时显示数百个小视频。 在SIMD指令可以与传统编解码器一起在WebAssembly中使用之前,这种性能水平还无法实现,因此基于纹理的视频可以用于传统视频不适用的领域。 目前正在准备发布对视频进行额外优化的代码,包括使用 I 帧和 P 帧 具有自适应填充 (CR) 支持。

来源: opennet.ru

添加评论