Por que gráficos vetoriais 2D são muito mais complexos que 3D

Recentemente, muitas pesquisas fantásticas sobre renderização em 2D apareceram. Peter Kobalicek e Fabian Aizerman estão trabalhando no Blend2D : este é um dos rasterizadores de CPU mais rápidos e precisos do mercado, com a inovadora tecnologia JIT. Patz Walton, da Mozilla, estudou não uma, mas três abordagens diferentes no Pathfinder , culminando no Pathfinder v3. Raf Levien construiu o pipeline de computação usando a tecnologia descrita em um artigo científico de Gana com colegas sobre texturas vetoriais (2014) . Parece que algum desenvolvimento a distância é marcado por campos a distância: Adam Simmons e Sarah Frisken trabalham independentemente aqui.

Alguém pode perguntar: por que há tanto barulho em torno de 2D? Não pode ser muito mais difícil que o 3D, certo? 3D é uma dimensão completamente diferente! Aqui temos traçado de raios em tempo real no nariz com iluminação precisa e você não pode dominar gráficos 2D de aparência simples com cores sólidas?

Para quem não conhece muito bem os detalhes da GPU moderna, isso é realmente muito surpreendente! Mas os gráficos 2D têm muitas limitações únicas que tornam extremamente difícil. Além disso, não se presta à paralelização. Vamos dar um passeio pelo caminho histórico que nos trouxe aqui.

Decolagem PostScript


No começo havia um plotter. O primeiro dispositivo gráfico capaz de interagir com um computador foi chamado de “ plotadora ” (plotter): uma ou mais canetas que podem se mover pelo papel. Tudo funciona de acordo com o comando pen-down, então a cabeça de desenho se move de uma maneira única, possivelmente ao longo de uma curva, e o comando pen-up é recebido . A HP, fabricante de algumas das plotadoras mais antigas, usou uma variante BASIC chamada AGL no computador host, que depois enviou os comandos da plotadora em outro idioma, como o HP-GL . Na década de 1970, os terminais gráficos se tornaram mais baratos e populares, começando com o Tektronix 4010 . Ele mostrou a imagem usando um CRT, mas não se engane: isso não é uma exibição de pixel. A Tektronix veio da indústria de osciloscópios analógicos e essas máquinas funcionam controlando o feixe de elétrons por um caminho específico . Assim, o Tektronix 4010 não possui saída de pixels. Em vez disso, você enviou comandos para ele no modo gráfico simples , que podia desenhar linhas, mas, novamente, no modo "penugem", "penugem".

Como em muitas outras áreas, tudo mudou a invenção do Xerox PARC. Os pesquisadores começaram a desenvolver um novo tipo de impressora, mais expressivo em termos computacionais que um plotador. Esta nova impressora trabalhava em uma pequena linguagem de programação empilhada completa de Turing, semelhante à Forth, e era chamada ... Interpress ! Obviamente, a Xerox não conseguiu encontrar uma aplicação válida para isso, então os inventores deixaram o navio e fundaram uma pequena startup chamada Adobe. Eles levaram o Interpress com eles e, conforme foram corrigidos e aprimorados, ele mudou além do reconhecimento, e deram outro nome a ele: PostScript. Além da doce e completa linguagem de pilha, o quarto capítulo da PostScript Language Reference original descreve o Imaging Model, que é quase idêntico às interfaces de programação modernas. O exemplo 4.1 do manual contém código de amostra que pode ser traduzido quase linha por linha no HTML5 <canvas>.

/box { function box() { newpath ctx.beginPath(); 0 0 moveto ctx.moveTo(0, 0); 0 1 lineto ctx.lineTo(0, 1); 1 1 lineto ctx.lineTo(1, 1); 1 0 lineto ctx.lineTo(1, 0); closepath ctx.closePath(); } def } gsave ctx.save(); 72 72 scale ctx.scale(72, 72); box fill box(); ctx.fill(); 2 2 translate ctx.translate(2, 2); box fill box(); ctx.fill(); grestore ctx.restore(); 

Isto não é uma coincidência.

Steve Jobs, da Apple, se encontrou com os engenheiros da Interpress durante sua visita ao PARC. Jobs pensou que o negócio de impressão seria lucrativo e tentou comprar a Adobe no nascimento. Mas a Adobe apresentou uma contraproposta e acabou vendendo à Apple uma licença PostScript de cinco anos. O terceiro pilar do plano de Jobs era financiar uma pequena startup, Aldus, que fez um aplicativo WYSIWYG para criar documentos PostScript. Foi chamado de PageMaker. No início de 1985, a Apple lançou a primeira impressora compatível com PostScript, a Apple LaserWriter. A combinação de Macintosh, PageMaker e LaserWriter instantaneamente virou a indústria de impressão de cabeça para baixo, e o novo hit "editoração eletrônica" fortaleceu o PostScript para seu lugar na história. O principal concorrente da Hewlett-Packard também adquiriu uma licença PostScript para sua série de impressoras rivais LaserJet. Isso aconteceu em 1991, após pressão dos consumidores.

O PostScript passou lentamente de uma linguagem de controle de impressora para um formato de arquivo. Programadores inteligentes aprenderam como os comandos PostScript são enviados para a impressora - e começaram a criar documentos PostScript manualmente adicionando tabelas, gráficos e desenhos a seus documentos, enquanto o PostScript era usado para exibir gráficos. Há uma demanda por gráficos fora da impressora! A Adobe percebeu isso e lançou rapidamente o formato PostScript encapsulado , que não passava de alguns comentários PostScript especialmente formatados com metadados sobre o tamanho da imagem e restrições no uso de comandos da impressora, como “feed de página”. No mesmo ano de 1985, a Adobe começou a desenvolver o Illustrator, um aplicativo em que os artistas trabalhavam no formato PostScript encapsulado em uma interface conveniente. Em seguida, esses arquivos podem ser transferidos para um processador de texto que criou ... documentos PostScript para enviar para impressoras PostScript. O mundo inteiro mudou para PostScript, e a Adobe não poderia estar mais feliz. Quando a Microsoft estava trabalhando no Windows 1.0 e queria criar sua própria API gráfica para desenvolvedores, o objetivo principal era torná-la compatível com as impressoras existentes, para que os gráficos enviados às impressoras fossem tão fáceis quanto uma tela. Essa API acabou sendo lançada como GDI , o principal componente usado por todos os engenheiros durante a crescente popularidade do Windows nos anos 90. Gerações de programadores do Windows começaram a identificar, sem saber, gráficos vetoriais 2D com o modelo de imagem PostScript, protegendo-o com esse status de fato.

O único grande problema do PostScript era a sua integridade: visualizar a 86ª página de um documento significa executar primeiro o script para as páginas 1-85. E isso pode ser lento. A Adobe descobriu essa reclamação por parte dos usuários e decidiu criar um novo formato de documento que não continha essas restrições, chamado de "Portable Document Format" ou, resumidamente, "PDF". A linguagem de programação foi descartada, mas a tecnologia gráfica permaneceu a mesma. Cite as especificações em PDF, capítulo 2.1, “Modelo de imagem” :

O PDF baseia-se em sua capacidade de descrever a aparência de gráficos e tipografia complexos. Esse recurso é obtido com o uso do modelo de imagem da Adobe, a mesma apresentação de alto nível e independente de dispositivo usada na linguagem de descrição da página PostScript.

Quando o consórcio W3C considerou candidatos à linguagem de marcação de gráficos 2D na Internet, a Adobe defendeu o PGML baseado em XML , baseado no modelo de gráficos PostScript:

O PGML deve incluir um modelo de imagem PDF / PostScript para garantir gráficos 2D escalonáveis ​​que atendam às necessidades de usuários gerais e profissionais de gráficos.

O formato VML concorrente da Microsoft era baseado em GDI, que sabemos que é baseado em PostScript. As duas propostas concorrentes, que ainda eram essencialmente PostScript, se fundiram para que o W3C adotasse o padrão "gráficos vetoriais escaláveis" (SVG) que conhecemos e amamos atualmente.

Mesmo que ele seja velho, não vamos fingir que as inovações em PostScript trazidas a este mundo são nada menos que um milagre tecnológico. A impressora LaserWriter PostScript da Apple era duas vezes mais poderosa que o Macintosh que a controlava, apenas para interpretar PostScript e rasterizar caminhos vetoriais para pontos no papel. Isso pode parecer excessivo, mas se você já comprou uma impressora da moda com um laser interno, não deve se surpreender com um processador caro. Em sua primeira encarnação, o PostScript inventou um modelo de visualização bastante sofisticado, com todos os recursos que hoje temos como garantidos. Qual é o recurso mais poderoso e impressionante? Fontes Naquela época, as fontes eram desenhadas à mão com uma régua e um transferidor e moldadas em filme para impressão fotoquímica . Em 1977, Donald Knut mostrou ao mundo do que seu sistema METAFONT era capaz, que ele introduziu com o editor de texto TeX, mas não criou raízes. Exigia que o usuário tivesse uma descrição matemática das fontes usando pincéis e curvas. A maioria dos desenvolvedores de fontes não queria aprender isso. E curvas bizarras com tamanhos pequenos se transformaram em uma bagunça: as impressoras da época não tinham resolução suficiente, então as letras ficaram borradas e se fundiram. O PostScript propôs uma nova solução: um algoritmo para "vincular" contornos a grades mais grossas usadas pelas impressoras. Isso é conhecido como ajuste de grade. Para evitar muita distorção da geometria, eles permitiram que as fontes definissem "dicas" sobre quais partes da geometria são mais importantes e o que deve ser preservado.

O modelo de negócios original da Adobe era vender essa tecnologia de fonte para desenvolvedores de impressoras e vender fontes especiais recriadas por editores com dicas adicionais, para que a Adobe ainda venda suas versões do Times e Futura . A propósito, isso é possível porque as fontes, ou, mais formalmente, os "fones de ouvido", são uma das cinco coisas explicitamente excluídas da lei de direitos autorais dos EUA , uma vez que foram originalmente designadas como "muito simples ou utilitárias para ser um trabalho criativo". Em vez disso, um programa digital que reproduz a fonte na tela é protegido por direitos autorais. Para que as pessoas não pudessem copiar fontes da Adobe e adicionar suas próprias, o formato de fonte Tipo 1 pertencia originalmente à Adobe e continha o código para "criptografia de fonte". Somente o PostScript da Adobe podia interpretar fontes Tipo 1, e somente eles implementaram a tecnologia de dica proprietária que fornece nitidez em tamanhos pequenos.

O ajuste de malha, a propósito, se tornou tão popular que, quando a Microsoft e a Apple estavam cansadas de pagar as taxas de licença da Adobe, inventaram um método alternativo para o formato de fonte TrueType alternativo. Em vez de especificar “dicas” declarativas, o TrueType fornece ao autor da fonte uma linguagem de pilha completa e completa para que o autor possa controlar todos os aspectos do ajuste da grade (evitando as patentes da Adobe para dicas declarativas). Durante anos, houve uma guerra entre o Adobe Type 1 e o TrueType, e os desenvolvedores de fontes estão no meio, dando aos usuários os dois formatos. No final, o setor chegou a um compromisso: OpenType . Mas, em vez de determinar realisticamente o vencedor, eles simplesmente alteraram as duas especificações em um formato de arquivo. A Adobe agora ganhou dinheiro não com a venda de fontes Tipo 1, mas com o Photoshop e o Illustrator, removendo a parte de criptografia, refinando o formato e introduzindo fontes CFF / Tipo 2, todas incluídas no OpenType como uma tabela cff . O TrueType, por outro lado, foi inserido como glyf e outras tabelas. Embora um pouco feio, o OpenType parecia fazer o trabalho para os usuários, principalmente os que estavam passando fome: basta exigir todo o software para suportar os dois tipos de fontes, porque o OpenType exige que você suporte os dois tipos de fontes.

Obviamente, somos obrigados a perguntar: se não PostScript, o que está em seu lugar? Vale a pena considerar outras opções. O METAFONT mencionado anteriormente não utilizava caminhos de estrutura de tópicos estritamente definidos (caminhos preenchidos). Em vez disso, Knut, de uma maneira típica, em seu artigo "Tipografia matemática" propôs um conceito matemático para tipografia, que é "o mais agradável". Você especifica vários pontos, e algum algoritmo encontra através deles a curva "mais agradável" correta. Você pode sobrepor esses contornos um sobre o outro: defina um deles como uma “pena” e depois “arraste uma pena” por outra linha. Knut, no fundo, um cientista da computação, até introduziu recursão. Seu aluno John Hobby desenvolveu e implementou algoritmos para calcular a “curva mais agradável” , sobrepondo caminhos aninhados e rasterizando essas curvas . Para obter informações adicionais sobre o METAFONT, curvas e a história da tipografia em geral, recomendo o livro Fontes e codificações , além de artigos de John Hobby .

Felizmente, o interesse renovado na pesquisa de gráficos 2D significou que as splines de Knut e Hobby não foram completamente esquecidas. Embora eles sejam definitivamente obscuros e não convencionais, eles recentemente foram para o Apple iWork Suite e são o tipo de spline padrão lá.

Tire triângulos


Sem ir muito longe na selva matemática, em um nível alto, chamamos abordagens como curvas de Bezier e Hobby splines curvas implícitas , porque elas são indicadas como uma função matemática que gera uma curva. Eles ficam bem em qualquer resolução, o que é ótimo para imagens 2D projetadas para dimensionamento.

Os gráficos 2D suportaram o momento em torno dessas curvas implícitas, que são quase obrigatórias na modelagem de glifos. O hardware e o software para calcular esses caminhos em tempo real eram caros, mas houve um grande impulso da indústria de impressão para gráficos vetoriais, e a maior parte do restante do equipamento industrial existente já era muito mais caro do que uma impressora a laser com um processador sofisticado.

No entanto, os gráficos 3D seguiram uma rota completamente diferente. Desde o início, uma abordagem quase universal foi o uso de polígonos (polígonos), que eram frequentemente rotulados manualmente e inseridos manualmente no computador . No entanto, essa abordagem não era universal. O equivalente 3D de uma curva implícita é uma superfície implícita composta de primitivas geométricas básicas, como esferas, cilindros e cubos. Uma esfera ideal com resolução infinita pode ser representada por uma equação simples; portanto, no início do desenvolvimento do 3D para geometria, era claramente preferível aos polígonos . Uma das poucas empresas que projetaram gráficos com superfícies implícitas foi a MAGI . Combinados com o uso artístico inteligente de texturas processuais, eles ganharam um contrato de design de bicicletas leves da Disney para o filme Tron de 1982. Infelizmente, essa abordagem rapidamente não deu em nada. Graças à aceleração da CPU e ao estudo de problemas como “remover a superfície oculta”, o número de triângulos que você podia exibir na cena estava crescendo rapidamente e, para formas complexas, era muito mais fácil para os artistas pensarem em polígonos e vértices que podem ser clicados e arrastados, em vez de use combinações de cubos e cilindros.

Isso não significa que superfícies implícitas não foram usadas no processo de modelagem. Técnicas como o algoritmo Catmell-Clark tornaram-se um padrão da indústria geralmente aceito no início dos anos 80, permitindo que artistas criassem formas geométricas simples, orgânicas e suaves. Embora até o início dos anos 2000, o algoritmo Catell-Clark nem sequer fosse definido como uma “superfície implícita” que pode ser calculada usando a equação. Em seguida, foi considerado como um algoritmo iterativo: uma maneira de dividir polígonos em ainda mais polígonos.

Triângulos invadiram o mundo, seguidos por ferramentas para criar conteúdo 3D. Novos desenvolvedores e designers de videogames e efeitos especiais em filmes foram treinados exclusivamente em programas de modelagem com malhas poligonais, como Maya, 3DS Max e Softimage. Quando os "aceleradores gráficos 3D" (GPUs) apareceram em cena no final dos anos 80, eles foram desenvolvidos especificamente para acelerar o conteúdo existente: triângulos. Embora os primeiros projetos de GPU, como o NVIDIA NV1 , tivessem suporte limitado ao hardware para curvas, ele era um bug e foi rapidamente removido da linha de produtos.

Essa cultura se estende principalmente ao que vemos hoje. O modelo de imagem 2D PostScript dominante começou com um produto que podia exibir curvas em "tempo real". Ao mesmo tempo, a indústria 3D ignorou as curvas difíceis de trabalhar e, em vez disso, contou com soluções independentes para pré-converter curvas em triângulos.

Superfícies implícitas são retornadas


Mas por que as curvas 2D implícitas podem ser calculadas em tempo real em uma impressora nos anos 80, e as mesmas curvas 3D implícitas ainda são muito problemáticas no início dos anos 2000? Bem, o algoritmo de Catell-Clark é muito mais complicado que a curva de Bezier. As curvas de Bezier em 3D são conhecidas como splines B e são bem computáveis, mas há uma desvantagem de limitar a maneira como a grade é conectada. Superfícies como Catmell-Clark e NURBS permitem que redes arbitrariamente conectadas ampliem as capacidades dos artistas, mas isso pode levar a polinômios de mais de quarto grau, que, em regra, não têm solução analítica . Em vez disso, você obtém aproximações com base na separação de polígonos, como é feito no OpenSubdiv da Pixar. Se alguém encontrar uma solução analítica para encontrar as raízes de Catmell - Clark ou NURBS, a Autodesk pagará muito. Comparados a eles, os triângulos parecem muito mais agradáveis: basta calcular três equações lineares em um plano e você terá uma resposta fácil.

... Mas e se não precisarmos de uma solução exata? Essa é exatamente a pergunta que o designer gráfico Iñigo Quilles fez quando conduziu pesquisas em superfícies implícitas. Solução? Campos de distância assinada (SDF) Em vez de dar o ponto exato de interseção com a superfície, eles dizem quão longe você está dela. Semelhante à diferença entre a integral calculada analiticamente e a integral de Euler, se você tiver uma distância do objeto mais próximo, poderá "marchar" pela cena, perguntando a qualquer momento a que distância você está e passando essa distância. Tais superfícies deram uma nova vida à indústria através da demoscene e comunidades como Shadertoy. O truque da antiga técnica de modelagem MAGI nos traz descobertas incríveis, como o Surfer Boy de Killes, calculado com infinita precisão como uma superfície implícita. Você não precisa procurar as raízes algébricas do Surfer Boy, apenas sente como a cena vai.

Obviamente, o problema é que apenas um gênio como Killes pode criar um Surfer Boy. Ainda não existem ferramentas para a geometria SDF, todo o código é escrito manualmente. No entanto, dado o emocionante renascimento de superfícies implícitas e as formas naturais das curvas, agora há muito interesse nessa técnica. O MediaMolecule Dreams no PS4 é um kit de criação de conteúdo baseado em uma combinação de superfícies implícitas. No processo, a maioria dos gráficos tradicionais é destruída e recriada . Essa é uma abordagem promissora e as ferramentas são intuitivas e interessantes. Oculus Medium e unbound.io também fizeram boas pesquisas sobre esse assunto. Definitivamente, é uma visão promissora de como será o futuro dos gráficos 3D e das ferramentas da próxima geração.

Mas algumas dessas abordagens são menos adequadas para 2D do que você imagina. Em geral, nas cenas de jogos em 3D, como regra, materiais e texturas avançados, mas poucos cálculos de geometria, como muitos críticos e vendedores de produtos questionáveis apontam imediatamente. Isso significa que precisamos de menos suavização, porque as silhuetas não são tão importantes. Abordagens como 4x MSAA podem ser adequadas para muitos jogos, mas para fontes pequenas com cores sólidas, em vez de 16 locais de amostra fixos, calcule a área exata sob a curva de cada pixel, que fornecerá a resolução que você desejar.

Girar a tela em um jogo em 3D produz efeitos semelhantes à supressão sacádica , à medida que o cérebro se reconfigura para um novo visual. Em muitos jogos, isso ajuda a ocultar artefatos nos efeitos de pós-processamento, como suavização temporária , na qual Dreams e unbound.io se apóiam fortemente para obter um bom desempenho da cena. Por outro lado, em uma cena 2D típica, não temos essa perspectiva de luxo, portanto, tentar usá-la fará com que os glifos e formas fervam e tremam com esses artefatos por completo. 2D parece diferente e as expectativas são maiores. Ao aplicar zoom, panorâmica e rolagem, a estabilidade é importante.

Nenhum desses efeitos pode ser implementado na GPU, mas mostra uma mudança radical em relação ao conteúdo "3D", com prioridades diferentes. Por fim, a renderização de gráficos 2D é complicada porque se trata de formas - letras e símbolos exatos, em vez de materiais e iluminação, que são na maioria sólidos. Como resultado da evolução, os aceleradores gráficos decidiram não calcular a geometria implícita em tempo real, como curvas, mas concentraram-se em tudo o que acontece dentro dessas curvas. Talvez se o PostScript não tivesse vencido, teríamos um modelo de imagem 2D sem curvas de Bezier como o principal requisito em tempo real. , , 3D-, GPU . , .

Source: https://habr.com/ru/post/pt451394/


All Articles