Como reduzo a pixel art?

14

Existem muitos algoritmos para aumentar o pixel art. (Prefiro o hqx , pessoalmente.) Mas existem algoritmos notáveis ​​para reduzi- lo ? Meu jogo foi projetado para rodar em uma resolução de 1280x720, mas se for jogado em uma resolução mais baixa, ainda quero que pareça bom.

A maioria das discussões sobre pixel art se concentra em 320x200ou 640x480aumentam o uso para emuladores de console, mas eu me pergunto como os jogos 2D modernos, como o Monkey Island Remake, poderiam ficar bem em resoluções mais baixas?

É claro que ignorar a opção de ter várias versões de ativos (por exemplo, mipmapping ).

Michael Stum
fonte
O Mipmapping não requer várias versões de ativos; isso pode ser feito no momento do carregamento do conteúdo automaticamente pelo OpenGL ou DirectX. Isso satisfaria seus objetivos?
Seth Battin
@SethBattin Não tenho certeza. Estou pensando em executar um jogo feito para 1280x720, por exemplo, 1024x576. O que o OpenGL e o DirectX usam para redimensionar a escala se eu der uma imagem de 128x96 e deve ser exibida em 102x76? (o que é ainda uma questão de arredondamento, uma vez que deve ser 102.4x76.8 pixels)
Michael Stum
O Mipmapping desfoca muito a imagem. Você não gostaria disso para pixelart.
Kromster diz apoio Monica
5
Apenas para sua informação: Monkey Island Remake não exigiu redução de escala. O jogo rodou na EGA e tinha um tamanho efetivo de 320x200 pixels. Não há necessidade de criar versões reduzidas disso para dispositivos móveis, pois já é menor que a resolução que esses dispositivos têm hoje em dia.
bummzack
2
Como é a sua arte pixel? Você está nos pedindo para responder com cegueira.
aaaaaaaaaaaa 26/01

Respostas:

14

Atualmente, estou criando um jogo que tem que rodar em uma ampla variedade de tamanhos de tela e proporções, e não foi um processo muito fácil. Além disso, se você está criando coisas em pixel art e deseja manter a sensação de pixel art enquanto suporta muitas resoluções, está entrando em um mundo de dor, por isso esteja preparado.

Na minha opinião, há várias coisas que você pode fazer (algumas são exclusivas, mas outras não)

  1. Defina uma resolução mínima e apenas aprimore (tudo) em termos de número inteiro com o vizinho mais próximo. Dessa forma, você pode manter a sensação de pixel art. Não acho que reduzir é uma boa idéia, pois você perderá detalhes e todo o objetivo de usar pixel art cuidadosamente criado será derrotado. Se a sua resolução mínima suportada for muito pequena para seus sprites, altere a resolução mínima suportada ou redesenhe todos os ativos para suportar essa resolução mínima.

  2. Quando encontrar uma resolução ou proporção que não seja suficiente para cobrir a tela inteira, estenda seu jogo (mostre mais peças), mantendo os ativos intactos. Você deve fazer o seu jogo para que ele ainda seja jogável com a resolução mínima / proporção.

  3. Se não for possível estender o jogo, preencha as seções não relacionadas à tela com preto; listras nas partes superior e inferior, esquerda e direita ou uma moldura preta. É isso que o iPad faz ao executar aplicativos do iPhone no modo ampliado. Isso também é amplamente usado em emuladores.

  4. Desista de manter-se fiel à grade de pixels. Mas você precisa parar de usar os recursos de pixel art com cantos afiados. Em seguida, faça o upscale / downscale usando a filtragem bilinear (ou idealmente bicúbica, se sua plataforma suportar). Essa é a melhor opção para maximizar o uso da tela, mantendo a experiência do usuário semelhante em todas as resoluções suportadas.

No meu jogo, acabei fazendo a opção número 4 e estou bastante surpreso com a aparência em dispositivos que variam de 320 pixels na vertical (um antigo Android 2.3) até 1536 pixels na vertical (um iPad de 2012 com tela Retina). Os ativos originais destinam-se a 600 pixels na vertical (originalmente para exibição de 800x600 em um PC com Windows). Embora para jogos subseqüentes, eu acho que uma melhor resolução vertical lógica é de 720 pixels.

O jogo usa uma alta resolução virtual virtual de 600 pixels, dimensionada para a resolução nativa do dispositivo com filtragem bilinear. Isso significa que todas as coordenadas Y no código vão de 0 (parte superior da tela) a 600 (parte inferior da tela).

Para o tamanho horizontal, suponho que a largura máxima seja de 1080 pixels, o que é mais que suficiente para cobrir até as proporções mais amplas de 16: 9. Minhas coordenadas x estão centralizadas, então x = 0 é o centro da tela e as coordenadas x vão de -540 à esquerda a 540 à direita. Garanto que tudo se encaixa entre -400 e 400 para suportar as telas mais estreitas (4: 3)

No entanto, se eu tivesse que manter a sensação de pixel art, certamente usaria as opções 1 e 2. O que significa que eu escalaria apenas em termos de número inteiro para manter a sensação de quarentena da pixel art, e projetaria o jogo de forma que a quantidade de visibilidade visível o tiles não é fixo e pode se adaptar a qualquer resolução de tela / proporção.

Então, para (não) responder sua pergunta. Eu acho que diminuir o tamanho de pixel art é uma péssima idéia, então você não deve fazê-lo. Existem outras maneiras de oferecer suporte a diferentes resoluções de tela que fornecerão melhores resultados do que simplesmente massacrar sua arte cuidadosamente criada.

Panda Pajama
fonte
Estou na mesma situação e isso está me deixando louco. Nosso jogo é pixelart feito para tela de altura de 600px. Mas, se eu subir para telas de 720p (PC), ele ficará com uma aparência realmente horrível e levemente desfocada. Eu realmente não sei o que fazer aqui. Também pensei em criar um mapa maior para telas de 720p e manter o pixelart como está, mas então tenho o mesmo problema para as telas de 1080p. Acho que deveríamos ter feito pixelart de 360p (ou menor), para que tivéssemos uma escala x2 e x3 perfeita para telas de 720 e 1080p. Agora é tarde demais para isso. Alguma idéia ou conselho adicional?
Damian
8

Considere realmente gerar as versões reduzidas no tempo de desenvolvimento e incluí-las diretamente no jogo como um recurso. Faça isso com o Photoshop ou com qualquer ferramenta que você encontrar, cria o que você gosta. Depois, faça com que o jogo selecione dinamicamente o conjunto de arte certo, adequado à resolução atual.

Aqui estão algumas razões pelas quais você pode fazer isso ...

Salva o trabalho de processamento

Se você redimensionou programaticamente em tempo de execução, seu software provavelmente criará e armazenará em cache o trabalho artístico de qualquer maneira. Então, por que não incluir apenas as versões reduzidas no pacote de ativos de arte? Suponho que se o download fosse maior do que você gostaria, mas você economizará em alguma carga de CPU, gravação de disco etc.

Maior controle artístico

Se você redimensionar a arte você mesmo, terá maior controle sobre a aparência final. Isso pode não fazer diferença se você estiver diminuindo um pouco, mas quando tiver resoluções muito mais baixas, convém ter um melhor controle artístico sobre a aparência final. Por exemplo, se os olhos de um personagem específico precisavam ser enfatizados, você pode desenhar as versões de resolução mais baixa com os olhos não reduzidos tanto para manter o efeito - algo que a escala programática não pode fazer.

O dimensionamento dinâmico não é perfeito

Você pode tomar decisões artísticas distintas que não funcionam com a escala dinâmica. Por exemplo, suponha que você queira colocar uma borda, contorno ou destaque ao redor de uma imagem. Quando visualizado em resolução mais alta, isso pode parecer bom, mas a versão reduzida pode ficar turva ou perder totalmente o efeito. Mas, se feito à mão, você pode aplicar especificamente o efeito a cada tamanho e garantir que você retenha o impacto.

outros pensamentos

Você também pode fazer uma abordagem híbrida, com um conjunto de recursos específicos de resolução que são usados ​​onde encontrados e um conjunto genérico que é dimensionado dinamicamente se nenhuma versão específica da resolução for encontrada. É um pouco como a plataforma Android funciona. Algumas informações sobre isso em http://developer.android.com/guide/practices/screens_support.html

Tim Holt
fonte
0

Redimensionar para baixo é mais fácil do que redimensionar porque você está escolhendo informações para jogar fora, em vez de ter que inventar informações novas (e possivelmente incorretas) para preencher as lacunas. Com isso em mente, você provavelmente não precisa de nada de especial aqui e a maioria dos algoritmos de reamostragem padrão do campo de processamento de imagens deve funcionar bastante bem para reduzir a imagem: bilinear, Gaussiana, Lanczos, etc.

Lanczos, em particular, pode ser uma escolha interessante, pois melhora a imagem, preservando possivelmente os detalhes que de outra forma seriam perdidos ao combinar vários pixels em um. Obviamente, isso tem o custo de potencialmente introduzir artefatos indesejados.

Algumas comparações visuais aqui: /gis/10931/what-is-lanczos-resampling-useful-for-in-a-spatial-context

Kylotan
fonte
3
-1, porque reduzir a pixel-art (que geralmente é pixel-a-pixel artesanal), por exemplo , nunca ficará bem com nenhum desses algoritmos. Com uma abordagem de vizinho mais próximo, você perderá segmentos de linha importantes. Com a interpolação, você obtém imagens borradas. Receio que não haja resposta satisfatória para a questão dos OPs, exceto para fazê-lo manualmente.
bummzack