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 ?


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 :)


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.


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!


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


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á.


Isso pode estar correto, mas você poderia entrar em mais detalhes? Normalmente, procuramos um pouco mais de detalhes em nossas respostas.
Gnemlock
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.