miniatura|Uma imagem de espectro de cores com um canal alfa que diminui para zero em sua base, onde é mesclada com a cor de fundo.
Na computação gráfica, a composição alfa ou mesclagem alfa é o processo de combinar uma imagem com um fundo para criar a aparência de parcial ou total. É frequentemente útil renderizar elementos de imagem (pixels) em passagens ou camadas separadas e, em seguida, combinar as imagens 2D resultantes em uma única imagem final chamada . A composição é amplamente utilizada em cinema ao combinar elementos de imagens geradas por computador com filmagem ao vivo (também conhecida e chamada de "live-action"). A mesclagem alfa também é usada em gráficos 2D por computador para posicionar elementos de primeiro plano rasterizados sobre um fundo.
Para combinar corretamente os elementos das imagens, é necessário manter uma associada para cada elemento, além de sua cor. Essa camada matte contém informações de cobertura — a forma da geometria desenhada — permitindo distinguir entre partes da imagem onde algo foi desenhado e partes que estão vazias.
Embora a operação mais básica de combinar duas imagens seja sobrepor uma à outra, há várias operações, ou , que são utilizadas.
História O conceito de canal alfa foi introduzido por Alvy Ray Smith e Ed Catmull no final dos anos 1970 no . Bruce A. Wallace derivou o mesmo operador sobreposição baseado em um modelo físico de reflectância/transmitância em 1981. Um artigo de 1984 por e apresentou o alfa premultiplicado usando uma abordagem geométrica.
O uso do termo alfa é explicado por Smith da seguinte forma:"Nós o chamamos assim por causa da fórmula clássica de interpolação linear que usa a letra grega (alfa) para controlar a quantidade de interpolação entre, neste caso, duas imagens A e B".Ou seja, ao compor a imagem A sobre a imagem B, o valor de na fórmula é obtido diretamente do canal alfa de A.
Descrição Em uma imagem 2D, uma combinação de cores é armazenada para cada pixel, geralmente uma combinação de vermelho, verde e azul (RGB). Quando a composição alfa é utilizada, cada pixel tem um valor numérico adicional armazenado em seu canal alfa, com um valor variando de 0 a 1. Um valor de 0 significa que o pixel é completamente transparente e a cor do pixel subjacente será exibida. Um valor de 1 indica que o pixel é totalmente opaco.
Com a existência de um canal alfa, é possível expressar operações de composição de imagens usando uma álgebra de composição. Por exemplo, dadas duas imagens A e B, a operação de composição mais comum é combinar as imagens de modo que A apareça em primeiro plano e B no fundo. Isso pode ser expresso como A sobre B. Além de sobre, Porter e Duff definiram os operadores de composição dentro, excluído por (a expressão refere-se a e é geralmente abreviada como fora), acima, e xor (e os operadores reversos rsobre, rdentro, rfora, e racima) a partir de uma consideração de escolhas na mesclagem das cores de dois pixels quando sua cobertura é, conceitualmente, sobreposta ortogonalmente:
Imagem:Alpha compositing.svg
Como exemplo, o operador sobre pode ser realizado aplicando a seguinte fórmula a cada pixel:
Aqui, , e representam os componentes de cor dos pixels no resultado da operação "sobre", imagem A e imagem B, respectivamente, aplicados a cada canal de cor (vermelho/verde/azul) individualmente, enquanto , e são os valores alfa dos respectivos pixels.
O operador sobre é, na prática, a operação de pintura normal (veja algoritmo do pintor). Os operadores dentro e fora são equivalentes à na composição alfa. Esses dois utilizam apenas o canal alfa da segunda imagem e ignoram os componentes de cor. Além disso, o operador mais define a mesclagem aditiva.
Alfa direto versus premultiplicado Se um canal alfa é usado em uma imagem, há duas representações comuns disponíveis: alfa direto (não associado) e alfa premultiplicado (associado). Com alfa direto, os componentes RGB representam a cor do objeto ou pixel, desconsiderando sua opacidade. Este é o método implícito pelo operador sobre na seção anterior. Com alfa premultiplicado, os componentes RGB representam a emissão do objeto ou pixel, e o alfa representa a oclusão. O operador sobre então se torna:
Comparação A principal vantagem do alfa premultiplicado é que ele permite mesclagem, interpolação e corretas. A interpolação comum sem alfa premultiplicado leva a vazamentos de informações RGB de regiões totalmente transparentes (A=0), embora essas informações RGB sejam idealmente invisíveis. Ao interpolar ou filtrar imagens com bordas abruptas entre regiões transparentes e opacas, isso pode resultar em bordas de cores que não eram visíveis na imagem original. Erros também ocorrem em áreas de semitransparência porque os componentes RGB não são corretamente ponderados, dando um peso incorretamente alto à cor dos pixels mais transparentes (com menor alfa).
O alfa premultiplicado também pode ser usado para permitir regiões de mesclagem alfa regular (por exemplo, fumaça) e regiões com (por exemplo, efeitos de chama e brilho) codificados na mesma imagem. Isso é representado por uma tupla RGBA que expressa emissão sem oclusão, como (0.4, 0.3, 0.2, 0.0).
Outra vantagem do alfa premultiplicado é o desempenho; em certas situações, ele pode reduzir o número de operações de multiplicação (por exemplo, se a imagem for usada várias vezes durante a composição posterior). As operações de Porter-Duff têm uma forma simples apenas em alfa premultiplicado. Algumas pipelines de renderização expõem uma superfície de API de "alfa direto", mas as convertem em alfa premultiplicado para desempenho.
Uma desvantagem do alfa premultiplicado é que ele pode reduzir a precisão relativa disponível nos valores RGB ao usar representação inteira ou de ponto fixo para os componentes de cor. Isso pode causar uma perda perceptível de qualidade se as informações de cor forem posteriormente clareadas ou se o canal alfa for removido. Na prática, isso geralmente não é perceptível porque, durante operações de composição típicas, como sobre, a influência das informações de cor de baixa precisão em áreas de baixo alfa na imagem final (após a composição) é correspondentemente reduzida. Essa perda de precisão também torna as imagens premultiplicadas mais fáceis de comprimir usando certos esquemas de compressão, pois não registram as variações de cor escondidas em regiões transparentes e podem alocar menos bits para codificar áreas de baixo alfa. As mesmas "limitações" de profundidades de bits de quantização mais baixas, como 8 bits por canal, também estão presentes em imagens sem alfa, e esse argumento é problemático como resultado.
Exemplos Assumindo que a cor do pixel é expressa usando tuplas RGBA diretas (não premultiplicadas), um valor de pixel de (0, 0.7, 0, 0.5) implica um pixel com 70% da intensidade máxima de verde e 50% de opacidade. Se a cor fosse totalmente verde, sua RGBA seria (0, 1, 0, 0.5). No entanto, se esse pixel usar alfa premultiplicado, todos os valores RGB (0, 0.7, 0) são multiplicados, ou escalonados para oclusão, pelo valor alfa 0.5, que é anexado para produzir (0, 0.35, 0, 0.5). Nesse caso, o valor 0.35 para o canal G indica realmente 70% da intensidade de emissão verde (com 50% de oclusão). Uma emissão verde pura seria codificada como (0, 0.5, 0, 0.5). Saber se um arquivo usa alfa direto ou premultiplicado é essencial para processá-lo ou compô-lo corretamente, pois é necessário um cálculo diferente.
Emissão sem oclusão não pode ser representada em alfa direto. Não há conversão disponível nesse caso.
Formatos de imagem que suportam canais alfa Os formatos de imagem mais populares que suportam o canal alfa são PNG e TIFF. O GIF suporta canais alfa, mas é considerado ineficiente em termos de tamanho de arquivo. O suporte a canais alfa está presente em alguns codecs de vídeo, como Animation e Apple ProRes 4444 do formato QuickTime, ou no codec multifuncional Techsmith.
O formato de arquivo BMP geralmente não suporta esse canal; no entanto, em formatos diferentes, como 32-bit (888–8) ou 16-bit (444–4), é possível salvar o canal alfa, embora nem todos os sistemas ou programas consigam lê-lo: ele é explorado principalmente em alguns jogos ou aplicações específicas; programas específicos também foram criados para a criação desses BMPs.
Formato de Arquivo/Codec Profundidade Máxima Tipo Suporte em Navegadores Tipo de Mídia Notas Apple ProRes 4444 16-bit Nenhum Vídeo (.mov) ProRes é o sucessor do HEVC / h.265 10-bit Limitado a Safari Vídeo (.hevc) Sucessor planejado do H.264WebM (codec de vídeo VP8, VP9, ou AV1) 12-bit Todos os navegadores modernos Vídeo (.webm) Enquanto VP8/VP9 têm amplo suporte em navegadores modernos, AV1 ainda tem suporte limitado. Apenas navegadores baseados em Chromium exibem camadas alfa. 32-bit Nenhum Imagem (.exr) Possui a maior gama HDR. PNG 16-bit direto Todos os navegadores modernos Imagem (.png) APNG 24-bit direto Suporte moderado Imagem (.apng) Suporta animação. TIFF 32-bit ambos Nenhum Imagem (.tiff) GIF 8-bit Todos os navegadores modernos Imagem (.gif) Navegadores geralmente não suportam camadas alfa de GIF.SVG 32-bit direto Todos os navegadores modernos Imagem (.svg) Baseado em cores CSS. 32-bit ambos Suporte moderado Imagem (.jxl) Permite compressão com perdas e HDR.
Correção de gama miniatura|Mesclagem alfa, sem considerar a correção de gama
miniatura|Mesclagem alfa, considerando a correção de gama
Os valores RGB de imagens digitais típicas não correspondem diretamente às intensidades de luz física, mas são comprimidos por uma função de :
Essa transformação utiliza melhor o número limitado de bits na imagem codificada, escolhendo que corresponde melhor à percepção humana não linear de luminância.
Assim, programas de computador que lidam com tais imagens devem decodificar os valores RGB para um espaço linear (desfazendo a compressão de gama), mesclar as intensidades de luz linear e reaplicar a compressão de gama ao resultado:
Quando combinado com alfa premultiplicado, a premultiplicação é feita no espaço linear, antes da compressão de gama. Isso resulta na seguinte fórmula:
Note que o canal alfa pode ou não passar por correção de gama, mesmo quando os canais de cor passam.
Outros métodos de transparência Embora usados para propósitos semelhantes, cores transparentes e máscaras de imagem não permitem a mesclagem suave dos pixels da imagem sobreposta com os do fundo (apenas pixels inteiros da imagem ou do fundo são permitidos).
Um efeito semelhante pode ser alcançado com um canal alfa de 1 bit, como encontrado no modo de Highcolor RGBA de 16 bits do formato de arquivo de imagem Truevision TGA e nos modos gráficos de alta cor dos adaptadores de exibição TARGA e AT-Vista/NU-Vista. Esse modo dedica 5 bits para cada cor primária RGB () mais um bit restante como o "canal alfa".
Pontilhamento pode ser usado para simular oclusão parcial onde apenas alfa de 1 bit está disponível.
Para algumas aplicações, um único canal alfa não é suficiente: uma janela de vitral, por exemplo, requer um canal de transparência separado para cada canal RGB para modelar a transparência de vermelho, verde e azul separadamente. Mais canais alfa podem ser adicionados para aplicações de filtragem espectral de cores precisas.
Alguns métodos de substituem o operador sobre por uma aproximação comutativa.
Ver também
Bit blit Composição digital Máscara (computação) Chroma key PNG RGBA Paleta (computação) HTML5 video Truevision TGA
Referências
Ligações externas Composição de Imagens Digitais - Thomas Porter e Tom Duff (Artigo Original) Fundamentos de Composição de Imagens Entenda a Composição e Extensões de Cor no SVG 1.2 em 30 minutos! Matte Alfa e Premultiplicação Categoria:Algoritmos de computação gráfica Categoria:Computação gráfica Categoria:Processamento de imagem