Notas sobre o desenvolvimento do catálogo de fontes

24 Novembro 2021   fontes ferramentas

O trabalho na coleção de fontes nucleares segue adiante com passos firmes, com importantes atualizações nos campos do design de tipos e da produção de fontes ao longo das últimas semanas e meses.

Design de tipos

Mudanças no espaço de variações

O espaço de variações da Mechanica Mono foi reconstruído com um arranjo diferente dos eixos de variação. Anteriormente, a cor geral do tipo era definida por dois eixos de espessura de traço, que controlavam o peso vertical e horizontal separadamente.1 Essa abordagem tinha a vantagem de tornar a modulação do traço mais lúdica, com os estilos de contraste reverso mais acessíveis; no entanto, também tornava mais incômodo aumentar/diminuir o peso mantendo a mesma relação de contraste (que é o cenário de uso mais frequente). A nova versão segue o mesmo esquema empregado por todas as outras fontes da coleção: uma combinação do eixo padrão de peso com um eixo especial de contraste. Os estilos de contraste reverso foram removidos do espaço de variações por enquanto, mas é bem provável que eles retornem no futuro.2

A contraparte proporcional Mechanica foi expandida com um eixo de contraste similar que aumentou consideravelmente a versatilidade do tipo, permitindo detalhes finíssimos em estilos de título e uma modulação sutil da espessura dos traços em estilos de texto. Além disso, a largura dos glifos ao longo do eixo de peso foi tornada constante, de modo que agora é possível alterar o peso do tipo sem alterar a métrica do texto.3

Finalmente, o eixo de peso da Jornalistica Sans foi expandido com quatro novas fontes mestras de peso leve, igualando assim o espaço de variações dos dois estilos serifados de origem e da grande maioria das outras fontes da coleção. Fiquei satisfeito com os novos estilos. Esse projeto segue sendo uma lição para mim sobre como pequenos exercícios despretensiosos podem evoluir para coisas belas e úteis.

Padronizando os eixos de variação

Outro passo importante foi fazer com que os eixos de variação de todas as fontes estivessem de acordo com a Especificação OpenType. Isso é importante para tornar as fontes interoperáveis entre si e com outras fontes e ambientes tipográficos. Na prática, isso significa que agora é possível trocar de família tipográfica sem afetar a cor e as proporções gerais do tipo. Os usuários também podem especificar peso e largura numericamente por meio dos atributos de CSS font-weight and font-stretch, e obter resultados previsíveis visualmente.

A padronização dos eixos foi obtida através do acréscimo de valores map apropriados às descrições dos eixos, para que valores do usuário (input) sejam convertidos em valores do desenho (output). Esses dados são usados então para inserir uma tabela AVAR nas fontes variáveis geradas.

Os valores de mapeamento atuais serão aperfeiçoados ao longo do tempo, na medida em que mais provas forem sendo feitas.

Aperfeiçoando a consistência numérica

Todas as famílias estão passando por um processo de verificação e reparo de descontinuidades ao longo dos eixos de peso e largura. Esse processo faz uso de uma ferramenta especial para visualização das dimensões e dos espaços dos glifos como séries de valores numéricos.4 Esses valores são ajustados manualmente até formarem uma curva de distribuição consistente através de todos os glifos mestres. O resultado é uma transição mais suave entre as etapas da interpolação.

Produção de fontes

Geração de fontes fora da caixa

Até recentemente eu estava gerando fontes variáveis no RoboFont 3 com Python usando a API da extensão Batch. Sob a superfície, o Batch converte automaticamente os arquivos de trabalho (com compatibilidade pouco rigorosa) em arquivos de produção (com exigências de compatibilidade mais estritas). Esse método é bastante conveniente e me poupou bastante tempo no início; porém, com o tempo, passei a perceber algumas limitações em termos de velocidade, portabilidade, e controle sobre etapas individuais do processo.

No início do ano eu já havia feito a conversão de uma linha de geração de fontes variáveis específica do Batch para o ufo2ft e fontmake, como parte do trabalho de produção da Elementar 2. Isso funcionou muito bem e me deu confiança para mover o código principal de geração de fontes variáveis para uma linha de montagem em puro Python também. Essa mudança, por sua vez, exigiu que eu checasse e atualizasse todas as fontes mestras de acordo com as exigências mais estritas da conversão de curvas com a biblioteca de código cu2qu. Isso foi feito em 1-2 dias de trabalho com o auxílio de um script simples de visualização – um processo lento e manual que eu achei bastante prazeroso, e que me proporcionou alguns insights preciosos sobre as formas de cada tipo.

A principal vantagem do novo processo é a velocidade, tanto em termos de tempo de processamento (a geração das fontes leva menos tempo) quanto em termos de tempo de trabalho (posso continuar trabalhando no RoboFont enquanto as fontes estão sendo geradas em um processo de fundo). Esse método também abre caminho, no futuro, para a integração da geração de fontes variáveis com o sistema de controle de versões e serviços de execução automática de código.

Um efeito colateral do novo método é uma mudança perceptível da qualidade de representação das fontes no ambiente do browser, com uma rasterização mais nítida em tamanhos pequenos. Isso se deve provavelmente a diferentes valores na tabela gasp. Fiquei surpreso de observar que os browsers atuais respeitam e fazem uso das instruções TrueType no MacOS. Os novos valores produzem resultados melhores em instâncias individuais, mas também introduzem saltos na altura-x com mudanças de peso. Será necessário refinar as instruções para que detalhes como esse estejam alinhados através de todos os pesos de cada desenho. Testes e hinting específicos para a plataforma Windows estão planejados para a fase Beta, um pouco mais adiante.

Mudando para o formato WOFF2

Outra mudança técnica digna de nota foi a troca do formato WOFF para WOFF2 como padrão para fontes na web. Embora eu não tenha medido o ganho em termos de kilobytes, é possível observar uma diferença significativa no tempo de carregamento das fontes e na experiência de modo geral.

O trabalho continua… Fique de olho neste espaço para mais notícias e atualizações!


Notas

  1. Esse é o mesmo arranjo usado no sistema Elementar, porém sem a restrição da grade de pixels. 

  2. Eu gosto de como as fontes de código com contraste reverso dão maior visibilidade aos padrões de cor da sintaxe, ajudando a tornar o código mais abstrato e facilitando a sua compreensão à primeira vista. 

  3. Ainda tenho dúvidas em relação à esta segunda mudança. Se por um lado os pesos de largura única permitem efeitos de composição de texto interessantes, eles também introduzem uma diferença de comportamento entre as diferentes fontes da coleção, indo contra a ideia de ter uma API ou fundação comum a todas as fontes. No momento, 3 das 11 fontes variáveis possuem pesos com a mesma largura: Mechanica, Synthetica e Calligraphica. O megalomaníaco em mim se sente tentado a adicionar pesos de largura única como uma função opcional em todas as fontes, com os pesos de largura proporcional como padrão. Porém isso demandaria uma quantidade de trabalho considerável, e já existem diversas outras tarefas mais importantes esperando na fila. Uma rota mais pragmática e mais provável seria a remoção dos pesos de largura única das 3 famílias que possuem essa característica, para um eventual retorno mais tarde em todas as fontes de uma vez, como uma função global. 

  4. Esta ferramenta produz uma visualização similar à do Autopsy