Альфа-композитинг
В компьютерной графике альфа -композитинг или альфа-смешивание — это процесс объединения одного изображения с фоном для создания видимости частичной или полной прозрачности . [ 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. Это Помимо Овера , Портер и Дафф [ 3 ] определил операторы композиции в , Holded by (эта фраза относится к матированию удержания и обычно сокращается out ), atop и xor (и обратные операторы rover , rin , rout и ratop ) из рассмотрения вариантов смешивания цветов двух пикселей, когда их покрытие концептуально наложено ортогонально:
Например, оператор over можно выполнить, применив к каждому пикселю следующую формулу: [ 2 ]
Здесь , и обозначают цветовые компоненты пикселей в результате «наложения» изображения A и изображения B соответственно, применяемые к каждому цветовому каналу (красному/зеленому/синему) индивидуально, тогда как , и являются альфа-значениями соответствующих пикселей.
Оператор over , по сути, является обычной операцией рисования (см. алгоритм Painter ). Операторы in и out являются эквивалентом обрезки для альфа-композиции . Оба используют только альфа-канал второго изображения и игнорируют компоненты цвета. Кроме того, плюс определяет аддитивное смешивание. [ 3 ]
Прямой или предварительно умноженный
[ редактировать ]Если в изображении используется альфа-канал, доступны два распространенных представления: прямая (несвязанная) альфа и предварительно умноженная (связанная) альфа.
- При использовании прямой альфа -компоненты RGB представляют цвет объекта или пикселя, независимо от его непрозрачности. Это метод, подразумеваемый оператором over в предыдущем разделе.
- При использовании предварительно умноженного альфа компоненты RGB представляют излучение объекта или пикселя, а альфа представляет собой окклюзию. Тогда оператор over становится: [ 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 ] Для создания этих БМП также созданы конкретные программы.
Формат файла/кодека [ 12 ] | Максимальная глубина | Тип | Поддержка браузера | Тип носителя | Примечания |
---|---|---|---|---|---|
Apple ProRes 4444 | 16-битный | Никто | Видео (.mov) | ||
HEVC /h.265 | 10-битный | Ограничено Safari | Видео (.hevc) | Предполагаемый преемник H.264 | |
WebM (видеокодек VP8, VP9 или AV1) | 12-битный | Все современные браузеры | Видео (.webm) | Хотя VP8/VP9 широко поддерживается современными браузерами, AV1 по-прежнему имеет ограниченную поддержку. [ 13 ] Только браузеры на базе Chromium отображают альфа-слои. | |
OpenEXR | 32-битный | Никто | Изображение (.exr) | Имеет самый большой разброс HDR. | |
PNG | 16-битный | прямой | Все современные браузеры | Изображение (.png) | |
АПНГ | 24-битный | прямой | Умеренная поддержка | Изображение (.apng) | Поддерживает анимацию. |
ТИФФ | 32-битный | оба | Никто | Изображение (.tiff) | |
гифка | 8-битный | Все современные браузеры | Изображение (.gif) | Браузеры обычно не поддерживают альфа-слои GIF. | |
SVG | 32-битный | прямой | Все современные браузеры | Изображение (.svg) | На основе цвета CSS. |
JPEG XL | 32-битный | оба | Умеренная поддержка | Изображение (.jxl) | Допускает качество с потерями и HDR. |
Гамма-коррекция
[ редактировать ]Значения RGB типичных цифровых изображений не соответствуют напрямую физической интенсивности света, а скорее сжимаются функцией гамма-коррекции :
Это преобразование лучше использует ограниченное количество битов в закодированном изображении, выбирая это лучше соответствует нелинейному человеческому восприятию яркости.
Соответственно, компьютерные программы, работающие с такими изображениями, должны декодировать значения RGB в линейное пространство (путем отмены гамма-сжатия), смешивать линейные интенсивности света и повторно применять гамма-сжатие к результату: [ 14 ] [ 15 ] [ не удалось пройти проверку ]
В сочетании с предварительно умноженным альфа предварительное умножение выполняется в линейном пространстве перед гамма-сжатием. [ 16 ] В результате получается следующая формула:
Обратите внимание, что альфа-канал может подвергаться гамма-коррекции, а может и не подвергаться ей, даже если это делают цветовые каналы.
Другие методы прозрачности
[ редактировать ]используются для аналогичных целей, Несмотря на то, что прозрачные цвета и маски изображений они не позволяют плавно смешивать наложенные пиксели изображения с пикселями фона (разрешены только пиксели всего изображения или пиксели всего фона).
Аналогичный эффект может быть достигнут с помощью 1-битного альфа-канала, как это происходит в 16-битном высокого цвета режиме Truevision TGA RGBA формата файла изображения и соответствующем графическом режиме TARGA и AT-Vista/NU-Vista видеоадаптеров. . ) выделяется 5 бит В этом режиме для каждого основного цвета RGB ( 15-битный RGB плюс оставшийся бит в качестве «альфа-канала».
Дизеринг можно использовать для имитации частичной окклюзии, когда доступна только 1-битная альфа.
Для некоторых приложений одного альфа-канала недостаточно: витража например, для требуется отдельный канал прозрачности для каждого канала RGB для отдельного моделирования красной, зеленой и синей прозрачности. Для обеспечения точной спектральной цветовой фильтрации можно добавить больше альфа-каналов.
Некоторые методы прозрачности, не зависящие от порядка, заменяют оператор over коммутативной аппроксимацией. [ 17 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Определение альфа-смешивания» . ПКМАГ . Проверено 7 августа 2021 г.
- ^ Перейти обратно: а б Уоллес, Брюс А. (1981). «Слияние и преобразование растровых изображений для мультипликационной анимации» . Материалы 8-й ежегодной конференции по компьютерной графике и интерактивным технологиям - SIGGRAPH '81 . Том. 15. Нью-Йорк, Нью-Йорк: ACM Press. стр. 253–262 . CiteSeerX 10.1.1.141.7875 . дои : 10.1145/800224.806813 . ISBN 0-89791-045-1 . S2CID 1147910 .
- ^ Перейти обратно: а б с д и Портер, Томас ; Дафф, Том (июль 1984 г.). «Композиция цифровых изображений» (PDF) . Материалы 11-й ежегодной конференции по компьютерной графике и интерактивным технологиям — SIGGRAPH '84 . Том. 18. Нью-Йорк, Нью-Йорк: ACM Press. стр. 253–259. дои : 10.1145/800031.808606 . ISBN 9780897911382 . S2CID 18663039 . Архивировано (PDF) из оригинала 29 апреля 2011 г. Проверено 11 марта 2019 г.
- ^ Элви Рэй Смит (15 августа 1995 г.). «Альфа и история цифровой композиции» (PDF) . alvyray.com . п. 6. Архивировано из оригинала (PDF) 25 октября 2021 г.
- ^ Перейти обратно: а б с д и ж г час «АЛЬФА-КОМПОЗИТИНГ – Анимациямет» . сайт анимацииmet.com . Архивировано из оригинала 25 сентября 2019 г. Проверено 25 сентября 2019 г.
- ^ «Альфа-смешение: предварительно или не предварительно» . Разработчик NVIDIA . 31 января 2013 г.
Однако кое-что интересное происходит, когда мы генерируем следующий уровень MIP-карты...
- ^ «Технический блог TomF — это всего лишь притворство вики» . Технический блог TomF — это всего лишь притворство вики . Архивировано из оригинала 12 декабря 2017 года . Проверено 8 мая 2018 г.
- ^ Требилько, Дамиан. «Закрыть призыв к розыгрышу (презентация по предварительно умноженной альфе)» . Гитхаб .
Переключившись в режим наложения с предварительным умножением для всех эффектов частиц, вся сцена может быть создана одним вызовом отрисовки (при условии, что для текстур используется атлас или 2D-массив)... Еще один хитрый трюк с предварительно умноженным альфа-каналом заключается в том, что если у вас есть перекрытие текстуры, находящиеся в известных позициях, вы можете предварительно обработать их все до одной текстуры.
- ^ «Предварительно умноженная альфа» . Win2D для WinUI3 . Проверено 30 июня 2023 г.
Win2D использует прямую альфу в интерфейсе API, но предварительно умноженную альфу для внутренних операций рендеринга.
- ^ «Создание текстур» . www.echos.ch . Проверено 25 мая 2023 г.
- ^ «Расширенные форматы» . 04.03.2016. Архивировано из оригинала 4 марта 2016 г. Проверено 25 мая 2023 г.
- ^ Ламбрехт, Иордания (31 декабря 2022 г.). «Список форматов видео/изображений, поддерживающих альфа-каналы» . Студия дизайна Pixel Bakery . Проверено 25 мая 2023 г.
- ^ «Видеоформат AV1 | Могу ли я использовать... Таблицы поддержки HTML5, CSS3 и т. д.» . caniuse.com . Проверено 25 мая 2023 г.
- ^ Минутка физики (20 марта 2015). «Цвет компьютера нарушен» . Ютуб . Архивировано из оригинала 22 ноября 2021 г.
- ^ Новак, Джон (21 сентября 2016 г.). «Что каждый программист должен знать о гамме» .
- ^ «Гамма-коррекция против предварительно умноженных пикселей - Сорен Сандманн Педерсен» . ssp.impulsetrain.com .
- ^ Макгуайр, Морган; Бавуаль, Луи (2013). «Взвешенная смешанная прозрачность, независимая от порядка» . Журнал методов компьютерной графики . 2 (2): 122–141.