Альфа-смешивание
Альфа-смешивание - это процесс объединения изображения с фоном для создания видимости частичной или полной прозрачности.
Формула смешивания#
Чтобы получить результирующий цвет путем альфа-смешивания, используется следующая формула:
ColorSrc соответствует цвету полигона (исходное изображение), а ColorDest соответствует цвету буфера экрана (целевое изображение). ColorRes - это результирующий цвет.
Если цвет имеет компонент Alpha, равный 0, он будет прозрачным. При значении Alpha 1 для создания цвета добавляются значения Red, Green и Blue. Для вычисления цвета в полупрозрачных областях используется линейная интерполяция.
Как и компонент Alpha, значения RGB также нормализуются.
Значения множителей Src и Dest#
Множители Src и Dest могут иметь следующие значения:
Name | Description |
---|---|
None | Смешивание не используется |
Zero | Компоненты RGBA соответствующего цвета умножаются на ноль |
One | Компоненты RGBA соответствующего цвета умножаются на единицу |
Src color | Компоненты RGBA соответствующего цвета умножаются на эти коэффициенты (для каждого компонента): (mR, mG, mB, mA) |
One minus src color | Компоненты RGBA соответствующих цветовых компонентов каждого цвета материала умножаются на эти коэффициенты (для каждого компонента): (1 - mR, 1 - mG, 1 - mB, 1 - mA) |
Src alpha | Компоненты RGBA соответствующего цвета умножаются на mA |
One minus src alpha | Компоненты RGBA соответствующего цвета умножаются на 1 - mA |
Dest color | Компоненты RGBA соответствующего цвета умножаются на эти коэффициенты (для каждого компонента): (bR, bG, bB, bA) |
One minus dest color | Компоненты RGBA соответствующего цвета умножаются на эти коэффициенты (для каждого компонента): (1 - bR, 1 - bG, 1 - bB, 1 - bA) |
Dest alpha | Компоненты RGBA соответствующего цвета умножаются на bA |
One minus dest alpha | Компоненты RGBA соответствующего цвета умножаются на 1 - bA |
Где mR, mG, mB, mA - нормализованные материальные значения красного, зеленого, синего и альфа соответственно; ( br) bR, bG, bB, bA - это нормализованные значения красного, зеленого, синего и альфа-фона. соответственно.
Возможные комбинации#
В зависимости от комбинации множителей Src и Dest достигаются следующие эффекты:
1#
Src = None
Dest = None
Означает, что для материала нет альфа-смешивания. Объект становится полностью непрозрачным.
2#
Src = One
Dest = One minus Src alpha
Результат: Альфа-смешивание
- Непрозрачные области (alpha = 1) получают цвет материала.
- Прозрачные области (alpha = 0) получают цвет буфера экрана.
Комбинация используется для создания эффекта прозрачности на основе альфа-компонента.
3#
Src = Src alpha
Dest = One minus Src alpha
Результат: Стандартное альфа-смешивание
- Непрозрачные области получают цвет материала, но они темнее и меньше по размеру, если сравнивать с предыдущим вариантом.
- Области затухания альфа-градиента затемнены.
- Прозрачные области получают цвет буфера экрана.
4#
Src = Src color
Dest = One minus Src alpha
Результат:
- Непрозрачные области также меньше и даже темнее и контрастнее по сравнению со вторым и третьим вариантами.
- Области затухания альфа-градиента затемнены.
- Прозрачные области получают цвет буфера экрана.
5#
Src = Src color
Dest = One minus Src color
Результат:
- Непрозрачные области небольшие и имеют перевернутый цвет.
- Области затухания альфа-градиента затемнены.
- Прозрачные области получают цвет буфера экрана.
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
6#
Src = Src alpha
Dest = One
Результат: добавление альфа-зависимого цвета
- В перекрывающихся непрозрачных областях цвет материала добавляется сам к себе. Эти районы очень малы по размеру.
- Прозрачные области получают цвет буфера экрана.
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
7#
Src = Src color
Dest = Dest alpha
Результат: почти такой же, как у предыдущего варианта, но немного менее яркий и менее четкий цвет материала
8#
Src = One
Dest = One
Результат: Добавление цвета
- В перекрывающихся непрозрачных областях цвет материала добавляется сам к себе.
- Области затухания альфа-градиента яркие и отчетливые.
- Прозрачные области получают цвет буфера экрана.
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
Эта комбинация может быть использована для создания ореола, систем частиц и объемного освещения. В этом режиме наложения, чем темнее цвет объекта, тем более прозрачным он визуализируется. При наложении большого количества слоев происходит наложение подсветки.
9#
Src = Zero
Dest = Src color
Src = Dest color
Dest = Zero
Результат (для обоих вариантов): Умножение
- Непрозрачные области получают цвет буфера экрана, умноженный на цвет материала.
- Прозрачные области черного цвета.
Если весь материал полупрозрачный, то эту комбинацию можно использовать для создания цветного стекла.
10#
Src = One minus Src color
Dest = Dest alpha
Результат:
- При небелом цвете полностью непрозрачная область кажется маленькой и получает перевернутый цвет. В области затухания альфа-градиента он меняется на суммированный цвет. Наложение слоев приводит к усилению цвета.
- Если цвет рассеянного материала белый, полностью непрозрачные области ядра получают цвет буфера экрана, который меняется на суммированный цвет по мере исчезновения альфа-градиента.
- Прозрачные области имеют цвет экранного буфера.
- Изменение множителя рассеянного цвета изменяет размер основных областей (размер кольца на рисунке).
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
11#
Src = One minus Src color
Dest = One minus Src color
Результат: аналогично предыдущей комбинации , со следующими исключениями:
- При небелом цвете полностью непрозрачная область, которая получает перевернутый цвет, кажется больше по размеру и темнее. В области затухания альфа-градиента цвет материала кажется тусклым, тусклым и едва заметным.
- Если цвет рассеянного материала белый, полностью непрозрачные области ядра получают черный цвет, который меняется на суммированный инвертированный цвет по мере исчезновения альфа-градиента.
И следующие характеристики остаются прежними:
- Прозрачные области имеют цвет экранного буфера.
- Изменение множителя рассеянного цвета изменяет размер основных областей (размер кольца на рисунке).
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
12#
Src = One minus Dest color
Dest = Dest Alpha
Результат:
- Непрозрачные области яркие и имеют рассеянный оттенок цвета материала.
- Чем темнее цвет буфера экрана, тем насыщеннее цвет материала.
- Прозрачные области имеют цвет экранного буфера.
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
13#
Src = One minus Dest color
Dest = One minus Src alpha
Результат:
- В перекрывающихся областях инверсия цвета буфера экрана становится все более заметной с увеличением количества слоев.
- Прозрачные области имеют цвет экранного буфера.
14#
Src = One minus Dest color
Dest = One minus Src color
Результат:
- В перекрывающихся областях цвет меняется с инвертированного на фоновый и обратно.
- Прозрачные области имеют цвет экранного буфера.
- Полностью черный рассеянный цвет материала приведет к рендерингу в цвете буфера экрана.
15#
Src = Dest color
Dest = Dest alpha
Результат:
- Эта комбинация больше подходит для материалов белого или ярких (ценных) рассеянных цветов. В противном случае оттенок цвета материала не будет виден.
- Прозрачные области имеют цвет экранного буфера.
16#
Src = Dest color
Dest = Dest color
Результат:
- Непрозрачные области получают суммарный цвет материала и буфера экрана.
- Прозрачные области имеют тот же цвет экрана — более темный и насыщенный.
- В перекрывающихся областях цвет материала как непрозрачных, так и прозрачных (в соответствии с альфа-компонентом) областей усиливается.