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頁面。