stringtranslate.com

Альфа-композитинг

Изображение цветового спектра с альфа-каналом, спадающим до нуля у основания, где он смешивается с фоновым цветом.

В компьютерной графике альфа -композитинг или альфа-смешивание — это процесс объединения одного изображения с фоном для создания видимости частичной или полной прозрачности . [1] Часто бывает полезно визуализировать элементы изображения (пиксели) в отдельных проходах или слоях, а затем объединить полученные 2D-изображения в одно окончательное изображение, называемое композитом . Композитинг широко используется в кино при объединении элементов изображения, визуализированных на компьютере, с живыми кадрами . Альфа-смешивание также используется в 2D-компьютерной графике для помещения растрированных элементов переднего плана на фон.

Для того, чтобы правильно объединить элементы изображения, необходимо сохранить связанную маску для каждого элемента в дополнение к его цвету. Этот слой маски содержит информацию о покрытии — форму рисуемой геометрии — что позволяет различать части изображения, где что-то было нарисовано, и части, которые пусты.

Хотя самая простая операция объединения двух изображений — наложение одного на другое, существует множество операций, или режимов смешивания , которые используются.

История

Концепция альфа-канала была введена Элви Рэем Смитом и Эдом Кэтмеллом в конце 1970-х годов в Лаборатории компьютерной графики Нью-Йоркского технологического института . Брюс А. Уоллес вывел тот же прямой оператор на основе физической модели отражения / пропускания в 1981 году. [2] В статье 1984 года Томаса Портера и Тома Даффа была введена предварительно умноженная альфа с использованием геометрического подхода. [3]

Использование термина альфа Смит объясняет следующим образом: «Мы назвали его так из-за классической формулы линейной интерполяции , которая использует греческую букву (альфа) для управления величиной интерполяции между, в данном случае, двумя изображениями A и B». [4] То есть, при наложении изображения A на изображение B значение в формуле берется непосредственно из альфа-канала A.

Описание

В 2D-изображении для каждого элемента изображения (пикселя) сохраняется цветовая комбинация, часто представляющая собой комбинацию красного, зеленого и синего ( RGB ). При использовании альфа-композиции каждый пиксель имеет дополнительное числовое значение, хранящееся в его альфа-канале , со значением в диапазоне от 0 до 1. Значение 0 означает, что пиксель полностью прозрачен , и цвет в пикселе ниже будет виден. Значение 1 означает, что пиксель полностью непрозрачен.

При наличии альфа-канала можно выразить операции по компоновке изображений с помощью алгебры компоновки . Например, если заданы два изображения A и B , наиболее распространенной операцией компоновки является объединение изображений таким образом, чтобы A отображалось на переднем плане, а B — на заднем. Это можно выразить как A над B. В дополнение к over Портер и Дафф [3] определили операторы компоновки in , holdout by (фраза относится к выдержке и обычно сокращается как out ), atop и xor (и обратные операторы rover , rin , rout и ratop ) из рассмотрения вариантов смешивания цветов двух пикселей, когда их покрытие, концептуально, накладывается ортогонально:

Например, оператор over можно реализовать, применив следующую формулу к каждому пикселю: [2]

Здесь , и обозначают цветовые компоненты пикселей в результате «наложения» изображения A и изображения B соответственно, примененные к каждому цветовому каналу (красному/зеленому/синему) по отдельности, тогда как , и представляют собой альфа-значения соответствующих пикселей.

Оператор over , по сути, является обычной операцией рисования (см. алгоритм художника ). Операторы in и out являются эквивалентом альфа-композиции обрезки . Оба используют только альфа-канал второго изображения и игнорируют цветовые компоненты. Кроме того, plus определяет аддитивное смешивание. [3]

Прямое против предварительно умноженного

Если в изображении используется альфа-канал, доступны два распространенных представления: прямая (несвязанная) альфа и предварительно умноженная (связанная) альфа.

Сравнение

Самым значительным преимуществом предварительно умноженной альфы является то, что она позволяет выполнять правильное смешивание, интерполяцию и фильтрацию . Обычная интерполяция без предварительно умноженной альфы приводит к утечке информации RGB из полностью прозрачных (A=0) областей, даже если эта информация RGB идеально невидима. При интерполяции или фильтрации изображений с резкими границами между прозрачными и непрозрачными областями это может привести к границам цветов, которые не были видны в исходном изображении. Ошибки также возникают в областях полупрозрачности, поскольку компоненты RGB не взвешены правильно, давая неправильно высокий вес цвету более прозрачных (с более низкой альфой) пикселей. [5]

Предварительно умноженная альфа также может использоваться для кодирования областей обычного альфа-смешивания (например, дыма) и областей с аддитивным режимом смешивания (например, эффектов пламени и блеска) в одном и том же изображении. [6] [7] Это представлено триплетом RGBA, который выражает излучение без окклюзии, например (0,4, 0,3, 0,2, 0,0).

Другим преимуществом предварительно умноженной альфы является производительность; в определенных ситуациях она может сократить количество операций умножения (например, если изображение используется много раз во время последующего композитинга). Операции Портера–Даффа имеют простую форму только в предварительно умноженной альфе. [3] Некоторые конвейеры рендеринга предоставляют поверхность API «прямой альфы», но преобразуют их в предварительно умноженную альфу для производительности. [8]

Одним из недостатков предварительно умноженной альфы является то, что она может снизить доступную относительную точность значений RGB при использовании целочисленного или фиксированного представления для цветовых компонентов. Это может привести к заметной потере качества, если цветовая информация впоследствии будет осветлена или если альфа-канал будет удален. На практике это обычно не заметно, поскольку во время типичных операций композиции, таких как OVER, влияние цветовой информации низкой точности в областях с низкой альфой на конечное выходное изображение (после композиции) соответственно уменьшается. Эта потеря точности также упрощает сжатие предварительно умноженных изображений с использованием определенных схем сжатия, поскольку они не регистрируют цветовые вариации, скрытые внутри прозрачных областей, и могут выделять меньше бит для кодирования областей с низкой альфой. Те же «ограничения» более низкой битовой глубины квантования, такие как 8 бит на канал, присутствуют и в изображениях без альфы, и в результате этот аргумент является проблематичным.

Примеры

Если предположить, что цвет пикселя выражается с помощью прямых (не предварительно умноженных) кортежей RGBA , то значение пикселя (0, 0,7, 0, 0,5) подразумевает пиксель, который имеет 70% максимальной интенсивности зеленого и 50% непрозрачности. Если бы цвет был полностью зеленым, его RGBA был бы (0, 1, 0, 0,5). Однако, если этот пиксель использует предварительно умноженную альфу, все значения RGB (0, 0,7, 0) умножаются или масштабируются для окклюзии на значение альфа 0,5, которое добавляется для получения (0, 0,35, 0, 0,5). В этом случае значение 0,35 для канала G фактически указывает на 70% интенсивности зеленого излучения (с 50% окклюзией). Чистое зеленое излучение будет кодироваться как (0, 0,5, 0, 0,5). Знание того, использует ли файл прямую или предварительно умноженную альфа-канал, имеет важное значение для его правильной обработки или компоновки, поскольку требуются различные расчеты.

Эмиссия без окклюзии не может быть представлена ​​в прямом альфа-канале. В этом случае преобразование недоступно.

Форматы изображений, поддерживающие альфа-каналы

Наиболее популярными форматами изображений, поддерживающими альфа-канал, являются PNG и TIFF . GIF поддерживает альфа-каналы, но считается неэффективным с точки зрения размера файла. Поддержка альфа-каналов присутствует в некоторых видеокодеках, таких как Animation и Apple ProRes 4444 формата QuickTime, или в многоформатном кодеке Techsmith.

Формат файла BMP, как правило, не поддерживает этот канал; однако в различных форматах, таких как 32-битный (888–8) или 16-битный (444–4), возможно сохранение альфа-канала, хотя не все системы или программы способны его читать: он эксплуатируется в основном в некоторых видеоиграх [9] или отдельных приложениях; [10] также были созданы специальные программы для создания таких BMP.

Гамма-коррекция

Альфа-смешивание, без учета гамма-коррекции
Альфа-смешивание с учетом
гамма-коррекции

Значения RGB типичных цифровых изображений не соответствуют напрямую физической интенсивности света, а скорее сжимаются функцией гамма-коррекции :

Это преобразование позволяет более эффективно использовать ограниченное количество бит в закодированном изображении, выбирая тот вариант, который лучше соответствует нелинейному восприятию яркости человеком.

Соответственно, компьютерные программы, которые работают с такими изображениями, должны декодировать значения RGB в линейное пространство (отменяя гамма-сжатие), смешивать линейные интенсивности света и повторно применять гамма-сжатие к результату: [20] [21] [ проверка не удалась ]

C о знак равно ( C а γ α а + C б γ α б ( 1 - α а ) α о ) 1 / γ {\ displaystyle C_ {o} = \ left ({\ frac {C_ {a} ^ {\ gamma) }\alpha _{a}+C_{b}^{\gamma }\alpha _{b}(1-\alpha _{a})}{\alpha _{o}}}\right)^{1/\gamma }}

В сочетании с предварительно умноженной альфой предварительное умножение выполняется в линейном пространстве до гамма-сжатия. [22] Это приводит к следующей формуле:

Обратите внимание, что альфа-канал может подвергаться гамма-коррекции, а может и не подвергаться, даже если цветовые каналы подвергаются ей.

Другие методы прозрачности

Хотя прозрачные цвета и маски изображений используются для аналогичных целей, они не позволяют плавно смешивать наложенные пиксели изображения с пикселями фона (допускаются только целые пиксели изображения или целые пиксели фона).

Аналогичный эффект может быть достигнут с 1-битным альфа-каналом, как в 16-битном RGBA high color mode формата файла изображения Truevision TGA и связанном с ним TARGA и AT-Vista/NU-Vista графическом режиме high color. Этот режим выделяет 5 бит для каждого основного цвета RGB ( 15-битный RGB ) плюс оставшийся бит в качестве "альфа-канала".

Дизеринг можно использовать для имитации частичной окклюзии, когда доступен только 1-битный альфа-канал.

Для некоторых приложений одного альфа-канала недостаточно: например, витражное окно требует отдельного канала прозрачности для каждого канала RGB для моделирования прозрачности красного, зеленого и синего цветов по отдельности. Для точной спектральной цветовой фильтрации можно добавить больше альфа-каналов.

Некоторые методы прозрачности, не зависящие от порядка, заменяют оператор пересчета коммутативным приближением. [23]

Смотрите также

Ссылки

  1. ^ "Определение альфа-смешивания". PCMAG . Получено 2021-08-07 .
  2. ^ ab Wallace, Bruce A. (1981). "Объединение и преобразование растровых изображений для анимации мультфильмов" . Труды 8-й ежегодной конференции по компьютерной графике и интерактивным технологиям - SIGGRAPH '81 . Том 15. Нью-Йорк, Нью-Йорк: ACM Press. С. 253–262. CiteSeerX 10.1.1.141.7875 . doi : 10.1145/800224.806813 . ISBN  0-89791-045-1. S2CID  1147910.
  3. ^ abcde Портер, Томас ; Дафф, Том (июль 1984). "Композитинг цифровых изображений" (PDF) . Труды 11-й ежегодной конференции по компьютерной графике и интерактивным технологиям - SIGGRAPH '84 . Том 18. Нью-Йорк, Нью-Йорк: ACM Press. стр. 253–259. doi :10.1145/800031.808606. ISBN 9780897911382. S2CID  18663039. Архивировано (PDF) из оригинала 2011-04-29 . Получено 2019-03-11 .
  4. ^ Элви Рэй Смит (1995-08-15). «Альфа и история цифрового композитинга» (PDF) . alvyray.com . стр. 6. Архивировано из оригинала (PDF) 2021-10-25.
  5. ^ "Альфа-смешивание: предварительное или нет". NVIDIA Developer . 31 января 2013 г. Однако кое-что интересное происходит, когда мы генерируем следующий уровень MIP-карты...
  6. ^ "TomF's Tech Blog - Он только притворяется вики". TomF's Tech Blog - Он только притворяется вики . Архивировано из оригинала 12 декабря 2017 года . Получено 8 мая 2018 года .
  7. ^ Требилко, Дамиан. "Слишком близко к вызову отрисовки (презентация о предварительно умноженной альфе)". GitHub . Переключившись в режим смешивания с предварительным умножением для всех эффектов частиц, можно сделать всю сцену одним вызовом отрисовки (предполагая атласирование/двумерный массив для текстур)... Еще один полезный трюк с предварительно умноженной альфой заключается в том, что если у вас есть перекрывающиеся текстуры, которые находятся в известных положениях, вы можете предварительно обработать их все до одной текстуры.
  8. ^ "Premultiplied alpha". Win2D для WinUI3 . Получено 30 июня 2023 г. Win2D использует прямую альфа-канал в своей поверхности API, но предварительно умноженную альфа-канал для внутренних операций рендеринга.
  9. ^ "Создание текстур". www.echos.ch . Получено 2023-05-25 .
  10. ^ "Расширенные форматы". 2016-03-04. Архивировано из оригинала 2016-03-04 . Получено 2023-05-25 .
  11. ^ Ламбрехт, Джордан (2022-12-31). "Список форматов видео/изображений, поддерживающих альфа-каналы". Pixel Bakery Design Studio . Получено 2023-05-25 .
  12. ^ "Final Cut Pro 6 - Broad Format Support". apple.com . Архивировано из оригинала 2011-06-08 . Получено 2024-08-13 .
  13. ^ Jie Dong (2010-06-19). "Первая встреча JCT-VC, Дрезден, Германия". H265.net . Получено 2024-08-13 .
  14. ^ Jie Dong (2008-07-01). "Текущее состояние H.265 (по состоянию на июль 2008 г.)". H265.net . Получено 2024-08-13 .
  15. ^ Юй Лю (2009-04-15). "Предварительные требования для NGVC". H265.net . Получено 2024-08-13 .
  16. ^ "Формат видео AV1 | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 25.05.2023 .
  17. ^ "Цифровое аудиовещание (DAB); MOT SlideShow; Пользовательское приложение (pdf) Спецификация" (PDF) . ETSI . Получено 13 августа 2024 г. .
  18. ^ "SVG specification, "Color"". World Wide Web Consortium. 14 января 2003 г. Архивировано из оригинала 7 сентября 2009 г. Получено 13 августа 2024 г.
  19. ^ @chromium.org, de... (2022-08-24). "Поддержка декодирования JPEG XL (image/jxl) в режиме Blink (ошибка отслеживания)". bugs.chromium.org . Получено 2024-08-13 .
  20. Minute Physics (20 марта 2015 г.). «Computer Color is Broken». YouTube . Архивировано из оригинала 22.11.2021.
  21. ^ Новак, Джон (21 сентября 2016 г.). «Что каждый кодер должен знать о гамме».
  22. ^ «Гамма-коррекция против предварительно умноженных пикселей - Сорен Сандманн Педерсен» . ssp.impulsetrain.com .
  23. ^ МакГвайр, Морган; Бавойл, Луис (2013). «Взвешенная смешанная порядково-независимая прозрачность». Журнал компьютерных графических технологий . 2 (2): 122–141.

Внешние ссылки