LDR/HDR 휴대용 GPU 압축 텍스처 트랜스 코딩 시스템.
기본 범용은 두 가지 중간 파일 형식을 지원하는 이항 LLC의 오픈 소스 슈퍼 컴퓨터 LDR/HDR GPU 압축 텍스처 인터체인지 시스템입니다. 이 파일 형식은 지난 ~ 25 년 동안 출시 된 거의 모든 압축 GPU 텍스처 형식으로 빠른 트랜스 코딩을 지원합니다.
이 프로젝트의 전반적인 목표는 GPU 또는 렌더링/그래픽 API와 호환되는 방식으로 휴대용 LDR 및 HDR GPU 텍스처, 이미지 및 텍스처 비디오 컨텐츠의 인코딩 및 효율적인 분포를 단순화하는 것입니다.
이 시스템은 ETC1, UASTC LDR 및 UASTC HDR의 세 가지 모드를 지원합니다. C/C ++ 엔코더 및 트랜스 코더 리바리는 기본 코드 또는 webassembly로 컴파일 될 수 있으며 모든 인코더/트랜스 코더 기능은 JavaScript에서 액세스 할 수 있습니다.
릴리스 노트
라이브 인코더/트랜스 코더 WebGL 예제
JavaScript API/WASM/WEBGL 정보
UASTC HDR 예제 이미지
etc1s 및 uastc ldr 파일은 다음으로 트랜스 코딩 될 수 있습니다.
UASTC HDR 파일은 다음으로 트랜스 코딩 될 수 있습니다.
ETC1S : "etc1s"라는 ETC1의 서브 세트를 기반으로 약 .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 텍스처 데이터를 조정하여보다 효과적으로 LZ를 압축 할 수있는 선택적 속도 방지 최적화 (RDO) 후 프로세스 단계를 지원합니다. 자세한 내용은 여기를 참조하십시오.
UASTC LDR 사양 문서는 다음과 같습니다.
다음은 UASTC HDR 사양 문서와 일부 압축 예 이미지입니다.
.BASIS 및 .ktx2 파일 모두 세 가지 모드 모두에서 MIPMAP 레벨, 텍스처 어레이, 큐브 맵, 큐브 맵 어레이 및 텍스처 비디오를 지원합니다. 또한 .BASIS 파일은 불균일 한 텍스처 배열을 지원하며, 여기서 파일의 각 이미지는 다른 해상도 또는 MIPMAP 레벨 수를 가질 수 있습니다.
ETC1S 모드에서 압축기는 전체 파일의 모든 이미지에서 Global Endpoint/Selector Codebook을 사용하여 전체 이미지의 색상 및 패턴 상관 관계를 악용 할 수 있으므로 MIPMAPS가있는 여러 이미지를 단일 파일로 효율적으로 저장할 수 있습니다. ETC1S 모드는 또한 이전 프레임과 관련하여 변경되지 않은 블록을 보내지 않은 스킵 블록 (조건부 보충)이있는 짧은 비디오 시퀀스를 지원합니다.
읽기에 지원되는 LDR 이미지 형식은 .png, .dds with mipmaps, .tga, .qoi 및 .jpg입니다. 읽기에 지원되는 HDR 이미지 형식은 mipmaps가있는 .exr, .hdr 및 .dds입니다. .basis, .ktx2, .dds, .ktx (v1), .astc, .out, .exr 및 .png 파일을 작성할 수 있습니다.
이 시스템은 이제 옵션 MIPMAPS가있는 기본 2D .DDS 파일로드를 지원하지만 .dds 파일은 지원되지 않는 형식 중 하나 (24BPP RGB, 32BPP RGBA/BGRA, Half-Foat RGBA 또는 Float RGBA) 중 하나 여야합니다. .dds 파일을 사용하면 사용자가 압축하기 전에 MIPMAP가 생성되는 방식을 정확하게 제어 할 수 있습니다.
인코딩 라이브러리 및 명령 라인 도구에는 아직 Repo 자체에 있지 않은 제 3 자 종속이 필요하지 않습니다. 트랜스 코더는 제 3 자 종속성이없는 단일 .cpp 소스 파일 ( transcoder/basisu_transcoder.cpp
)입니다.
우리는 다음에서 구축하고 테스트합니다.
Visual Studio가있는 Windows에서는 포함 된 basisu.sln
파일을 사용할 수 있습니다. 또는 CMAKE를 사용하여 새 VS 솔루션/프로젝트 파일을 생성 할 수 있습니다.
먼저 Cmake를 설치하려면 :
cd build
cmake ..
make
x86/x64 시스템에서 SSE 4.1 지원을 구축하려면 (인코딩은 대략 15-30% 더 빠릅니다) Cmake 명령 줄에 -DSSE=TRUE
추가하십시오. add -DOPENCL=TRUE
to build (옵션) OpenCl 지원을 제공합니다. -DCMAKE_BUILD_TYPE=Debug
사용하여 Debug에서 빌드하십시오. 32 비트 실행 파일을 만들려면 -DBUILD_X64=FALSE
추가하십시오.
빌드 한 후, 기본 명령 줄 도구는 .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 리더는 가능한 모든 .exr 압축 모드를 지원하지 않는 TinyExr 's입니다. imagemagick과 같은 도구는 tinyexr가 읽을 수있는 .exr 파일을 만드는 데 사용될 수 있습니다.
대안 적으로, LDR 이미지 (예 : .png)는 -hdr
지정하여 UASTC HDR로 압축 될 수있다. 기본적으로 LDR 이미지는 UASTC HDR로 압축 될 때 압축 전에 SRGB에서 선형 표시등으로 먼저 변환됩니다. 이 변환 단계는 -hdr_ldr_no_srgb_to_linear
지정하여 비활성화 할 수 있습니다.
중요하게도, 최상의 품질을 얻으려면 원래의 압축되지 않은 소스 이미지를 기초에 공급 해야합니다. 기초 (ETC 1/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]에 이르기까지 ETC 1S 모드의 품질 대 파일 크기 트레이드 오프 레벨을 제어합니다. 255는 최고 품질이며 기본값은 128입니다.
-debug
인코더가 내부 및 개발자 지향적 인 장점 디버그 정보를 인쇄하게합니다.
-stats
(PSNR) 통계를 볼 수 있습니다.
-linear
: etc1s 기본값 SRGB Colorspace Metrics, UASTC LDR은 현재 항상 선형 메트릭을 사용하고 UASTC HDR 기본값은 가중 RGB 메트릭 (2,3,1 무게 포함)을 사용합니다. 입력이 일반 맵이거나 다른 유형의 비 SRGB (비 음성) 텍스처 내용 인 경우 불필요한 인공물을 피하기 위해 -linear
사용해야합니다. (UASTC LDR/HDR에 대한 각도 정상지도 메트릭은 확실히 가능하고 우리의 할 일 목록에 있습니다.)
-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 채널 용 필터 색상 공간 (선형 대 SRGB), 가장 작은 MIPMAP 치수 등이 있습니다.이 도구는 큐브 맵 파일 생성, 2D/CubEMap 텍스처 어레이 등을 지원합니다. 자동 MIPMAP 생성기를 사용하면 LDR 또는 HDR 압축되지 않은 .dds 텍스처 파일을 생성하여 압축기에 공급할 수 있습니다.
basisu -comp_level 2 x.png
일부 희귀 한 이미지 (Blue Sky Gradients가있는 것)에서는 1,6 세의 ETC1S -comp_level
설정을 늘려야 할 수도 있습니다. 이는 ETC 1S 코드북 및 압축 데이터 스트림을 최적화하기 위해 인코더가 사용하는 전반적인 노력의 양을 제어합니다. 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 또는.basis 파일을 여러 .png/.exr/.ktx/.dds 파일로 포장하려면 :
basisu x.ktx2
-no_ktx
및 -etc1_only
/ -format_only
옵션을 사용하여 더 적은 파일로 포장을 풀어주십시오.
-info
및 -validate
파일 정보를 표시하고 파일을 출력하지 않습니다.
작성된 mipmapp, cubemap 또는 텍스처 배열 .ktx/.dds 파일은 다양한 압축 GPU 텍스처 형식 (pvrtc1 4bpp 등, bc1-5, bc7 등)으로 이루어지며, 우리의 지식에 불행히도 (2024 년 기준) 여전히 우리가 지원하는 모든 GPU 텍스처 형식을 올바르게 지원하는 단일 .ktx 또는 .dds 뷰어 도구는 없습니다. BC1-5 및 BC7 파일은 Mali의 텍스처 압축 도구를 사용하여 AMD의 Compressonator 등을 사용하여 볼 수 있습니다. RenderDoc에는 여러 형식에 유용한 텍스처 파일 뷰어가 있습니다. Mac OSX Finder는 다양한 GPU 형식의 .exr 및 .ktx 파일 미리보기를 지원합니다. Windows 11 탐색기는 .dds 파일을 미리 볼 수 있습니다. 온라인 OpenHDR 뷰어는 .exr/.hdr 이미지 파일을 보는 데 유용합니다.
'WebGL'디렉토리에는 EMScripten과 함께 WASM으로 컴파일 된 트랜스 코더 및 압축기를 사용하는 4 개의 간단한 WebGL 데모가 포함되어 있습니다. 이 데모는 여기에서 온라인 상태입니다. readme 파일의 자세한 내용은 여기를 참조하십시오.
트랜스 코더와 인코더는 eMScripten을 사용하여 웹에 스크립 텐을 사용하여 웹에서 사용할 수 있습니다. 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
에는 웹 데모가 두 가지있어 웹 데모가 있으며 인코더와 트랜스 코더의 JavaScript Wrapper API를 사용하는 방법을 보여줍니다.
C ++ 인코더 및 트랜스 코더 라이브러리 API를 직접 호출하는 방법을 보여주는 간단한 예제는 example/examples.cpp
.
여기 위키를 참조하십시오.
VCPKG 종속성 관리자를 사용하여 기본 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입니다. 트랜스 코더는 없음 제 3 자 라이브러리 또는 종속성을 사용합니다. 라이센스를 참조하십시오.
인코더 라이브러리는 Apache 2.0이지만, 일부 오픈 소스 타사 모듈 ( 'encoder/3rdparty'및 'zstd'디렉토리에서)을 사용하여 .qoi, .dds, .exr 이미지를로드하여 zstd compression을 처리하고 ASTC 텍스처 블록을 포장 해제하십시오. 라이센스 및.리스 폴더를 참조하십시오.
리포지토리는 재사용 라이센스 검사 도구 (https://reuse.software/)를 준수하도록 업데이트되었습니다. .reuse
하위 디렉토리를 참조하십시오.
온라인 .exr HDR 이미지 파일 뷰어
Windows HDR + WCG 이미지 뷰어 - Windows 용 진정한 HDR 이미지 뷰어. Github Repo도 참조하십시오.
렌더링
AMD Compressonator
Microsoft의 DirectXTex
pvrtextool
말리 텍스처 압축 도구 - 이제 더 이상 사용되지 않았습니다
보다 유용한 링크, 논문 및 도구/라이브러리는 UASTC HDR 텍스처 사양의 끝을 참조하십시오.
이메일 : info @ binomial dot info, 또는 트위터로 문의하십시오.
스폰서 Wiki 페이지는 다음과 같습니다.