Композиція із прозорістю

Якщо прозорість використано у обох кадрах, які обробляє один з динамічних композиційних переходів Kdenlive, результат може бути дещо несподіваним для декого з користувачів. На щастя, речі не є аж такими загадковими, як здається. Отже, давайте зануримося у світ прозорості і переходів.

Переходи із прозорістю та динамічні переходи

Якщо йдеться про роботу із прозорістю, переходи у Kdenlive можна поділити на дві категорії:

  1. Афінні: використовують так званий оператор композиції згори.

  2. Композиція, Композиція і перетворення, Змішування (афінне) Cairo: натомість використовують оператор композиції над

Отже, що насправді означають усі ці atop і over? Розгляньмо результати застосування цих композиційних операторів до прикладу з типовими титрами та напівпрозорим тлом. Для простоти ми спочатку ігноруватимемо параметр Непрозорість вищезгаданих переходів, щоб спростити розуміння речей. Після того, як розберемося із цим кроком, ми, нарешті, поглянемо на те, як вкладається у загальну картину параметр непрозорості.

Афінне перетворення: композиція «згори»

affine-transition-atop

Результат композиції atop найпростіше пояснити, поглянувши на отримане: текст із найвищого кліпу титрів (частково) зникає на тих ділянках, де кліп-підкладка на середній доріжці є (напів) прозорим.

Кліп-шахівниця на нижній доріжці є лише ілюстративним, щоб краще бачити прозорі ділянки.

Будь ласка, зауважте, як поєднано два Афінних переходи. Спочатку, верхній афінний перехід поєднує кліп титрів із градієнтним тлом. Далі, нижній афінний перехід накладає результат на тло-шахівницю.

Alpha-Compositing-1

Як саме Афінне перетворення працює із прозорістю? Погляньмо на на цю створену вручну ілюстрацію, де ми маємо дві пікселі із певним рівнем непрозорості для кожного (значення α αA і αB). Важливо не плутати непрозорість пікселів із параметром непрозорості самих переходів.

Наш червоний піксель походить з кадру верхньої доріжки (B), а зелений піксель проринає з кадру нижньої доріжки (A). Значення α = 0 означає повністю прозорий піксель, а значення α = 1.0 (або 255) — повністю непрозорий піксель.

Тепер, Афінний перехід просто ігнорує дані прозорості з пікселя верхнього кадру (червоного).

Використано лише дані прозорості (зеленого кольору), які містяться у кадрах нижчої доріжки! Якщо визначати усе мовою математичних формул, α = αA

І це є поясненням того, чому у нашому прикладі вище текст титрів зникав на тих ділянках, де середній кліп був прозорим.

Композиція і Co: накладальна композиція

composite-transition-over

Знову ж таки, на базовому рівні ми використовуємо ту саму конфігурацію, що і раніше, але цього разу ми скористаємося переходом Композиція і перетворення замість Афінного переходу. Ми створимо ланцюжок переходів, як і раніше, тому нижній перехід працюватиме з результатом верхнього переходу.

Дивіться! Маємо інший результат! Результат застосування оператора over, ймовірно, більше відповідає очікуванням більшості користувачів. Тепер, верхній кліп титрів (вибачте) більше не обрізається.

Alpha-Compositing-2

Оскільки дія over дає результат, який більше відповідає очікуванням багатьох користувачів, як саме виконується у ньому обробка прозорості?

Простими словами: якщо ви намалюєте якийсь напівпрозорий піксель над іншим напівпрозорим пікселем, результат буде менш прозорим за обидва. Він буде навіть менш прозорим за піксель нижнього кадру. Це те, чого ви, ймовірно, очікуєте від малювання напівнепрозорою фарбою.

Цього разу результат обчислення прозорості для двох заданих пікселів з верхнього кадру (B) і нижнього кадру (A) більше враховує значення прозорості цих пікселів.

Знову ж таки, ми почали з прозорості пікселя нижнього кадру (зеленого) як основи. Але цього разу ми не можемо ігнорувати прозорість (червоного) пікселя верхнього кадру. Але просте додавання прозоростей обох пікселів не дасть притомних результатів — що означала б прозорість у 2.0 або 511?

Тому рівень прозорості червоного пікселя масштабовано: результат стискається до початкового діапазону 0-1.0 у доступний діапазон над рівнем прозорості зеленого пікселя. Рівень прозорості результату є сумою значення α зеленої основи плюс масштабоване значення α червоного пікселя. Пам’ятайте, ми начебто малюємо над нижнім кадром. Формальна формула: α = αA + αB (1-αA)

Параметр непрозорості переходу

У переходах динамічної композиції також передбачено параметр із назвою Непрозорість. Його досить просто переплутати із прозорістю пікселів, але це дещо інше. Параметр непрозорості застосовується лише до верхніх кадрів (B). Це тип головного керування… але як він працює?

Alpha-Compositing-3

Почнімо знову з Афінного переходу. Вище ми бачили, що афінне перетворення ігнорує рівень прозорості (червоних) пікселів верхнього кадру. І афінний перехід також ігнорує параметр Непрозорість при обчислення прозорості пікселів результату.

Замість цього, параметр «Непрозорість» впливає на обчислення кольору пікселя результату: це лінійна інтерполяція між кольором пікселя верхнього кадру (B) і кольором пікселя нижнього кадру (A). Параметр «Непрозорість» керує точкою злиття. Рівень непрозорості 0.0 дає колір пікселя нижнього кадру (B), рівень 1.0 — колір пікселя верхнього кадру (A). 0.5 — значення посередині між кольорами двох пікселів.

Резюме: у випадку Афінного перетворення, параметр «Непрозорість» впливає лише на змішування кольорів між пікселями верхнього кадру (B) і нижнього кадру (A).

Alpha-Compositing-4

Далі, погляньмо на інші переходи: Композиція і Co.

Якщо йдеться про змішування кольорів, застосовується та сама процедура, що і раніше для афінного переходу: параметр «Непрозорість» керує тим, яку частку кольору пікселя верхнього кадру (B) буде використано при змішуванні.

Але коли ми поглянемо на те, як обчислюється прозорість пікселя результату, буде помітною різниця. Раніше, рівень прозорості пікселя верхнього кадру (B) масштабувався у зворотній пропорції до рівня прозорості пікселя нижнього кадру (A). Тут параметр Непрозорість дає результати із використанням ще ширшого спектра значень: при обчисленнях масштабується і рівень непрозорості пікселя верхнього кадру (B). Будь ласка, ознайомтеся із ілюстрацією.

Як наслідок, параметр «Непрозорість» керує тим, скільки непрозорості пікселя верхнього кадру (B) буде взагалі застосовано. За його допомогою ви можете підсилити або притлумити верхній кадр.

Резюме: у випадку переходів Композиція (і Co), параметр «Непрозорість» впливає як на змішування кольорів пікселів верхнього кадру (B) і нижнього кадру (A), так і на рівень прозорості верхнього кадру (B).

Нотатки

Інформація для подальшого ознайомлення
  • Стаття у Вікіпедії щодо Alpha Compositing із посиланням на початкову статтю Портера Даффа у SIGGRAPH’84 — «Compositing Digital Images».

  • Доповідь на SVG Open 2015 paper Крейга Нортвея щодо «розуміння композитингу і розширень кольорів у SVG 1.2 за 30 хвилин!» — особливо таблиця операторів Портера Даффа у главі 6 із стовпчиком результатів обчислення прозорості.

Джерела

Початковий текст було подано користувачем TheDiveO до зниклого тепер блогу kdenlive.org. Для цієї документації його було запозичено з kdenlive.org, оновлено і адаптовано до загального стилю.