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.
Respostas:
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:
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:
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
fonte
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.
fonte