Como dimensionar pixel art sem desfocagem no GM Studio?

9

Estou criando um jogo no Game Maker Studio que usa pixel art. Quando inicio o jogo, todas as texturas ampliadas ficam realmente embaçadas. (Isso não acontece com os pequenos.)

Por exemplo, esta imagem

agradável :)

é renderizado no jogo assim:

borrado :(

Existe alguma maneira de redimensionar pixels pequenos em pixels grandes em vez de pixels desfocados ?

mpower
fonte
não use uma compressão com perdas para texturas em vez usar bmp, gif ou png, eles todo o apoio sem perdas de armazenamento
catraca aberração
Quando você tem pixel art, geralmente deseja evitar redimensionamentos, porque o pixel art sempre sofre com isso. Quando o redimensionamento não puder ser evitado, ele deve usar a interpolação do vizinho mais próximo para preservar a aparência crocante. Quando quiser redimensionar, use gráficos vetoriais em vez de gráficos raster. Infelizmente, não posso ajudá-lo com isso, porque não estou familiarizado com o GMStudio.
Philipp
exemplos adicionados.
Mpower #
Não conheço as possibilidades dos criadores de jogos, mas você deseja desativar toda a filtragem de escala e ativar a escala do vizinho mais próximo.
Appleshell
11
Se bem me lembro, o Spelunky original (fabricado no Game Maker) tinha uma DLL que permitia o dimensionamento linear. A fonte está disponível nesse link; dar uma olhada.
Anko22 /

Respostas:

13

Encontrei uma solução de algum recurso. Vá para Configurações globais de jogos e, em seguida, vá para qualquer spoiler de plataforma (por exemplo, "Windows" ou "Android"), escolha o spoiler intitulado "Gráficos" e desative a opção "Interpolar cores entre pixels". Diverta-se :)

meriler98
fonte
Esta técnica funciona, embora a arte de pixel pode resultar alteradas devido à intensificação com um factor de número não inteiro (por exemplo, 2,5x)
liggiorgio
Você quer dizer que eles não se incomodaram em fazer disso a configuração padrão?!? Acabei de verificar e que o padrão é o contrário no game maker 8.0. Isto é apenas louco .... Ótima resposta btw.
precisa saber é o seguinte
5

Ninguém quer lidar com a necessidade de aumentar manualmente cada sprite; não apenas é um espaço de trabalho desleixado, como também é pouco profissional. Encontrei uma solução ao desativar a interpolação nas configurações globais de jogos não funcionou.

texture_set_interpolation(false);

:) Espero que isso ajude você em seus futuros empreendimentos.

Toby Jeffry Staryth
fonte
Esta é a melhor solução para segmentar várias plataformas. Você não precisa clicar em "Interpolar cores entre pixels" para todas as plataformas! Exatamente o que eu estava procurando.
Logan Pickup
1

O que geralmente faço para isso é usar o photoshop ou o GIMP (balança / vizinho mais próximo)

Mas para fazer isso no editor de sprites GM: S, eu uso o comando Stretch em vez de dimensionar e defino-o com qualidade POBRE. Isso manterá a sensação de BlockyScreenie de um jogo que está trabalhando no caixa eletrônico, o sprite é ampliado no próprio GM: S

Acima está um jogo no ATM, eu fiz exatamente isso!

David Chircop
fonte
Embora isso funcione para o aprimoramento de determinadas resoluções, não é para todas elas, a GM também tem o hábito de compactar texturas por padrão. Isso também aumentaria de forma diferente em diferentes resoluções ao usar a funcionalidade de alongamento, causando o desfoque que estamos tentando evitar. No entanto, +1 na menção (Escala / vizinho mais próximo).
Tom 'Blue' Piddock
1

Desative a função de escala na guia planos de fundo no mapa. Se parecer fora de escala, verifique se a textura do fundo é do mesmo tamanho da sala / mapa em que você está.

Como alternativa, use este post aqui para criar um script em segundo plano que melhorará o cenário com resultados esperançosos.

Isso utiliza superfícies, portanto, se você precisar de ajuda extra sobre isso - este post fornece muitas informações.


EDITAR:

Voltando às minhas respostas, percebi que isso não é adequado e precisa do conteúdo do tutorial. Aqui está:

PASSO 1 : Escolha a escala que você deseja. Use uma exibição para todas as salas e tenha as portas W e H dimensionadas adequadamente. Então, por exemplo, se você estivesse usando uma escala de 2 ... ficaria assim, no editor de salas da GM.

É importante que isso seja consistente para todos os quartos. Se você tiver muitos quartos, pode ser mais fácil fazer isso via código *. Eu prefiro fazer dessa maneira, porque os valores não são constantes e posso suportar várias escalas diferentes.

PASSO 2 : Crie 3 scripts, screen_init, screen_begin e screen_end. Aqui está o que se passa em cada um dos scripts ...

Citação de: screen_init

// screen base(view_wview and view_hview)
screen_x = 0;
screen_y = 0;
screen_w = 320;
screen_h = 240;
screen_scale = 2;

// create a surface for the whole screen to be drawn on
screen = surface_create(screen_w,screen_h);

// this will destroy the screen object if surfaces are not supported on the graphics card, reverting to the viewport method
if screen = -1{instance_destroy();}

Citação de: screen_begin

// this draws the surface on the screen
surface_reset_target();
draw_clear(0);
draw_set_blend_mode_ext(bm_one, bm_zero);
draw_surface_stretched(screen,screen_x,screen_y,screen_w*screen_scale,screen_h*screen_scale);
draw_set_blend_mode(bm_normal);
screen_refresh();

Citação de: screen_end

// this sets surface 'screen' as the drawing target for everything in the game, so all drawing will be done on this surface and not on the game screen
surface_set_target(screen);

PASSO 3 : Agora temos scripts, mas para onde eles vão? Crie um objeto. Like, obj_screen, objScreen, o_screen ou o que for, e faça o seguinte:

  • A) coloque o screen_initscript no evento Create.
  • B) coloque o script screen_begin no evento Begin Step.
  • C) coloque o script screen_end no evento End Step.

E coloque esse objeto na sala principal e principal do jogo, marque-o como persistente e verifique se não há duplicatas.

Você terminou e agora tem uma escala nítida e agradável = D

Tom 'Blue' Piddock
fonte
Quero dimensioná-lo sem desfocar, pois adoro pixel arts. Portanto, isso não responde à minha pergunta. Isso é possível?
mpower
Não é provável que o Game Maker studio faça a escala com um algoritmo incorreto, que muitas vezes faz com que a escala indesejada seja desfocada. Use o tutorial que acabei de editar na minha resposta para experimentar um fundo nítido com a escala.
Tom 'Blue' Piddock
Você considerou pré-dimensionar sua textura de fundo em um programa gráfico?
Philipp
Existem duas maneiras: primeiro combine alguns scripts aqui. O segundo é pré-dimensionar as imagens antes de usá-las.
mpower
Excelente, feliz por ter ajudado.
Tom 'Blue' Piddock
-2

Use texture_set_interpolation(false)para fazê-lo desenhá-lo como está.

Gree
fonte
Isso pode estar correto, mas você poderia entrar em mais detalhes? Normalmente, procuramos um pouco mais de detalhes em nossas respostas.
Gnemlock