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]

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

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

Сравнение

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

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

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

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

Примеры

Предполагая, что цвет пикселя выражается с помощью прямых (не предварительно умноженных) кортежей RGBA , значение пикселя (0, 0,7, 0, 0,5) подразумевает пиксель, который имеет 70% максимальной интенсивности зеленого и 50% непрозрачности. Если бы цвет был полностью зеленым, его RGBA был бы (0, 1, 0, 0,5). [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). Знание того, использует ли файл прямую или предварительно умноженную альфа-канал, имеет важное значение для его правильной обработки или компоновки, поскольку требуются различные вычисления. [5]

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

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

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

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

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

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

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

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

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

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/ \гамма }}

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

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

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

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

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

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

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

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

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

Ссылки

  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. ^ abcdefgh "АЛЬФА-КОМПОЗИТИНГ – Animationmet". animationmet.com . Архивировано из оригинала 2019-09-25 . Получено 2019-09-25 .
  6. ^ "Альфа-смешивание: предварительное или нет". NVIDIA Developer . 31 января 2013 г. Однако кое-что интересное происходит, когда мы генерируем следующий уровень MIP-карты...
  7. ^ "TomF's Tech Blog - Он только притворяется вики". TomF's Tech Blog - Он только притворяется вики . Архивировано из оригинала 12 декабря 2017 года . Получено 8 мая 2018 года .
  8. ^ Требилко, Дамиан. "Слишком близко к вызову отрисовки (презентация о предварительно умноженной альфе)". GitHub . Переключившись в режим смешивания с предварительным умножением для всех эффектов частиц, можно сделать всю сцену одним вызовом отрисовки (предполагая атласирование/двумерный массив для текстур)... Еще один полезный трюк с предварительно умноженной альфой заключается в том, что если у вас есть перекрывающиеся текстуры, которые находятся в известных положениях, вы можете предварительно обработать их все до одной текстуры.
  9. ^ "Premultiplied alpha". Win2D для WinUI3 . Получено 30 июня 2023 г. Win2D использует прямую альфа-канал в своей поверхности API, но предварительно умноженную альфа-канал для внутренних операций рендеринга.
  10. ^ "Создание текстур". www.echos.ch . Получено 2023-05-25 .
  11. ^ "Расширенные форматы". 2016-03-04. Архивировано из оригинала 2016-03-04 . Получено 2023-05-25 .
  12. ^ Ламбрехт, Джордан (2022-12-31). "Список форматов видео/изображений, поддерживающих альфа-каналы". Pixel Bakery Design Studio . Получено 2023-05-25 .
  13. ^ "Final Cut Pro 6 - Broad Format Support". apple.com . Архивировано из оригинала 2011-06-08 . Получено 2024-08-13 .
  14. ^ Jie Dong (2010-06-19). "Первая встреча JCT-VC, Дрезден, Германия". H265.net . Получено 2024-08-13 .
  15. ^ Jie Dong (2008-07-01). "Текущее состояние H.265 (по состоянию на июль 2008 г.)". H265.net . Получено 2024-08-13 .
  16. ^ Юй Лю (2009-04-15). "Предварительные требования для NGVC". H265.net . Получено 2024-08-13 .
  17. ^ "Формат видео AV1 | Могу ли я использовать... Таблицы поддержки для HTML5, CSS3 и т. д.". caniuse.com . Получено 25.05.2023 .
  18. ^ "Цифровое аудиовещание (DAB); MOT SlideShow; Пользовательское приложение (pdf) Спецификация" (PDF) . ETSI . Получено 13 августа 2024 г. .
  19. ^ "SVG specification, "Color"". World Wide Web Consortium. 14 января 2003 г. Архивировано из оригинала 7 сентября 2009 г. Получено 13 августа 2024 г.
  20. ^ @chromium.org, de... (2022-08-24). "Поддержка декодирования JPEG XL (image/jxl) в режиме Blink (ошибка отслеживания)". bugs.chromium.org . Получено 2024-08-13 .
  21. Minute Physics (20 марта 2015 г.). «Computer Color is Broken». YouTube . Архивировано из оригинала 22.11.2021.
  22. ^ Новак, Джон (21 сентября 2016 г.). «Что каждый кодер должен знать о гамме».
  23. ^ «Гамма-коррекция против предварительно умноженных пикселей - Сорен Сандманн Педерсен» . ssp.impulsetrain.com .
  24. ^ МакГвайр, Морган; Бавойл, Луис (2013). «Взвешенная смешанная порядково-независимая прозрачность». Журнал компьютерных графических технологий . 2 (2): 122–141.

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