Fontes baseadas em vetor vs. fontes de bitmap em jogos (2D)?

7

Eu sei que muitos jogos estão usando fontes de bitmap. Quais são as vantagens da renderização / manipulação de fontes com base em vetor quando comparadas às fontes de bitmap e em quais cenários elas mais importam?

Prefira um foco em jogos 2D ao responder a esta pergunta.

Se relevante, inclua exemplos de jogos usando qualquer uma das abordagens.

EDIT: inclua também sua preferência pessoal se você tiver experiência com o assunto.

Alguns fatores que você pode considerar:

  • quantidade de texto usada no jogo
  • escala de texto
  • sobreposição de glifos e anti-aliasing
  • qualidade geral de renderização
  • cores e estilo da fonte
  • requisitos de interface do usuário
  • localização / unicode
  • quebra de texto e formatação
  • implantação de plataforma cruzada
  • 2d vs 3d

Fundo:

Estou desenvolvendo um jogo simples de queda de blocos em 2D, direcionado para pc. Gostaria de adicionar rótulos de texto para os botões de nível, pontuação e menu. Estou usando o SFML, que usa o FreeType internamente, para que os recursos baseados em vetor fiquem facilmente disponíveis para o meu projeto.

Na minha opinião, o tamanho das fontes em jogos simples geralmente não varia, e as fontes de bitmap devem ser mais fáceis para preocupações entre plataformas (formatos e qualidade de renderização). Mas não tenho certeza se estou perdendo alguns pontos importantes aqui, especialmente porque quero aprimorar a aparência do jogo final.

jmp97
fonte
2
Nota importante: o SFML usa o FreeType para carregar fontes, mas é pré-renderizado para a textura, para que a renderização real seja feita com uma fonte de bitmap. Isso fornece uma mistura dos prós e contras dos dois estilos.
Jv42
11
@ jv42: Principalmente, dá-lhe os contras.
11
@JoeWreschnig bem, sim, exceto pela velocidade e tempo de renderização necessários para prosseguir.
Jv42
Todos os jogos profissionais em que trabalhei usavam bitmaps gerados, porque essa era a única técnica disponível ou para que o artista gráfico pudesse ajustá-los principalmente.
Jv42

Respostas:

7

Fontes de bitmap

Vantagens:

  • Pode ser integrado a qualquer base de código existente, seja OpenGL, DirectX, DirectDraw ou mesmo GDI +.

  • Rápido. Usando um atlas de textura, você pode renderizar todo o seu texto em uma única passagem.

  • Controlado pelo artista. Os atlas de textura podem ser gerados proceduralmente (renderizando um estilo de fonte em uma textura) ou podem ser carregados de um arquivo. Os artistas podem ajustar a aparência de qualquer glifo sem interromper o jogo.

Desvantagens:

  • Útil apenas para texto estático. Quando você trabalha com texto animado (pop-up, rotação, redimensionamento etc.), torna-se difícil gerenciar todos os diferentes estilos de fonte.

  • Porco da memória. Se você deseja Arial 12, 16 e 24 em negrito, itálico ou ambos, isso se torna 3 (tamanhos) * 3 (estilos) = 9 mapas de textura. Adicione outra fonte e você terá 18 mapas de textura diferentes. Adicione suporte para Unicode e veja 1024x1024 texturas para cada tamanho! Principalmente um problema em plataformas móveis.

Fontes baseadas em vetor

Edição: Eu não deixei isso muito claro, mas uma implementação comum para fontes baseadas em vetor é transformá-las em um atlas de textura e usá-las como um bitmap, o que oferece a mesma vantagem de velocidade que uma fonte de bitmap.

Vantagens:

  • Manipulado facilmente. Como você está rasterizando entre pontos de controle no glifo, é possível distorcer esses pontos da maneira que quiser. Muito flexível para artistas.

Desvantagens:

  • Lento. Ao contabilizar transformações, isso significa que você deve transformar cada ponto de controle e rasterizar um conjunto de triângulos para eles.

  • Difícil de implementar. Rasterizar glifos é difícil de acertar.

Como as outras pessoas fazem isso?

Dê uma olhada nesta página:

http://www.microsoft.com/typography/OTSPEC/TTCH01.htm

Foi assim que a Microsoft resolveu o problema para o Windows 95 e para cima. Basicamente:

  • Um designer de fontes fornece um esboço (baseado em vetor)
  • Para cada tamanho de ponto (8, 10, 12, etc.), é adicionado um conjunto de instruções de montagem da grade

O que oferece a vantagem das fontes baseadas em vetor (fáceis de manipular) combinadas com a velocidade dos bitmaps.

Por fim, você pode dar uma olhada em uma terceira opção:

https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

knight666
fonte
3
Merda, isso era tudo o que eu estava digitando também e muito mais, do que o temido pop-up 'uma nova resposta' apareceu e essa ótima resposta apareceu ...! :)
Roy T.
Hoje você, amanhã eu. ;)
knight666
2
As "instruções de ajuste da grade" (geralmente chamadas de "dicas") são uma das coisas que tornam lenta a renderização das fontes de vetor. Eles melhoram a qualidade da tela com mais despesas de desempenho.
11
"Renderizar na textura é uma otimização." Realisticamente hoje, para renderizar tudo o que você precisa para renderizá-lo primeiro em uma textura. Não estou ciente de quaisquer renderizadores de fontes TrueType decentes que interoperem com o OpenGL sem renderizar primeiro uma textura. (isto é, eles alimentariam pontos de controle no sombreador de vértice e permitiriam que o sombreador de fragmento manipulasse a rasterização e a dica.) e bastante avançado.
2
O que fiz foi descrito na minha resposta à pergunta de que é uma duplicata. (E quando eu digo "se" Quero dizer "você pode entrar em uma loja e comprar o jogo que está fazendo isso", e não "Eu li em um livro uma vez".)
1

A vantagem de usar fontes Vector / True Type sobre fontes Bitmap é a maior flexibilidade dentro do aplicativo: você pode desenhá-las em qualquer tamanho, colocar em itálico, em negrito e adicionar alguns efeitos de transformação sofisticados, todos com qualidade máxima.

Existem muitas fontes vetoriais profissionais por aí, muitas delas têm milhares de glifos e muitos metadados para cada uma delas, tornando-a muito lucrativa ao lidar com a exibição de cadeias não-ascii, úteis para traduções.

A diferença no desempenho será exibida apenas durante o carregamento da fonte, desde que você armazene em cache os glifos corretamente. (O código de renderização SFML não é totalmente otimizado, no entanto, o carregamento e o cache do glifo são feitos corretamente.)

O FreeType possui seu próprio rasterizador e carregador de fontes e não usa os do sistema, portanto, os formatos de qualidade e fonte não serão um problema.

API-Beast
fonte
Eu posso ver o seu ponto de vista sobre flexibilidade. Mas imagino que possa haver diferenças na renderização da fonte em diferentes plataformas, dificultando a obtenção de dimensões exatas entre as plataformas. Com as fontes de bitmap, você sabe que a fonte terá exatamente a mesma aparência e sempre ocupará a mesma quantidade de pixels.
jmp97
Não, o Freetype é o mesmo em todas as plataformas e dispositivos. Se você usar a mesma fonte e o mesmo tamanho, obterá os mesmos resultados. Você tem o mesmo tipo de confiabilidade.
API-Beast