LDR/HDR便携式GPU压缩纹理转码系统。
Bastic Universal是一种开源超级压制的LDR/HDR GPU压缩纹理互换系统,该系统支持两种中间文件格式:Khronos组的.ktx2打开标准,以及我们自己的“ .basis”文件格式。这些文件格式支持快速转码,几乎可以在过去25年中发布的任何压缩GPU纹理格式。
该项目的总体目标是简化可移植LDR和HDR GPU纹理,图像和纹理视频内容的编码和有效分布,以与任何GPU或任何GPU或渲染/图形API兼容的方式。
该系统支持三种模式:ETC1S,UASTC LDR和UASTC HDR。可以将C/C ++编码器和转编码诽谤汇编为本机代码或WebAssembly,并且可以从JavaScript访问所有编码器/Transcoder功能。
发行说明
实时编码器/转码WebGL示例
JavaScript API/WASM/WebGL信息
UASTC HDR示例图像
ETC1和UASTC LDR文件可以转码:
UASTC HDR文件可以转码:
etc1s:大约.3-3BPP低至中等质量的超压缩模式,基于一个名为“ ETC1”的子集的子集。此模式支持可变质量与文件大小级别(例如JPEG),Alpha通道,内置压缩和纹理阵列,可选地将其作为视频序列(使用Skip Blocks(条件补充)作为视频序列压缩。该模式可以迅速转码为所有受支持的LDR纹理格式。
UASTC LDR:8位/像素LDR高质量模式。 UASTC LDR是标准ASTC LDR 4X4(8BPP)纹理格式的19模式子集,但具有包含转码提示的自定义块格式。将UASTC LDR转换为ASTC LDR和BC7特别简单,因为UASTC LDR是BC7和ASTC的常见子集。其他纹理格式的转码会被每个UASTC LDR块中存在的几个格式特异性提示位加速。
此模式支持可选的利率 - 延伸优化(RDO)后过程,该阶段在.ktx2/.basis文件中调节编码的UASTC LDR纹理数据,以便更有效地压缩LZ。更多详细信息。
这是UASTC LDR规范文档。
这是UASTC HDR规范文档和一些压缩示例图像。
.BASIS和.KTX2文件都支持MIPMAP级别,纹理阵列,Cubemaps,Cubemap数组和纹理视频,并在所有三种模式下。此外,BASIS文件支持非均匀纹理阵列,其中文件中的每个图像都可以具有不同的分辨率或MIPMAP级别的数量。
在ETC1S模式下,压缩机能够使用全局端点/选择器代码簿在整个文件中的所有图像上利用颜色和模式相关性,因此可以将带有MIPMAPS的多个图像有效地存储在单个文件中。 ETC1S模式还支持简短的视频序列,Skip块(条件补充)曾经不发送相对于上一个帧没有变化的块。
支持阅读的LDR映像格式为.png,.dds,带有mipmaps,.tga,.qoi和.jpg。支持阅读的HDR图像格式为.exr,.hdr和.dds带有mipmaps。它可以编写.basis,.ktx2,.dds,.ktx(v1),.astc,.out,.exr和.png文件。
现在,该系统支持使用可选的MIPMAPS加载基本的2D .DDS文件,但是.DDS文件必须以支持的未压缩格式之一:24BPP RGB,32BPP RGBA/BGRA,Half-Float RGBA或Float RGBA。使用.DDS文件允许用户在压缩之前准确地控制MIPMAP的生成方式。
编码库和命令行工具没有需要在存储库本身中的第三方依赖项。 TransCoder是一个单个.cpp源文件(在transcoder/basisu_transcoder.cpp
中),该文件没有第三方依赖关系。
我们在以下建造和测试:
在带有Visual Studio的Windows下,您可以使用随附的basisu.sln
文件。另外,您可以使用CMAKE创建新的VS解决方案/项目文件。
要构建,请先安装Cmake,然后:
cd build
cmake ..
make
要在X86/X64系统上使用SSE 4.1支持(编码速度约为15-30%),请添加-DSSE=TRUE
to to cmake命令行。添加-DOPENCL=TRUE
以构建(可选)OpenCL支持。使用-DCMAKE_BUILD_TYPE=Debug
。要构建32位可执行文件,请添加-DBUILD_X64=FALSE
。
构建后,用于创建,验证和transcode/duncest .basis/.ktx2文件的本机命令行工具是bin/basisu
。
命令行工具包括一些自动化的LDR/HDR编码/转码测试:
cd ../bin
basisu -test
basisu -test_hdr
要以OpenCL模式测试编解码器(必须安装OpenCL LIBS/标头/驱动程序,并通过以-DOPENCL=TRUE
运行CMAKE来编译OpenCL支持):
basisu -test -opencl
basisu -q 255 x.png
basisu -linear x.png
basisu -uastc x.png
basisu x.exr
请注意,我们使用的.EXR读取器是TinyExr,它不支持所有可能的.EXR压缩模式。 ImageMagick之类的工具可用于创建TinyExr可以读取的.exr文件。
另外,可以通过指定-hdr
将LDR图像(例如.png)压缩到UASTC HDR。默认情况下,在压缩到UASTC HDR时,LDR图像在压缩之前首先从SRGB转换为线性光。可以通过指定-hdr_ldr_no_srgb_to_linear
来禁用此转换步骤。
重要的是,为了获得最佳质量,您应该为基础提供原始的未压缩源图像。在碱基之前应用的任何其他类型的有损压缩(包括ETC1/BC1-5,BC7,JPEG等)都会导致多代人工制品出现在最终的输出纹理中。
-fastest
(等效于-uastc_level 0
)将UASTC LDR/HDR编码器以最快(但质量较低)模式处于。
-slower
将UASTC LDR/HDR编码器的质量更高,但模式较慢(相当于-uastc_level 3
)。默认级别为1,最高级别为4(非常慢)。
-q X
,x的范围从[1,255]范围内控制ETC1S模式的质量与文件尺寸折衷级别。 255是最高质量,默认值为128。
-debug
导致编码器打印内部和面向开发人员的详细调试信息。
-stats
查看各种质量(PSNR)统计。
-linear
:ETC1S默认为SRGB Colorspace指标,UASTC LDR当前始终使用线性指标,而UASTC HDR默认值为加权RGB度量标准(具有2,3,1个权重)。如果输入是普通的地图,或其他类型的非SRGB(非镜头)纹理内容,请确保使用-linear
以避免额外的不必要的文物。 (UASTC LDR/HDR的Angular正常地图指标肯定是可行的,并且在我们的待办事项列表中。)
指定-opencl
启用OpenCL模式,目前仅加速ETC1S编码。
默认情况下,压缩机是多线程,可以使用-no_multithreading
命令行选项禁用。尽管它是线程安全的,但当前是单线螺纹的(即它支持并行地解压缩多个纹理切片)。
basisu -uastc -uastc_rdo_l 1.0 -mipmap x.png
-uastc_rdo_l X
控制RDO(费用延伸优化)质量设置。该值越低,质量越高,但是压缩文件大小越大。良好的尝试值在.2-3.0之间。默认值为1.0。
basisu -mipmap -q 200 x.png
有几种更改过滤器内核的MIPMAP选项,RGB通道的过滤器Colorspace(线性与SRGB),最小的MIPMAP尺寸等。该工具还支持生成Cubemap文件,2D/Cubemap纹理阵列等自动MIPMAP生成器,您可以创建LDR或HDR未压缩.DDS纹理文件并将其馈送到压缩机。
basisu -comp_level 2 x.png
在一些罕见的图像(具有蓝天梯度的图像)上,您可能需要增加ETC1 -comp_level
设置,范围为1,6。这控制了编码器用于优化ETC1S代码簿和压缩数据流的总体努力量。较高的comp_level的速度明显较慢。
basisu x.png -comp_level 2 -max_endpoints 16128 -max_selectors 16128
basisu -tonemap x.exr
basisu -compare a.png b.png
basisu -compare_hdr a.exr b.exr
有关工具的命令行选项的完整列表,请参见帮助文本。命令行工具只是编码器库顶部的一个薄包装器。
您可以使用命令行工具,也可以直接调用从JavaScript或C/C ++代码的转码来解压缩.KTX2/.BASIS文件以GPU纹理数据或未压缩的图像数据。要将.ktx2 or.BASIS文件解放到多个.png/.exr/.ktx/.dds文件:
basisu x.ktx2
使用-no_ktx
和-etc1_only
/ -format_only
选项,将其拆箱到更少的文件中。
-info
和-validate
将只显示文件信息而不输出任何文件。
书面的MIP图,CUBEMAP或纹理阵列.ktx/.dds文件将以各种压缩的GPU纹理格式(PVRTC1 4BPP,ETC1-2,BC1-5,BC7等),据我们所知,不幸的是(截至2024年)仍然没有单个.ktx或.dds查看器工具,可以正确且可靠地支持我们支持的每种GPU纹理格式。使用MALI的纹理压缩工具,使用AMD的Compressonator,ETC1/2可查看BC1-5和BC7文件,并使用Imagination Tech的PVRTEXTOXTOL使用PVRTC1。 RenderDoc具有许多格式的有用的纹理文件查看器。 Mac OSX Finder以各种GPU格式支持预览.EXR和.KTX文件。 Windows 11 Explorer可以预览.DDS文件。在线OpenHDR查看器可用于查看.exr/.hdr映像文件。
“ WebGL”目录包含四个简单的WebGL演示,这些演示使用了与Emscripten一起编译为WASM的转编码器和压缩机。这些演示在这里在线。在此处查看README文件中的更多详细信息。
转码器和编码器均可使用Emscripten进行WebAssembly并在网络上使用。用emscripten扩展名编写的一组JavaScript包装器位于webgl/transcoding/basis_wrappers.cpp
中。 JavaScript包装器几乎支持所有功能和模式,包括纹理视频。请参阅webgl/transcoder
和webgl/encoder
中的readme.md和cmakelists.txt文件。
在安装Emscripten之后,要构建WASM Transcoder:
cd webgl/transcoder/build
emcmake cmake ..
make
构建WASM编码器:
cd webgl/encoder/build
emcmake cmake ..
make
有两个简单的编码/转编码Web演示,位于webgl/ktx2_encode_test
和webgl/texture_test
中,展示了如何使用Encoder's和TransCoder的JavaScript包装器API。
一些简单的示例显示了如何直接调用C ++编码器和TransCoder库API的example/examples.cpp
。
在这里查看Wiki。
您可以使用VCPKG依赖项管理器下载并安装基础通用:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
Microsoft团队成员和社区贡献者保持了VCPKG的基础通用端口。如果该版本已过时,请在VCPKG存储库上创建问题或拉出请求。 (9/10/2024:UASTC HDR支持尚不可用。)
转编码器和核心编码器库是Apache 2.0。 Transcoder使用第三方库或依赖项。请参阅许可证。
编码器库是Apache 2.0,但它利用了一些开源3rd party模块(在'ecdoder/3rdparty'和in'ZSTD'目录中)来加载.qoi,.dds,.dds,.exr images,以处理ZSTD Compression,to to to to to解开ASTC纹理块。请参阅许可证和。更新文件夹。
该存储库已更新以符合REUSE许可检查工具(https://reuse.software/)。请参阅.reuse
子目录。
在线.EXR HDR图像文件查看器
Windows HDR + WCG图像查看器 - Windows的真实HDR图像查看器。另请参阅GitHub仓库。
Renderdoc
AMD压缩机
Microsoft的Directxtex
pvrtextool
马里纹理压缩工具 - 现在已弃用
有关更多有用的链接,论文和工具/库,请参见UASTC HDR纹理规范的末尾。
电子邮件:info @二项式点信息,或在Twitter上与我们联系
这是赞助商Wiki页面。