# Composição digital

Composição digital é o processo de juntar digitalmente múltiplas imagens para fazer uma imagem final, tipicamente para impressão, filmes ou exibição em tela. Isso é a evolução da composição tradicional. Exemplos de programas capazes de fazer composição digital:
* Adobe Photoshop
* Adobe After Effects
* Blender
* Gimp
* Jahshaka

## Matemática

A operação básica usada na composição digital é conhecida como mistura alfa, onde um valor de opacidade, 'α', é usado para controlar as proporções de dois valores de pixel de entrada que terminam em um único pixel de saída.
Como um exemplo simples, suponha que duas imagens do mesmo tamanho estejam disponíveis e elas devam ser compostas. As imagens de entrada são chamadas de imagem de primeiro plano e imagem de fundo. Cada imagem consiste no mesmo número de pixels. A composição é realizada combinando matematicamente as informações dos pixels correspondentes das duas imagens de entrada e registrando o resultado em uma terceira imagem, que é chamada de imagem composta.
Considere três pixels;
* um pixel de primeiro plano, f
* um pixel de fundo, b
* um adetpixel composto, c
e
* α, o valor de opacidade do pixel de primeiro plano. (α = 1 para um primeiro plano opaco, α = 0 para um primeiro plano completamente transparente). Uma imagem raster monocromática onde os valores de pixel devem ser interpretados como valores alfa é conhecida como fosca.
Então, considerando todos os três canais de cor, e assumindo que os canais de cor são expressos em um espaço de cor γ=1 (ou seja, os valores medidos são proporcionais à intensidade da luz), temos:
    c$_r$ = α f$_r$ + (1 − α) b$_r$
    c$_g$ = α f$_g$ + (1 − α) b$_g$
    c$_b$ = α f$_b$ + (1 − α) b$_b$
Observe que se as operações forem realizadas em um espaço de cores onde γ não é igual a 1, a operação levará a efeitos não-lineares que podem ser potencialmente vistos como artefatos de aliasing (ou "jaggies") ao longo de bordas afiadas no fosco. Mais geralmente, a composição não linear pode ter efeitos como "halos" em torno de objetos compostos, porque a influência do canal alfa é não-linear. É possível para um artista de composição compensar os efeitos da composição no espaço não-linear.
Executar a mistura alfa é uma operação cara se executada em uma imagem inteira ou cena 3D. Se essa operação tiver que ser feita em videogames em tempo real, há um truque fácil para aumentar o desempenho.
    c$_{out}$ = α f$_{in}$ + (1 − α) b$_{in}$
    c$_{out}$ = α f$_{in}$ + b$_{in}$ − α b$_{in}$
    c$_{out}$ = b$_{em}$ + α (f$_{em}$ − b$_{em}$)
Simplesmente reescrevendo a expressão matemática, pode-se economizar 50% das multiplicações necessárias.

### Propriedades algébricas

Quando muitas camadas parcialmente transparentes precisam ser compostas juntas, vale a pena considerar as propriedades algébricas dos operadores de composição usados. Especificamente, a associatividade e a comutatividade determinam quando o cálculo repetido pode ou não ser evitado.
Considere o caso quando temos quatro camadas para misturar para produzir a imagem final: F=A*(B*(C*D)) onde A, B, C, D são camadas de imagem parcialmente transparentes e "*" denota um operador de composição (com a camada esquerda no topo da camada direita). Se apenas a camada C mudar, devemos encontrar uma maneira de evitar a mistura novamente de todas as camadas ao calcular F. Sem considerações especiais, quatro misturas de imagens completas precisariam ocorrer. Para operadores de composição que são comutativos, como mistura de aditivos, é seguro reordenar as operações de mistura. Neste caso, podemos calcular T=A*(B*D) apenas uma vez e simplesmente misturar T*C para produzir F, uma única operação. Infelizmente, a maioria dos operadores não é comutativa. No entanto, muitos são associativos, sugerindo que é seguro reagrupar as operações para F=(A*B)*(C*D), ou seja, sem alterar sua ordem. Nesse caso, podemos calcular S:=A*B uma vez e salvar esse resultado. Para formar F com um operador associativo, precisamos apenas fazer duas operações de composição adicionais para integrar a nova camada S, computando F:=S*(C*D). Essa expressão indica compor C com todas as camadas abaixo dela em uma etapa e, em seguida, misturar todas as camadas sobre ela com o resultado anterior para produzir a imagem final na segunda etapa.
Se todas as camadas de uma imagem mudam regularmente, mas muitas camadas ainda precisam ser compostas (como na renderização distribuída), a comutatividade de um operador de composição ainda pode ser explorada para acelerar a computação por meio de paralelismo, mesmo quando não há ganho com a pré-computação. Novamente, considere a imagem F=A*(B*(C*D)). Cada operação de composição nessa expressão depende da próxima, levando à computação serial. No entanto, a associatividade pode nos permitir reescrever F=(A*B)*(C*D) onde há claramente duas operações que não dependem uma da outra que podem ser executadas em paralelo. Em geral, podemos construir uma árvore de operações de composição em pares com uma altura logarítmica no número de camadas.

## Software

O sistema de composição não linear mais significativo historicamente foi o Cineon, que operava em um espaço de cores logarítmico, que imita mais de perto a resposta à luz natural de emulsões de filme (o Sistema Cineon, fabricado pela Kodak, não está mais em produção). Devido às limitações de velocidade de processamento e memória, os artistas de composição geralmente não se davam ao luxo de fazer com que o sistema fizesse conversões intermediárias em espaço linear para as etapas de composição. Com o tempo, as limitações se tornaram muito menos significativas, e agora a maior parte da composição é feita em um espaço de cores linear, mesmo nos casos em que as imagens de origem estão em um espaço de cores logarítmico.
A composição geralmente também inclui dimensionamento, retoque e correção de cor de imagens.

### Composição baseada em nós e em camadas

Existem dois fluxos de trabalho de composição digital radicalmente diferentes: composição baseada em nós e composição baseada em camadas.
A composição baseada em nós representa um composto inteiro como um grafo acíclico direcionado, ligando objetos e efeitos de mídia em um mapa processual, estabelecendo intuitivamente a progressão da entrada de origem para a saída final, e é de fato a maneira como todos os aplicativos de composição lidam internamente com compósitos. Este tipo de interface de composição permite grande flexibilidade, incluindo a capacidade de modificar os parâmetros de uma etapa anterior de processamento de imagem "no contexto" (durante a visualização do composto final). Os pacotes de composição baseados em nó geralmente lidam mal com o keyframing e os efeitos de tempo, pois seu fluxo de trabalho não decorre diretamente de uma linha do tempo, assim como os pacotes de composição baseados em camadas. Os softwares que incorporam uma interface baseada em nós incluem Natron, Shake, Blender, Blackmagic Fusion e Nuke. Os nós são uma ótima maneira de organizar os efeitos em uma foto complexa, mantendo um controle sobre os detalhes menores.
A composição baseada em camadas representa cada objeto de mídia em uma composição como uma camada separada dentro de uma linha do tempo, cada uma com seus próprios limites de tempo, efeitos e quadros-chave. Todas as camadas são empilhadas, uma acima da outra, em qualquer ordem desejada; e a camada inferior é geralmente renderizada como uma base na imagem resultante, com cada camada superior sendo progressivamente renderizada sobre as camadas previamente compostas, movendo-se para cima até que todas as camadas tenham sido renderizadas no composto final. A composição baseada em camadas é muito adequada para efeitos 2D rápidos e 3D limitados, como em gráficos em movimento, mas torna-se incômoda para compósitos mais complexos que envolvem várias camadas. Uma solução parcial para isso é a capacidade de alguns programas de visualizar a ordem composta de elementos (como imagens, efeitos ou outros atributos) com um diagrama visual chamado fluxograma para aninhar composições, ou "comps", diretamente em outras composições, adicionando complexidade à ordem de renderização primeiro compondo camadas na composição inicial, depois combinando essa imagem resultante com as imagens em camadas da composição em andamento, e assim por diante.