С развитием цифровых технологий растет потребность в эффективных методах хранения и обработки изображений с высоким качеством. Одной из наиболее сложных задач остаётся сжатие изображений с плавающей точкой, широко применяемых в кино, визуальных эффектах и компьютерной графике. Такие изображения часто содержат не только привычные каналы цвета RGB и альфу, но и многочисленные дополнительные слои с разными типами данных: Ambient Occlusion, глубина сцены, нормали, маски и многое другое. Это ставит разработчиков перед вызовом сохранить точность данных, обеспечив при этом максимально эффективное использование пространства хранения. В этой статье рассмотрены современные подходы и технологии, способные обеспечить качественное беспотерьное сжатие изображений с плавающей точкой, а также проведено сравнение их производительности и эффективности.
Одним из признанных стандартов в профессиональных сферах является формат OpenEXR, разработанный компанией Industrial Light & Magic в конце 1990-х годов. Этот формат с самого начала позиционировался как инструмент для работы с HDR-изображениями и сложными многоуровневыми данными в масштабах киноиндустрии. OpenEXR предлагает несколько режимов сжатия, включая традиционную ZIP-компрессию, которая является наиболее распространённой при работе с изображениями с плавающей точкой. Несмотря на появление новых форматов, ZIP-компрессия внутри OpenEXR продолжает оставаться стабильным и эффективным выбором, сочетая приемлемую степень сжатия с хорошей скоростью обработки данных. В последние годы активно развивается новая опция сжатия для OpenEXR под названием HTJ2K, основанная на формате High-Throughput JPEG 2000.
Данная технология обещает улучшение коэффициента сжатия по сравнению с ZIP, достигая несколько более высокой компактности файлов. Однако этот выигрыш сопровождается существенным снижением скорости как компрессии, так и декомпрессии, что снижает практическую привлекательность HTJ2K в рабочих процессах, где важна оперативность обработки изображений. Кроме того, на текущий момент HTJ2K хорошо оптимизирован для сжатия слоев с цветовыми данными, но не охватывает комплексно все многослойные изображения, что является важной проблемой для сложных сцен с десятками каналов. Другим широко обсуждаемым форматом является JPEG-XL – относительно новый стандарт, направленный на замену устаревших технологий JPEG и PNG с поддержкой как сжатия с потерями, так и беспотерьного. JPEG-XL проявляет хорошие результаты при работе с традиционными снимками и изображениями с высоким динамическим диапазоном, однако при работе с данными с плавающей точкой, особенно с несколькими слоями, он пока выглядит менее эффективным.
При сравнении с OpenEXR JPEG-XL демонстрирует большую степень сжатия при высоких уровнях усилия компрессии, но значительно уступает по скорости и производительности. Компрессия JPEG-XL в таких режимах становится на порядок медленнее, что создаёт ограничения при использовании в задачах, где важна скорость итогового результата. Технически JPEG-XL ориентирован преимущественно на обработку изображений, предназначенных для отображения, с упором на цветовые каналы и анимационные фреймы, а не на разнообразные каналы данных, которые характерны для многоцелевых форматов, используемых в производственных процессах визуальных эффектов. Более того, реализация JPEG-XL до сих пор имеет некоторые ограничения, например, невозможность полной обратно совместимой обработки специальных значений в формате с плавающей точкой, таких как NaN и бесконечности, что критично для многих профессиональных приложений. Интересным и малоизвестным подходом к сжатию изображений с плавающей точкой является использование технологии Mesh Optimizer.
Первоначально созданный для оптимизации 3D-мешей, Mesh Optimizer показывает впечатляющие результаты, когда применяется к image-данным. В сочетании с дополнительным компрессором Zstandard (zstd), Mesh Optimizer способен обеспечить степень сжатия, превышающую JPEG-XL, при значительно большей скорости как компрессии, так и декомпрессии. Эта техника основывается на продвинутых методах предсказания и делта-кодирования, что позволяет эффективно устранять избыточность данных без потери точности. Пользовательские реализации на базе Mesh Optimizer предлагают возможность разбивать изображения на небольшие блоки, позволяя параллельно обрабатывать участки и добиваться высокой производительности даже на многоядерных процессорах с большим объемом оперативной памяти. При этом достигается компромисс: высокая степень сжатия сочетается с минимальной задержкой при обработке, что Близко к идеалу для внутреннего использования на студиях и в сложных рабочих процессах.
Стоит отметить, что стандартные решения OpenEXR и JPEG-XL активно разрабатываются и совершенствуются сообществами и компаниями. Открытый характер проектов и наличие публичного исходного кода позволяет интегрировать новые методы и оптимизации. Так, внедрение HTJ2K в OpenEXR связано с использованием библиотеки OpenJPH, а коммерческие реализации (например, КПК из Kakadu) показывают значительный потенциал ускорения. Возможно, в будущем появятся гибридные методы, сочетающие преимущества разных подходов. Для специалистов и разработчиков, работающих с многоуровневыми изображениями, важно помнить о нескольких ключевых аспектах.
Прежде всего, необходимо учитывать специфику самих данных: количество каналов, типы значений (FP16, FP32), наличие смешанного формата. Кроме того, выбор алгоритма сжатия должен балансировать между потребностями в времени обработки и объемом итогового файла. При необходимости использовать изображения исключительно для визуализации, формат JPEG-XL может быть предпочтительным благодаря высокой степени сжатия. Если же нужно сохранить всю точность для последующей работы, лучшими вариантами остаются OpenEXR с ZIP или HTJ2K, а также пользовательские решения на базе Mesh Optimizer. Также имеет смысл обращать внимание на соотношение скорости сжатия и скорости декомпрессии.
В условиях производственных процессов важна быстрая обработка и возможность оперативного доступа к большим объемам данных без длительных простоев. Технологии, которые обеспечивают превосходную степень сжатия, но при этом требуют значительных ресурсов при декомпрессии, могут вызывать затруднения в реальных сценариях. Одним из важных аспектов является удобство интеграции и использование API. OpenEXR предлагает относительно простой для программиста интерфейс, значительно сокращая время разработки. В то время как работа с JPEG-XL требует значительно более сложных операций по организации данных, что отражается в большом объеме исходного кода и дополнительном времени на реализацию.
Подобное усложнение влияет на выбор технологий при разработке собственных приложений и инструментов. В заключение стоит отметить, что беспотерьное сжатие изображений с плавающей точкой остается активной областью исследований и инженерных разработок. С появлением новых требований к объёмам данных и скорости обработки будут появляться инновационные подходы и гибридные методы, способные повысить эффективность работы с такими изображениями. Важным фактором останется баланс между качеством, скоростью и размером файла, а также адаптивность к конкретным задачам и специфике данных. Для тех, кто заинтересован в экспериментальных методах, открыты исходные материалы и тестовые наборы данных, позволяющие сравнивать производительность и качество различных алгоритмов.
Изучение и тестирование различных решений поможет определить оптимальную стратегию для конкретных производственных нужд. Безупречное хранение и обработка изображений с плавающей точкой остаются залогом качества в кино, играх и визуальных эффектах, и развитие технологий в этой области несомненно продолжится в ближайшие годы.