Портативная система транскодирования текстуры LDR/HDR.
Основа Universal - это суперкомпрессированная система сжатой графической инфрагторной системы LDR/HDR от Binomial LLC, которая поддерживает два промежуточных формата файлов: открытый стандарт .ktx2 из группы Khronos и наш собственный формат файла .basis. Эти форматы файлов поддерживают быстрое транскодирование практически в любом формате текстуры сжатого графического процессора, выпущенного в прошлом ~ 25 лет.
Наша общая цель с этим проектом состоит в том, чтобы упростить кодирование и эффективное распределение портативной текстуры, изображения и текстур, изображений и текстур, таким образом, что совместимо с любым графическим процессором или рендерингом/графическим API.
Система поддерживает три режима: и т. Д., UASTC LDR и UASTC HDR. Энкодер C/C ++ и Transcoder Libirary могут быть составлены в собственный код или веб -ассемэмбиля, и все функции Encoder/Transcoder можно получить из JavaScript.
Выпуск заметок
Живые примеры Encoder/Transcoder Webgl
JavaScript API/WASM/Webgl Info
UASTC HDR Примеры изображения
И т. Д. и UASTC LDR могут быть транскодированы на:
Файлы HDR UASTC могут быть транскодированы на:
ETC1S: примерно 0,3-3BPP низкого и среднего качества суперкомпрессированный режим, основанный на подмножестве ETC1, называемого «etc1s». Этот режим поддерживает переменные качества в зависимости от уровня размера файла (например, JPEG), альфа-каналы, встроенное сжатие и массивы текстур, необязательно сжатые в виде видеопоследовательности с использованием блоков Skip (условное пополнение). Этот режим может быть быстро преобразован во все поддерживаемые форматы текстуры LDR.
UASTC LDR: 8 -бит/пиксельный режим высокого качества. UASTC LDR - это подмножество в 19 режиме стандартного формата текстуры ASTC LDR 4x4 (8BPP), но с пользовательским блочным форматом, содержащим подсказки для транскодирования. Транскодирование UASTC LDR в ASTC LDR и BC7 особенно быстрые и простые, потому что UASTC LDR является общим подмножеством BC7 и ASTC. Транскодер для других форматов текстур ускоряются несколькими специфичными для форматом битов подсказок, присутствующих в каждом блоке LDR UASTC.
Этот режим поддерживает дополнительную стадию пост-обработки оптимизированной дискуссии (RDO), которая устанавливает кодируемые данные текстуры LDR UASTC в файле .ktx2/.basis, чтобы его можно было более эффективно сжать LZ. Подробнее здесь.
Вот документ UASTC LDR.
Вот документ Speciation UASTC HDR и некоторые сжатые примеры изображения.
Обе файлы .BASIS и .KTX2 поддерживают уровни MIPMAP, массивы текстур, кубиков, массивы кубиков и видео текстур во всех трех режимах. Кроме того, файлы .BASIS поддерживают неравномерные текстурные массивы, где каждое изображение в файле может иметь различное разрешение или количество уровней MIPMAP.
В режиме ETC1S компрессор способен использовать корреляции цвета и рисунка во всех изображениях во всем файле, используя кодовые книги глобальной конечной точки/селектора, поэтому несколько изображений с MIPMAP могут быть эффективно сохранены в одном файле. Режим ETC1S также поддерживает короткие видео последовательности, с блоками Skip (условное пополнение), используемые для не отправки блоков, которые не изменились относительно предыдущего кадра.
Форматы изображений LDR, поддерживаемые для чтения, являются .png, .dds с Mipmaps, .tga, .qoi и .jpg. Форматы изображений HDR, поддерживаемые для чтения. Он может написать .basis, .ktx2, .dds, .ktx (v1), .astc, .out, .exr и .png файлы.
Система теперь поддерживает загрузку основных файлов 2D .DDS с дополнительными MIPMAP, но файл .DDS должен быть в одном из поддерживаемых непредубежденных форматов: 24BPP RGB, 32BPP RGBA/BGRA, полуполома RGBA или Float RGBA. Использование файлов .DDS позволяет пользователю точно управлять тем, как mipmaps генерируются до сжатия.
Библиотека кодирования и инструмент командной строки не имеет обязательных сторонних зависимостей, которые еще не находятся в самом репо. Транскодер представляет собой единый исходный файл .cpp (в transcoder/basisu_transcoder.cpp
), который не имеет сторонних зависимостей.
Мы строим и тестируем под:
Под Windows с Visual Studio вы можете использовать включенный файл basisu.sln
. В качестве альтернативы, вы можете использовать CMAKE для создания новых файлов решения/проекта.
Чтобы построить, сначала установите Cmake, затем:
cd build
cmake ..
make
Чтобы построить с помощью поддержки SSE 4.1 в системах x86/x64 (кодирование примерно на 15-30% быстрее), добавить -DSSE=TRUE
в командную строку Cmake. Добавить -DOPENCL=TRUE
, чтобы построить с (необязательную) поддержку OpenCl. Использовать -DCMAKE_BUILD_TYPE=Debug
для построения в отладке. Чтобы построить 32 -битные исполняемые файлы, добавьте -DBUILD_X64=FALSE
.
После построения инструмент «Нативная командная строка» bin/basisu
используемый для создания, проверки и транскодов/распаковки.
Инструмент командной строки включает в себя некоторые автоматические тесты кодирования/транскодирования LDR/HDR:
cd ../bin
basisu -test
basisu -test_hdr
Чтобы проверить кодек в режиме OpenCl (должны быть установлены OpenCl Libs/заголовки/драйверы и составляли поддержку OpenCl в выполнении Cmake с -DOPENCL=TRUE
):
basisu -test -opencl
basisu -q 255 x.png
basisu -linear x.png
basisu -uastc x.png
basisu x.exr
Обратите внимание на считывателя. Такие инструменты, как ImageMagick, можно использовать для создания файлов .exr, которые может читать TinyExr.
Альтернативно, изображения LDR (такие как .png) могут быть сжаты до UASTC HDR путем указания -hdr
. По умолчанию изображения LDR при сжатии в UASTC HDR сначала преобразуются из 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 диапазон от [1255], управляет уровнем качества режима и т. Д. И т. Д. В зависимости от уровня компромисса размера файла. 255 - самое высокое качество, а по умолчанию - 128.
-debug
заставляет энкодер печатать внутреннюю и ориентированную на разработчика информацию отладки.
-stats
чтобы увидеть различные статистики качества (PSNR).
-linear
: etc1s по умолчанию в метрики SRGB Colorspace, UASTC LDR в настоящее время всегда использует линейные метрики, а UASTC HDR по умолчанию на взвешенные метрики RGB (с 2,3,1 весом). Если вход является нормальной картой или каким-либо другим типом не-SRGB (нефотографического) содержимого текстуры, обязательно используйте -linear
, чтобы избежать дополнительных ненужных артефактов. (Угловые нормальные показатели карты для UASTC LDR/HDR определенно выполнены и в нашем списке TODO.)
Указание -opencl
включает режим 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 и т. Д. Автоматический генератор MIPMAP, вы можете создать Files LDR или HDR -несученные файлы текстуры .DDS и подавать их в компрессор.
basisu -comp_level 2 x.png
На некоторых редких изображениях (с градиентами с голубым небом приходят, вам может потребоваться увеличить настройку etc1s -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 files в данные текстуры GPU или несжатые данные изображения. Чтобы распаковать файл .ktx2 или.basis в несколько файлов .png/.exr/.ktx/.dds:
basisu x.ktx2
Используйте параметры -no_ktx
и -etc1_only
/ -format_only
чтобы распаковать до меньших файлов.
-info
и -validate
просто отображают информацию о файле и не выводят какие -либо файлы.
Письменные файлы Mipmaped, Cubemap или Texture. К сожалению (по состоянию на 2024 год) все еще нет единого инструмента просмотра .ktx или .dds, который правильно и надежно поддерживает каждый формат текстуры GPU, который мы поддерживаем. Файлы BC1-5 и BC7 можно просмотреть с использованием Compressonator AMD и т. Д. И т. Д. Использование инструмента сжатия текстуры Мали, а также PVRTC1 с использованием PVRTextOOL Imagination Tech. RenderDoc имеет полезный просмотр текстур для многих форматов. Mac OSX Finder поддерживает предварительный просмотр файлов .exr и .ktx в различных форматах GPU. Explorer Windows 11 может предварительно просмотреть файлы .dds. Онлайн -зритель OpenHDR полезен для просмотра файлов изображений .exr/.hdr.
Каталог «WebGL» содержит четыре простых демонстрации WebGL, которые используют транскодер и компрессор, скомпилированные в WASM с помощью Emscripten. Эти демонстрации здесь онлайн. Смотрите более подробную информацию в файле Readme здесь.
Как транскодер, так и энкодер могут быть скомпилированы с использованием emscripten для webassembly и используются в Интернете. Набор обертков JavaScript для кодека, написанный в C ++ с расширениями Emscripten, находится в webgl/transcoding/basis_wrappers.cpp
. Обертка JavaScript поддерживает почти все функции и режимы, включая видео текстуры. См. Файлы readme.md и cmakelists.txt в webgl/transcoder
и webgl/encoder
.
Чтобы построить транскодер WASM, после установки Emscripten:
cd webgl/transcoder/build
emcmake cmake ..
make
Чтобы построить энкодер WASM:
cd webgl/encoder/build
emcmake cmake ..
make
Существуют две простые демо -демоминты/транскодирования, расположенные в webgl/ktx2_encode_test
и webgl/texture_test
, которые показывают, как использовать API обертки Encoder и Trancoder.
Некоторые простые примеры, показывающие, как непосредственно вызвать API C ++ Encoder и Transcoder Library API, находятся в example/examples.cpp
.
Смотрите вики здесь.
Вы можете скачать и установить Base Universal, используя VCPKG Degy Deving Manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
Основа универсальный порт в VCPKG обновляется членами команды Microsoft и участниками сообщества. Если версия установлена на устаре, пожалуйста, создайте проблему или запрос на вытягивание в репозитории VCPKG. (10/10/2024: поддержка HDR UASTC здесь еще недоступна.)
Библиотеки Transcoder и Core Encoder являются Apache 2.0. Транскодер не использует сторонние библиотеки или зависимости. Смотрите лицензию.
Библиотека Encoder - Apache 2.0, но она использует некоторые 3 -й модули с открытым исходным кодом (в «Encoder/3 -й части распаковать блоки текстуры ASTC. Смотрите лицензии и.
Репозиторий был обновлен, чтобы соответствовать инструменту проверки лицензий повторного использования (https://reuse.software/). Смотрите .reuse
.
Онлайн.
Windows HDR + WCG Image Viewer - True HDR Viewer для Windows. Также см. Github Repo.
Renderdoc
AMD Compressonator
Microsoft DirectXtex
PVRTEXTOOL
Инструмент сжатия текстуры мали - теперь устарел
Для более полезных ссылок, документов и инструментов/библиотек см. Конец спецификации текстуры UASTC HDR.
Электронная почта: info @ binomial dot info или свяжитесь с нами в Twitter
Вот страница спонсоров вики.