# Alpha blending

En infographie, la simulation de transparence ou alpha blending est une technique graphique consistant à ajouter de la transparence à des images en deux dimensions ou à des objets tridimensionnels. Les deux cas sont semblables étant donné qu'un objet 3D donné est souvent modélisé par des surfaces avec une image servant de texture.
La technique de simulation de transparence consiste à ajouter à chaque pixel une valeur, par exemple un octet (nombre de 0 à 255), définissant le caractère translucide de la surface et appelée canal alpha. Un objet est totalement opaque si la valeur alpha est au maximum (255 dans le cas d'un octet). Au contraire, il est invisible si cette valeur est à 0. Cette technique nécessite une forte puissance de calcul ou des fonctions spécifiques mises en œuvre par les processeurs des cartes graphiques modernes. Les jeux l'utilisent intensivement depuis quelques années.
Le concept de canal alpha a été introduit par A. R. Smith à la fin des années 1970 pour stocker des informations de masquage ; il a été décrit en détail dans un article de 1984 écrit par Thomas Porter et Tom Duff.

## Utilisations
### Objets tridimensionnels et alpha blending

Dans le cas des surfaces monochromes, elles peuvent être définies par :
* les coordonnées 3D des 3 points (on utilise généralement des triangles pour représenter tout objet)
* plus 3 octets pour exprimer la couleur RGB (Rouge Vert Bleu : couleur "vraie" 24 bits)
* un octet d'alpha blending.

### Alpha blending en infographie

En infographie, la simulation de transparence consiste à pouvoir combiner une image avec un arrière-plan, de façon à représenter une transparence partielle. Il est souvent indiqué de restituer des images en plusieurs passes, en combinant ensuite les multiples images 2D résultantes en une image finale, unique, selon un procédé dit de composition. La composition est par exemple utilisée de façon intensive lors de l'intégration d'éléments d'images dans une séquence en direct.
Pour combiner correctement ces éléments d'image, il faut associer et mémoriser un masque pour chaque élément. Ce masque contient les informations de recouvrement liées aux zones de l'image définies et aux zones vides.

## Mise en œuvre

Un pixel d'image 2D est traditionnellement représenté par 3 valeurs, une pour chaque composante RGB. Une valeur supplémentaire est stockée dans le canal alpha, par exemple selon une valeur entre 0 et 255 (entier 8 bits), entre 0.0 et 1.0 (nombre flottant). Dans le cas [0, 1], 0 correspond au transparent - aucune couverture, c'est-à-dire qu'aucune partie ne recouvre le pixel considéré - , et 1 à l'opaque - un objet recouvrant complètement le pixel.
Lorsqu'on utilise le canal alpha, on multiplie habituellement la valeur des composantes de couleur par la valeur alpha de chaque point, pour faire l'économie de multiplications lors des opérations de combinaison. Cette opération est connue sous le nom d''alpha prémultiplié. Ainsi, en supposant que la couleur est exprimée en quadruplets RGBA, on représente normalement un pixel vert vif avec une opacité de 50 % par les valeurs (0 ; 1 ; 0 ; 0,5) qui devient (0 ; 0,5 ; 0 ; 0,5). Dans une représentation RGB, le vert est simplement codé par (0 ; 1 ; 0). Dans une représentation alpha prémultiplié, chaque valeur RGB est (pré) multipliée par la composante alpha, ce qui donne dans l'exemple de alpha=0,5, (0 ; 0,5 ; 0). Le pré-calcul est préférable à la simulation de transparence classique, la simulation de transparence avec pré-calcul étant associative, et donnant de meilleurs résultats par interpolation linéaire.
Grâce à l'introduction du canal alpha, il est possible d'exprimer les opérations de combinaison d'images en utilisant une algèbre de composition. Par exemple, étant donné deux éléments graphiques A (carré bleu) et B (disque orange), l'opération de combinaison la plus courante consiste à combiner les images pour que A apparaisse en avant-plan, et B en arrière-plan. On peut exprimer cette opération comme A sur B.
Par exemple, étant donné deux éléments graphiques A et B, l'opération de composition la plus classique consiste à combiner les images de sorte que A apparaisse en avant-plan, et B en arrière-plan, ce qui peut être exprimé par 'A sur B' (A over B). En plus de l'opération 'sur', Porter et Duff ont défini les opérateurs 'dans' (in), 'tenu par' (held out by, habituellement abrégé en 'out'), 'au-dessus' (atop) et 'ou exclusif' (xor) (ainsi que les opérateurs inverses 'rover', 'rin', 'rout' et 'ratop' - la lettre 'r' signifiant 'inverse') à partir d'une considération de choix de mélanges des couleurs de deux pixels lorsqu’ils se recouvrent, conceptuellement, orthogonalement.

### Formule
#### Avec les valeurs RGB normales

L'opération A sur B est, en fait, l'opération de peinture normale (voir algorithme du peintre). L'opération 'dans' est l'équivalent du clipping en alpha blending.
Notation utilisée : $C_{a}$ est la couleur de l'élément A, $C_{b}$ est la couleur de l'élément B, et $\alpha _{a}$ et $\alpha _{b}$ sont les valeurs alpha.
L'opération 'sur' peut être réalisée en appliquant la formule suivante à chaque pixel. La valeur de couleur résultante est : $C_{o}={\frac {C_{a}\alpha _{a}+C_{b}\alpha _{b}\left(1-\alpha _{a}\right)}{\alpha _{a}+\alpha _{b}\left(1-\alpha _{a}\right)}}$
Et la valeur alpha résultante est : $\alpha _{o}=\alpha _{a}+\alpha _{b}\left(1-\alpha _{a}\right)$
La valeur de couleur résultante est donc : $C_{o}={\frac {C_{a}\alpha _{a}+C_{b}\alpha _{b}\left(1-\alpha _{a}\right)}{\alpha _{o}}}$

#### Avec les valeurs RGB prémultipliées par la valeur alpha

Dans ce cas, on utilise des valeurs de couleurs $c_{a}$ et $c_{b}$ définies par : $c_{a}=C_{a}\alpha _{a}$ et $c_{b}=C_{b}\alpha _{b}$
Le calcul de l'opération 'sur' devient plus simple. La valeur de couleur résultante est : $c_{o}=c_{a}+c_{b}\left(1-\alpha _{a}\right)$
La valeur alpha résultante est toujours : $\alpha _{o}=\alpha _{a}+\alpha _{b}\left(1-\alpha _{a}\right)$
On constate que la formule est alors identique pour une composante de couleur ou pour le canal alpha.

## Autres méthodes de transparence

Bien qu'utilisé pour des buts semblables, les couleurs transparentes et les masques ne permettent pas de faire un mélange progressif des images superposées. Il n'y a alors que deux possibilités : soit le pixel est remplacé, soit le fond est laissé tel quel.
Un effet similaire est obtenu en utilisant un canal alpha de 1 bit, comme on peut le trouver dans le mode RGB 16 bits des images TGA (Truevision TGA) et les modes graphiques des périphériques apparentés (TARGA et AT-Vista/NU-Vista). Ce mode utilise 5 bits pour chaque couleur primaire (15-bit RGB) et le bit restant comme "canal alpha".

## Systèmes fenêtrés et alpha blending

Microsoft Windows a intégré l'Alpha Blending pour le dessin des fenêtres (GDI) depuis Windows XP, mais les logiciels intégrés à Windows XP ne l'emploient pas, contrairement à ceux de Windows Vista.
L'alpha blending est géré nativement par les systèmes d'exploitation suivants :
* iOS
* OS X
* Windows 2000, XP, Server 2003, Windows CE, Vista et Windows 7
* L'extension XRender du système de fenêtrage X (utilisé notamment par les distributions GNU/Linux modernes)
* RISC OS Adjust
* QNX Neutrino
* Plan 9
* Inferno
* AmigaOS 4.1
* BeOS, ZETA and Haiku
* Syllable
* MorphOS