Realmente não há uma boa maneira de fazer isso analiticamente de maneira eficiente em todos os casos de canto. A maioria ou todos os renderizadores 2D comerciais que tentam fazer o cálculo da cobertura analítica cometem erros previsíveis que os métodos de amostragem múltipla não.
Um problema típico são duas formas sobrepostas que compartilham a mesma aresta. A situação comum é que os canais alfa somam uma borda alfa muito grossa, que é um alias ligeiramente. Ou se as formas tiverem cores diferentes, o sistema confunde a cor do plano de fundo. Isso é extremamente irritante.
Imagem 1 : O mecanismo de renderização confunde a cobertura e faz um fino contorno branco onde nenhum contorno deve estar.
A segunda cobertura perfeita equivale a filtragem de caixa. Certamente podemos fazer melhor. Considerando que existem tantos casos de canto especiais que exigiriam operações booleanas nas formas para fazer o correto, a super amostragem ainda é superior. De fato, as estimativas de cobertura podem ser usadas para concentrar a amostragem onde é mais provável.
A situação poderia ser simplificada para polígonos em níveis abaixo dos pixels, e a solução analítica discreta poderia ser resolvida. Mas isso à custa da flexibilidade. Por exemplo, não está fora de questão que os sistemas vetoriais futuros desejem permitir linhas borradas de largura variável, o que representa um problema para soluções analíticas, assim como outros objetos de cores variadas.
Como fazer analiticamente
Imagem 2 : suponha que você tenha essa cena, vista explodida à direita
Agora você não pode fazer isso analiticamente, cada peça separadamente e depois mesclar os dados. Porque resulta em dados incorretos. Ver a mistura alfa deixaria o azul brilhar através das lacunas se você o fizesse.
O que você precisa fazer é dividir a cena para que cada forma elimine o que está embaixo da outra:
Imagem 3 : Você precisa cortar as superfícies subjacentes.
Agora, se tudo é opaco, tudo isso é direto. basta calcular a área de cada peça e multiplicar por cor e somar. Agora você pode usar algo parecido com isto .
Tudo isso se quebra se suas formas individuais não forem opacas, mas mesmo isso pode ser feito em algum nível.
Lembrar:
- O cálculo do AA precisa ser feito no espaço de cores linear e convertido novamente para usar o espaço.