Escalando meu pixel art platformer de 720p para 1080p

12

Estou desenvolvendo um jogo de plataformas 2D de pixel art para PC e smartphone, mas estou preso a um problema técnico.

Eu escolhi ter uma resolução de 32x32 lado a lado e uma resolução de sprite de 64x64 caracteres. Os níveis são divididos em seções que eu chamo de "telas", e em cada tela eu tenho blocos de 40x22,5, aproximados a 40x23, então a resolução mínima é 1280x720.

No jogo, eu tenho um mecânico de salto duplo, então preciso ter um bom alcance de visão vertical em cada "tela".

Aí vem o problema: 1280x720 não é uma resolução muito alta. Nos monitores HD, a janela não seria grande e, se eu aumentar a resolução em 2x, será em 2560x1440 e a janela será muito maior do que um monitor HD real. Se eu tentar tamanhos entre 1280x720 e 2560x1440, os gráficos começarão a gaguejar ou ficarão deformados.

Como posso resolver este problema? Existe uma solução que não exija que eu redesenhe todos os blocos e sprites no formato 16x16?

Xargon Wan
fonte
Reduzir a resolução, mas ter uma câmera movendo a tela, é uma opção aceitável de design? ou seja, a resolução agora é de 640 x 360, no entanto, suas telas ainda são de 1280x720, mas você precisa se movimentar pela sala, como Metroid ou Axiom Verge?
lozzajp
Você está no lugar errado, mesmo que seja um jogo em 2d, você precisa definir uma câmera. Portanto, a câmera define a resolução de visualização, fov e ângulos, e você apresenta os dados simplesmente para a câmera. Dessa forma, o jogo é resoultion independente
Yosh Synergi
Apenas tentando ter certeza de qual é exatamente o problema. Você está dizendo que, como a exibição do seu mapa de 1280X720 é menor do que a exibição de um monitor de 1920X1080, você deseja aprimorar a exibição do mapa para que seja a 'tela cheia' possível? Estou confuso, pois o desenho de blocos 16X16 não resolveria o problema (como eu o entendo) de qualquer maneira.
RobM
@DMGregory, se você puder me dar alguns exemplos de artefatos na escala ao usar a escala fracionária, isso seria incrível, pois não consigo imaginar um cenário único em que, quando dimensiono uma imagem em ambas as direções, a mesma quantidade não importa, se a quantidade for menor. um número inteiro ou fracionário, que os artefatos aparecem. com artefatos, quero dizer coisas que não deveriam estar lá, que é diferente de desfoque, ocorrendo em alta escala sem pixels suficientes.
Yosh Synergi

Respostas:

16

Para quem se pergunta por que esse é um problema da pixel art, veja um exemplo rápido usando uma cena de Super Mario World:

Exemplo de cena de pixel art dimensionada, mostrando artefatos

Se escalarmos um jogo de pixel art de 720 para 1080 em tempo de execução (da mesma forma que uma câmera de jogo típica), obteremos artefatos devido à proporção não inteira de pixels da tela por texel de origem. Veja a inconsistência nos números do exemplo em escala à direita e como a folha e a orelha de Mario ficam distorcidas.

É jogável, mas perdeu a nitidez encantadora da pixel art. E em movimento, esses artefatos podem rastejar através de um sprite , fazendo com que pareça cintilante.

O uso de um modo de filtragem que mescla pixels adjacentes evitará as ondulações, mas borrará e borrará a arte do pixel; portanto, também não é muito desejável.


Infelizmente, a proporção de 1,5x entre 720p e 1080p é o pior cenário possível.

Como você observa, o dimensionamento de 1x é muito pequeno e o 2x é muito grande, com uma margem tão ampla nos dois sentidos, e não existe uma taxa de dimensionamento com número inteiro entre nós para escolhermos.

Suas opções se resumem a:

  • Tolerar a escala 1x , mostrando seu jogo em uma janela 1/3 menor que a tela, adicionando bordas decorativas se você precisar preencher o espaço.

    • Você pode estender o corte, mostrando mais cenas ao mesmo tempo em telas de alta resolução. Isso reduz o preenchimento / caixa de correio necessário, mas você terá que avaliar se isso afeta o desempenho do jogo.

      (por exemplo, isso oferece aos jogadores em alguns dispositivos uma vantagem injusta ou permite que eles mantenham segredos que não deveriam ver tão facilmente?)

  • Aumente a escala em 2x e recorte a cena , para que o jogador veja menos cenas de cada vez (cerca de 3/4 da medida que podiam ver antes).

    Isso também pode afetar a forma como o jogo é executado, por exemplo. dificultando ao jogador ver os lugares para os quais ele precisa pular duas vezes.

    • Você pode compensar isso com a lógica da câmera, tendo o pan de visualização para acompanhar ou antecipar o player, para que o conteúdo importante ainda seja visível em uma tela no corte menor, mas não há melhor câmera universal para usar.

      Se você decidir seguir esse caminho, tente compartilhar alguns detalhes de sua jogabilidade e câmera atual, além de uma cena de exemplo. Com isso, podemos ajudar a ajustar o comportamento da câmera para compensar (ou seu jogo pode simplesmente exigir mais visibilidade)

  • Crie ativos alternativos em uma resolução diferente . (Sim, isso é muito trabalhoso, mas oferece mais opções para controlar a aparência do jogo)

    Isso não significa que você precisa jogar fora seus ativos existentes que ficam ótimos em 720p. Este artigo descreve a troca contextual entre conjuntos de ativos diferentes para oferecer suporte a uma variedade maior de resoluções de destino (no Unity, mas o princípio também pode ser aplicado em jogos que não são do Unity).

    • Como você observa, redesenhar todos os seus recursos na metade do tamanho ( blocos 16x16, caracteres 32x32 ) permitirá lidar com 720p na escala 2x e 1080p na escala 3x, com o mesmo número de blocos mostrado como você tem agora. Você pode encontrar a resolução de pequenos blocos mais visualmente restritiva.

    • Você também pode desenhar um conjunto alternativo de "formato grande" que é 150% maior ( 48x48 blocos, 96x96 caracteres ), capaz de lidar com 1080p na escala 1x. (Você usaria seus recursos existentes para 720p ou 1440 etc.). A resolução maior deve ajudá-lo a manter a fidelidade da sua arte atual, para que você não precise sacrificar o estilo e os detalhes que possui agora.

      Exemplo de um recurso redesenhado na escala de 150%

    • Uma terceira opção é desenhar um conjunto de ativos apenas um pouco menor ( blocos 24x24, caracteres 48x48 ), capaz de lidar com 1080p na escala 2x e, novamente, pode significar menos sacrifício de detalhes do que reduzir pela metade todos os tamanhos de ativos.

      Todas essas três opções permitem manter o enquadramento e a jogabilidade exatamente iguais em 720 e 1080, mas com o custo de aproximadamente o dobro do trabalho dos ativos.

Infelizmente, não há vitória fácil aqui, apenas trocas diferentes.

DMGregory
fonte
2
você menciona manter a escala original e usar bordas decorativas. Dependendo do contexto, este pode ser o local perfeito para colocar elementos da GUI, como pontuação e vidas. Se essas bordas forem grandes o suficiente para caber adequadamente nessas informações, elas poderão parecer menos 'preenchedoras' e mais 'cheias de conteúdo' e relevantes para o jogo.
Gnemlock
3

Elaborando especificamente a opção do @ DMGregory de criar ativos alternativos em resoluções diferentes:

A melhor solução que conheço é provavelmente o menos útil para você neste momento: desenvolva seus recursos de arte em um formato vetorial e rasterize-os conforme necessário mais tarde. Esta não é uma bala mágica; na maioria das vezes, você precisará fazer algumas pequenas modificações artesanais após a rasterização.

A próxima melhor opção que conheço é tentar vários algoritmos de escala de imagem, especificamente algoritmos de escala de pixel art . Como antes, isso não é uma pancéia; a seleção de um algoritmo de escala específico é altamente específica do contexto. Tem tanto a ver com a sensação do seu jogo quanto com a arte em si e, mesmo com um bom algoritmo + combinação de arte, você provavelmente precisará ajustar alguns sprites manualmente.

Nos dois casos, a ideia é usar uma ferramenta para fazer a maior parte do trabalho e concentrar o esforço humano nos detalhes restantes. Como o @DMGregory disse, "não há vitória fácil aqui, apenas trocas diferentes".


Editar em relação ao dimensionamento fracionário: a maioria dos algoritmos de dimensionamento de pixel art só aumenta em números inteiros. Antes de lançar seu próprio algoritmo de dimensionamento personalizado, você provavelmente precisará combinar upscaling e downscaling para obter a alteração de 1,5x que procura. Como referência, eis o resultado da combinação do algoritmo scale3x com o upscale e o algoritmo fant com o downscale em 50%:

Original:

insira a descrição da imagem aqui

Escalado:

insira a descrição da imagem aqui

Pikalek
fonte
Infelizmente, a maioria dos algoritmos de dimensionamento de pixel art que encontrei ainda tendem a lidar apenas com o aumento de número inteiro (2x, 3x, 4x geralmente), para que não ajudem muito no caso 720-> 1080. (Talvez um poderia usar um 3x pixels upscaler então downsample pela metade ... Não tenho certeza se isso ficaria melhor ou pior do que um upscale direta?)
DMGregory
Ponto válido. Editado um pouco para resolvê-lo. Eu também tropecei nesse shader que parece suportar uma escala fracionária .
Pikalek
+1 na solução vetorial. Você precisa tornar seus ativos muito grandes e reduzidos.
MarkVaren