LDR/HDRポータブルGPU圧縮テクスチャトランスコーディングシステム。
Basing Universalは、2つの中間ファイル形式の2つの中間ファイル形式をサポートする、Binomial LLCのLDR/HDR GPU圧縮テクスチャインターチェンジシステムと、Khronosグループの.ktx2オープン標準と、独自の「.basis」ファイル形式です。これらのファイル形式は、過去25年間にリリースされたほぼすべての圧縮GPUテクスチャ形式への迅速なトランスコーディングをサポートします。
このプロジェクトでの全体的な目標は、 Portable LDRおよびHDR GPUのテクスチャ、画像、およびテクスチャビデオコンテンツのエンコードと効率的な分布を、GPUまたはレンダリング/グラフィックスAPIと互換性のある方法で簡素化することです。
システムは、ETC1、UASTC LDR、およびUASTC HDRの3つのモードをサポートしています。 C/C ++エンコーダーとトランスコダーの責任者は、ネイティブコードまたはWebAssemblyにコンパイルでき、すべてのエンコーダー/トランスコダー機能にJavaScriptからアクセスできます。
ノートをリリースします
ライブエンコーダー/トランスコダーWebGLの例
JavaScript API/WASM/WEBGL情報
UASTC HDRの例の画像
etc1sおよびuastc ldrファイルは、次のようにトランスコードできます。
UASTC HDRファイルは、次のようにトランスコードできます。
etc1s:「etc1s」と呼ばれるett1のサブセットに基づいた約.3-3bpp低から中程度の品質のスーパーコンプレーションモード。このモードは、ファイルサイズレベル(JPEGなど)、アルファチャネル、組み込みの圧縮、およびスキップブロックを使用してビデオシーケンスとして圧縮されたテクスチャアレイ(条件付き補充)をサポートします。このモードは、サポートされているすべてのLDRテクスチャフォーマットに迅速にトランスコーディングできます。
UASTC LDR:8ビット/ピクセルLDR高品質モード。 UASTC LDRは、標準のASTC LDR 4x4(8BPP)テクスチャ形式の19モードのサブセットですが、トランスコーディングのヒントを含むカスタムブロック形式を備えています。 UASTC LDRはBC7とASTCの両方の一般的なサブセットであるため、UASTC LDRをASTC LDRおよびBC7にトランスコーディングすることは特に高速でシンプルです。他のテクスチャ形式のトランスコダーは、各UASTC LDRブロックに存在するいくつかの形式固有のヒントビットによって加速されます。
このモードは、.ktx2/.basisファイルのエンコードされたuastc ldrテクスチャデータを条件付けるオプションのレート耐性最適化(RDO)ポストプロセスステージをサポートし、より効果的にLZ圧縮を可能にすることができます。詳細はこちらです。
これがUASTC LDR仕様ドキュメントです。
UASTC HDR仕様ドキュメントと、いくつかの圧縮例画像は次のとおりです。
.basisと.ktx2ファイルの両方が、3つのモードすべてで、MIPMAPレベル、テクスチャアレイ、キューブマップ、キューブマップアレイ、テクスチャビデオをサポートしています。さらに、.basisファイルは、ファイル内の各画像が異なる解像度またはMIPMAPレベルの数を持つことができる不均一なテクスチャアレイをサポートしています。
ETC1Sモードでは、コンプレッサーはグローバルエンドポイント/セレクターコードブックを使用してファイル全体のすべての画像にわたって色とパターンの相関を活用できます。そのため、MIPMAPを備えた複数の画像を単一のファイルに効率的に保存できます。 ETC1Sモードは、前のフレームに比べて変更されていないブロックを送信しないためにスキップブロック(条件付き補充)を使用して、短いビデオシーケンスもサポートしています。
読み取りにサポートされるLDR画像形式は、.png、.dds with mipmaps、.tga、.qoi、および.jpgです。読み取りにサポートされているHDR画像形式は、MIPMAPを使用した.exr、.hdr、および.ddsです。 .basis、.ktx2、.dds、.ktx(v1)、.astc、.out、.exr、および.pngファイルを書き込むことができます。
このシステムは、オプションのMIPMAPを使用して基本的な2D .DDSファイルのロードをサポートするようになりましたが、.DDSファイルは、サポートされている非圧縮形式の1つでなければなりません:24BPP RGB、32BPP RGBA/BGRA、ハーフフロートRGBA、またはフロートRGBA。 .ddsファイルを使用すると、ユーザーは圧縮前にMIPMAPの生成方法を正確に制御できます。
エンコーディングライブラリおよびコマンドラインツールには、まだリポジトリ自体にないサードパーティの依存関係は必要ありません。 Transcoderは、サードパーティの依存関係がない単一の.cppソースファイル( transcoder/basisu_transcoder.cpp
)です。
以下で構築およびテストします。
Visual StudioのWindowsの下で、付属のbasisu.sln
ファイルを使用できます。または、Cmakeを使用して、新しいソリューション/プロジェクトファイルを作成することもできます。
構築するには、最初にcmakeをインストールします。
cd build
cmake ..
make
X86/X64システムのSSE 4.1サポートで構築するには(エンコーディングは約15〜30%高速です)、Cmakeコマンドラインに-DSSE=TRUE
を追加します。 -DOPENCL=TRUE
(オプション)openclサポートを使用してビルドします。 -DCMAKE_BUILD_TYPE=Debug
を使用してデバッグを作成します。 32ビット実行可能ファイルを構築するには、 -DBUILD_X64=FALSE
を追加します。
構築後、Native Command Lineツールは、.basis/.ktx2ファイルを作成、検証、およびトランスコード/[トランスコード]/[トランスコード]/.ktx2ファイルはbin/basisu
です。
コマンドラインツールには、自動化されたLDR/HDRエンコード/トランスコーディングテストが含まれています。
cd ../bin
basisu -test
basisu -test_hdr
OPENCLモードでコーデックをテストするには(opencl libs/headers/driversがインストールされている必要があり、 -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のものです。 ImageMagickなどのツールを使用して、TinyExrが読むことができる.exrファイルを作成できます。
あるいは、 -hdr
指定することにより、LDR画像(.PNGなど)をUASTC HDRに圧縮できます。デフォルトでは、LDR画像は、UASTC HDRに圧縮されると、最初に圧縮前にSRGBから線形光に変換されます。この変換ステップは、 -hdr_ldr_no_srgb_to_linear
指定して無効にできます。
重要なことに、最高品質のために、元の非圧縮ソース画像を基本を提供する必要があります。 basingu(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
により、エンコーダは内部および開発者指向の冗長デバッグ情報を印刷します。
- さまざまな品質(PSNR)統計を確認する-stats
。
-linear
:etc1sはデフォルトでsrgb Colorspaceメトリックになり、UASTC LDRは現在常に線形メトリックを使用し、UASTC HDRは重み付けされたRGBメトリック(2,3,1重量)にデフォルトです。入力が通常のマップ、または他のタイプの非SRGB(非写真撮影)テクスチャコンテンツである場合は、 -linear
使用して、余分な不要なアーティファクトを避けてください。 (UASTC LDR/HDRのAngular Normal Mapメトリックは、間違いなく実行可能であり、TODOリストに載っています。)
-opencl
指定すると、現在、ETC1Sエンコードが加速しているOPENCLモードを有効にします。
コンプレッサーはデフォルトでマルチスレッドされており、 -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チャネルのフィルターカラースペース(線形対SRGB)、最小のMIPMAPディメンションなどがあります。このツールは、バイパスするためにキューブマップファイル、2D/キューブマップテクスチャアレイなどの生成をサポートします。自動MIPMAPジェネレーターでは、LDRまたはHDRの非圧縮.DDSテクスチャファイルを作成して、コンプレッサーに送信できます。
basisu -comp_level 2 x.png
珍しい画像(青い空の勾配が付いたもの)では、1,6の範囲の範囲のetc1s -comp_level
設定を増やす必要がある場合があります。これにより、Encoderが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
、ファイル情報を表示するだけで、ファイルを出力しません。
書かれたMIPMAPPED、CUBEMAP、またはテクスチャアレイ.KTX/.DDSファイルは、さまざまな圧縮GPUテクスチャ形式(PVRTC1 4BPPなど、BC1-5、BC7など)になります。残念ながら(2024年現在)、私たちがサポートするすべてのGPUテクスチャ形式を正確かつ確実にサポートする単一の.ktxまたは.ddsビューアーツールはまだありません。 BC1-5およびBC7ファイルは、Maliのテクスチャ圧縮ツールを使用して、AMDのコンプレッサネーターなどを使用して表示可能です。 RenderDocには、多くの形式で有用なテクスチャファイルビューアーがあります。 Mac OSX Finderは、さまざまなGPU形式の.exrおよび.ktxファイルのプレビューをサポートしています。 Windows 11 Explorerは.ddsファイルをプレビューできます。オンラインOpenHDRビューアは、.exr/.hdr画像ファイルの表示に役立ちます。
「WebGL」ディレクトリには、Emscriptenを使用してWASMにコンパイルされたトランスコダーとコンプレッサーを使用する4つの単純なWebGLデモが含まれています。これらのデモはここでオンラインです。 READMEファイルの詳細については、こちらをご覧ください。
Transcoderとエンコーダーの両方を、EmscriptenからWebAssemblyを使用してコンパイルし、Webで使用できます。 emscripten拡張機能を備えたC ++で記述されたコーデックのJavaScriptラッパーのセットは、 webgl/transcoding/basis_wrappers.cpp
にあります。 JavaScriptラッパーは、テクスチャビデオを含むほぼすべての機能とモードをサポートしています。 webgl/transcoder
およびwebgl/encoder
のreadme.mdおよびcmakelists.txtファイルを参照してください。
emscriptenをインストールした後、WASMトランスコダーを構築するには:
cd webgl/transcoder/build
emcmake cmake ..
make
WASMエンコーダーを構築するには:
cd webgl/encoder/build
emcmake cmake ..
make
webgl/ktx2_encode_test
とwebgl/texture_test
にある2つの単純なエンコード/トランスコーディングWebデモがあり、エンコーダーとトランスコダーのJavaScriptラッパーAPIの使用方法を示しています。
C ++エンコーダーとトランスコダーライブラリAPIを直接呼び出す方法を示すいくつかの簡単な例はexample/examples.cpp
にあります。
こちらをご覧ください。
VCPKG Dependency Managerを使用して、Base Universalをダウンロードしてインストールできます。
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
VCPKGのベースユニバーサルポートは、Microsoftチームメンバーとコミュニティの貢献者によって最新の状態に保たれています。バージョンが古くなっている場合は、VCPKGリポジトリで問題を作成するか、リクエストをプルしてください。 (9/10/2024:UASTC HDRのサポートはまだ入手できません。)
トランスコダーとコアエンコーダーライブラリはApache 2.0です。 Transcoderは、サードパーティライブラリまたは依存関係を使用していません。ライセンスを参照してください。
エンコーダライブラリはApache 2.0ですが、いくつかのオープンソースサードパーティモジュール(「エンコーダ/3rdparty」および「ZSTD」ディレクトリで)を使用して、ZSTD圧縮を処理するために.QOI、.DDS、.EXR画像をロードし、 ASTCテクスチャブロックを開梱します。ライセンスと.reuseフォルダーを参照してください。
リポジトリは、再利用ライセンスチェックツール(https://reuse.software/)に準拠するように更新されました。 .reuse
sub -directoryを参照してください。
オンライン.EXR HDRイメージファイルビューアー
Windows HDR + WCG Image Viewer -Windowsの真のHDR画像ビューアー。 Github Repoも参照してください。
renderdoc
AMD圧縮機
MicrosoftのDirectxtex
pvrtextool
マリテクスチャ圧縮ツール - 今では非推奨になりました
より便利なリンク、論文、ツール/ライブラリについては、UASTC HDRテクスチャの仕様の終わりを参照してください。
電子メール:info @ binomial dot情報、またはTwitterでお問い合わせください
これがスポンサーのWikiページです。