O que é o processo de rasterização de vetores do Illustrator?

18

Atualmente, estou tentando entender algumas coisas sobre a rasterização de gráficos vetoriais e as diferentes maneiras como ela é implementada em vários tipos de aplicativos.

Testei e comparei alguns programas e notei que há uma grande diferença na maneira como o anti-aliasing se comporta no processo de rasterização. Estou especialmente interessado no comportamento de renderização no Illustrator . Você verá o porquê lendo mais.

Imagem base

Para os meus testes, usei uma composição muito simples de triângulos organizados em um hexágono irregular com cores diferentes.

Softwares de gráficos vetoriais

Aqui estão três renderizações do mesmo gráfico de vetor no Illustrator, Affinity e Inkscape. (A imagem produzida no Affinity e no Inkscape é exatamente a mesma.)

Imagens renderizadas em ferramentas populares de edição gráfica

Como você pode ver, há uma linha branca indesejada em cada uma das bordas da imagem renderizada com Affinity e Inkscape. O anti-aliasing não preenche essa área com uma cor sólida, o que resulta em um pequeno espaço entre as formas adjacentes.

Embora não haja espaço na renderização do Illustrator, as bordas das formas parecem tão suaves quanto a renderização de afinidade.

Aqui está uma imagem mostrando a mesma área de cada imagem aumentada.

Render Upscale mostrando anti-aliasing

Há uma diferença muito sutil entre as duas imagens. A renderização Affinity é um pouco mais suave, mas é quase impossível ver a diferença ao observar as imagens em seus tamanhos originais.

Navegadores

Renderização SVG

A exibição dos mesmos gráficos exportados como SVG em um navegador é muito semelhante à imagem rasterizada produzida pelo Affinity e pelo Inkscape.

Arquivo SVG renderizado no navegador

Existem diferenças muito pequenas no anti-aliasing de bordas (que não valem a pena mostrar aqui), mas a rasterização SVG em navegadores comuns se comporta da mesma maneira.

Renderização decomposta

Testando a renderização do Illustrator um pouco mais, tentei dividir partes dos meus gráficos e exportá-los individualmente e depois compor novamente com um software de edição raster.

Esquema de recomposição de imagem

Em teoria, isso resultaria na mesma imagem de uma peça única, mas o resultado é um pouco diferente usando esse método.

Resultado da imagem recomposta

Como mostrado, quando as duas partes são compostas, há um pequeno espaço entre elas. Embora seja mais sutil, é muito semelhante ao gráfico renderizado no Affinity.

Renderização de polígono

Blender (software 3D)

SVG na janela de exibição do Blender

O Blender permite importar arquivos SVG e manipulá-los como objetos de curva. Aqui está o gráfico importado mostrado na viewport 3D. (Por padrão, o material será afetado pelas luzes da cena. A verificação da propriedade sem sombra no painel de propriedades do material permitirá que as formas sejam renderizadas com suas cores originais.)

Aqui está uma renderização feita do SVG dentro do Blender.

Renderização real no Blender

Não existe nenhum espaço entre os triângulos. É provável que outros softwares 3D funcionem da mesma maneira. Então o Blender se comporta exatamente como o Illustrator , ou não? Talvez seja o contrário?

As verdadeiras perguntas

  • Qual biblioteca de desenhos vetoriais o Illustrator usa nos bastidores?
  • Será possível que o Illustrator faça uso de uma espécie de mecanismo de renderização em 3D? É de código aberto? (provavelmente não?)
  • Alguma das bibliotecas conhecidas de desenho vetorial, como Cairo e Skia, pode obter o mesmo comportamento de renderização? (Nenhuma diferença entre as formas)
  • Existe alguma biblioteca de desenho vetorial menos conhecida por aí que tenha o mesmo comportamento?
Geeyoam
fonte
4
Outros renderizadores comuns também têm esse problema de fusão. Veja w3.impa.br/~diego/projects/GanEtAl14/sample.html?contour .
Lhf 22/12

Respostas:

11

Tanto quanto eu posso dizer, o Illustrator tem 2 ou 3 rasterizadores diferentes. A visualização na tela também é propensa ao mesmo artefato de lacuna que o seu programa, embora esteja sintonizada para minimizar o efeito. Sua postagem parece indicar que você está interessado na saída " otimizada para arte ".

Arte otimizada versus visualização na tela do ilustrador

Imagem 1 : Os diferentes modos de renderização do illustrator. Arte otimizada à esquerda e sugerida à direita. Observe que a dica mostra um ligeiro fundo. Eu não tenho a nova versão CC, então não posso mostrar a terceira.

Como a arte otimizada funciona então

O modo de renderização otimizado para arte é simplesmente uma imagem sem suavização processada em resolução mais alta, que foi submetida a uma filtragem de caixa . Isso é chamado de super amostragem, que é caro. Um filtro de caixa é simplesmente o valor médio das amostras na caixa (pixel). Esta é realmente uma tecnologia semelhante à usada pelo filtro de vários pixels usado na renderização do seu liquidificador. Você pode fazer a mesma coisa manualmente e obter os mesmos resultados.

De fato, o renderizador que você obtém ilustrador de formulários não é realmente bom. É renderizado no espaço não linear e não corrigido, e você pode obter melhores resultados trocando para filtros de ordem superior e computando no espaço de cores linear. Todos os métodos de múltiplas amostras exibem a mesma renderização correta (dadas amostras suficientes, mesmo que matematicamente corretas).

insira a descrição da imagem aqui

Imagem 2 : Filtragem de vários pixels, no ilustrador esquerdo nativo 'Art Optimized'. À direita, a mesma imagem em 16x16 pixels com filtro Lanczos com vários lobos no espaço linear . Verifique se o zoom é 1: 1.

O problema

De fato, você se deparou com o problema real da geração atual de renderizadores na tela. Eles tentam evitar a amostragem múltipla a favor do cálculo da cobertura. Mas simplesmente não pode funcionar perfeitamente! Simplesmente porque a mistura alfa é:

c0 0=c1 1α+c2(1 1-α)

Quando encadeado nunca atinge 0 quando encadeado sobre superfícies semitransparentes, o plano de fundo mostra a calha. Além disso, ele não sabe como a cobertura é distribuída e, portanto, fará errado. Simplesmente não há maneira de contornar isso em um caso não sobreposto como esse. mas se você permitir que as formas se sobreponham, o cálculo da cobertura poderá ser resolvido (veja aqui ).

Outras perguntas Você pode obter o mesmo resultado em qualquer outro mecanismo simplesmente multisampling uma imagem sem antialias. Você não pode obter o efeito nas renderizações da tela sem fazer o truque de sobreposição, porque elas otimizam a velocidade. O ilustrador usa 3D? O novo CC pode depender da sua interpretação do que é 3D. Esse problema não tem nada a ver com o 3D apenas sobre os métodos de reconstrução de sinal, portanto não é aplicável à questão.

joojaa
fonte
11
BTW, para uma visão mais detalhada de por que a mistura alfa não "faz a coisa certa" em casos como este, confira este artigo: Interpretando Alpha por Andrew Glassner.
Re
@NathanReed Vai parecer thnx, mas aqui é simplesmente que, mesmo que o alfa funcionasse corretamente, a cobertura não saberia quais partes cobrem os pixels e quais não. Portanto, duas camadas com alfa de 50% podem significar totalmente opacas ou apenas uma camada visível porque os objetos preenchem uma região idêntica que simplesmente não sabemos.
Joojaa
2
@joojaa Sim, esse é basicamente o argumento do trabalho: o alfa pode representar opacidade, cobertura ou uma combinação de ambos. :)
Nathan Reed