Como computo com precisão a cobertura de curvas analíticas sobrepostas?


10

O antialiasing de formas 2D se resume a calcular a fração de um pixel que é coberto pela forma. Para formas simples sem sobreposição, isso não é muito difícil: recorte a forma contra o retângulo de pixels e calcule a área da forma resultante. Mas fica mais difícil se várias formas se sobrepuserem ao mesmo pixel. Simplesmente somar áreas pode fazer com que a cobertura calculada seja muito alta, se negligenciar a quantidade que uma forma cobre outra. Por exemplo, consulte a seção Limitações deste artigo sobre renderização de fontes . Você também pode estar em uma situação em que as duas curvas vêm de objetos diferentes com cores diferentes (portanto, não se trata da cobertura total para a união das duas formas, mas da cobertura de cada uma separadamente).

Como isso seria calculado se você se preocupasse com a precisão completa? Ainda mais complicado, como você calcula a cobertura com precisão para sobrepor formas não poligonais como curvas? Há algum momento em que você não tem escolha a não ser recorrer a técnicas multisampling ou estocásticas?

Respostas:


10

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

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

Cena analítica

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:

insira a descrição da imagem aqui

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.

Diga que não nos importamos muito com eficiência. Como faríamos os cálculos de cobertura para operações booleanas em formas? Isso é possível em geral ou apenas para formas específicas?
John Calsbeek

@JohnCalsbeek ok im começando a construir a resposta analítica, a sua vai demorar um pouco
joojaa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.