¿Cómo escalo pixel art sin desenfoque en GM Studio?


9

Estoy creando un juego en Game Maker Studio que usa pixel art. Cuando inicio el juego, todas las texturas ampliadas son realmente borrosas. (No les sucede a los pequeños).

Por ejemplo, esta imagen

bonito :)

representa en el juego así:

borrosa :(

¿Hay alguna forma de cambiar el tamaño de los píxeles pequeños a píxeles grandes en lugar de píxeles borrosos ?


no utilice una compresión con pérdida para las texturas en lugar de utilizar bmp, gif o png, todos ellos sin pérdida de soporte de almacenamiento
trinquete monstruo

Cuando tiene pixel art, generalmente desea evitar cualquier cambio de tamaño, porque el pixel art siempre sufre de eso. Cuando no se puede evitar cambiar el tamaño, debe usar la interpolación del vecino más cercano para preservar el aspecto crujiente. Cuando desee cambiar el tamaño, use gráficos vectoriales en lugar de gráficos de trama. Desafortunadamente no puedo ayudarte con eso porque no estoy familiarizado con GMStudio.
Philipp

ejemplos añadidos.
mpower

No conozco las posibilidades de los creadores de juegos, pero querrás deshabilitar todo el filtrado de escala y habilitar la escala del vecino más cercano.
Manzana

1
Si no recuerdo mal, el Spelunky original (hecho en Game Maker) tenía una DLL que permitía el escalamiento lineal. La fuente está disponible en ese enlace; echar un vistazo.
Anko

Respuestas:


13

Encontró una solución de algún recurso. Vaya a Configuración global del juego, luego vaya a cualquier spoiler de plataforma (por ejemplo, "Windows" o "Android"), elija el spoiler titulado "Gráficos" y desactive "Interpolar colores entre píxeles". Que te diviertas :)


Esto funciona técnicamente, aunque el arte pixel puede resultar alterada debido a la ampliación de escala con un factor no entero (por ejemplo, 2,5 veces)
liggiorgio

¿Quieres decir que no se molestaron en hacer esa configuración predeterminada? Acabo de comprobar y que está predeterminado en Game Maker 8.0. Esto es una locura ... Gran respuesta por cierto.
user64742

5

Nadie quiere lidiar con tener que escalar manualmente cada sprite; no solo es un espacio de trabajo descuidado, sino que resulta ser muy poco profesional. Encontré una solución cuando desactivar la interpolación en la configuración global del juego no funcionaba.

texture_set_interpolation(false);

:) Espero que esto te ayude en tus futuros emprendimientos.


¡Esta es la mejor solución si apunta a múltiples plataformas, no tiene que hacer clic en "Interpolar colores entre píxeles" para cada plataforma! Exactamente lo que estaba buscando.
Recogida de Logan el

1

Lo que hago generalmente para esto es usar Photoshop o GIMP (escala / vecino más cercano)

Pero para hacerlo en el editor de sprites GM: S en sí mismo, utilizo el comando Estirar en lugar de escalar y lo configuro en POBRE calidad. Eso mantendrá la sensación de BlockyScreenie de un juego en el que estoy trabajando en un cajero automático, el sprite se amplía en GM: S

Arriba hay un juego que estoy trabajando en un cajero automático, ¡acabo de hacer eso!


Aunque esto funciona para aumentar la escala en ciertas resoluciones, no lo hará para todas ellas, GM también tiene la costumbre de comprimir texturas por defecto. Esto también se escalaría de manera diferente en diferentes resoluciones cuando se usa la funcionalidad de estiramiento, esto causará el desenfoque que estamos tratando de evitar. Sin embargo, +1 para la mención (Escala / Vecino más cercano).
Tom 'Blue' Piddock

1

Desactive la función de escala en la pestaña de fondos en el mapa. Si parece fuera de escala, asegúrese de que su textura para el fondo sea del mismo tamaño que la habitación / mapa en el que se encuentra.

Alternativamente, use esta publicación aquí para crear un script de fondo que mejorará el fondo con (con suerte) resultados nítidos.

Esto utiliza superficies, por lo que si necesita ayuda adicional al respecto, esta publicación proporciona mucha información.


EDITAR:

Volviendo a mis respuestas, me di cuenta de que esto no está a la altura y necesita el contenido del tutorial. Aquí está:

PASO 1 : elija la escala que desee. Use una vista para cada habitación y haga que el puerto W y el puerto H se escalen adecuadamente. Entonces, por ejemplo, si estuviera usando una escala de 2 ... se vería así, en el editor de sala de GM.

Es importante que esto sea consistente para todas las habitaciones. Si tiene muchas habitaciones, podría ser más fácil hacerlo a través del código *. Prefiero hacerlo de esa manera, porque los valores no son constantes y puedo soportar múltiples escalas diferentes.

PASO 2 : Cree 3 scripts, screen_init, screen_begin y screen_end. Esto es lo que pasa en cada uno de los guiones ...

Cita 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 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 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);

PASO 3 : Ahora tenemos guiones, pero ¿a dónde van? Crea un objeto. Como, obj_screen, objScreen, o_screen o lo que sea, y haga lo siguiente:

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

Y coloque ese objeto en la primera y principal sala de su juego, márquelo como persistente y asegúrese de que no haya duplicados.

Ya terminaste y ahora tienes una escala agradable y nítida = D


Quiero escalarlo sin difuminarlo, ya que me encantan las artes de píxeles, así que esto no responde a mi pregunta. ¿Es esto posible?
mpower

No es probable que el estudio Game Maker escale con un algoritmo de escalado incorrecto que a menudo hace que el escalado no deseado se vuelva borroso. Use el tutorial que acabo de editar en mi respuesta para probar un fondo nítido con escala.
Tom 'Blue' Piddock

¿Consideró preescalar su textura de fondo en un programa gráfico?
Philipp

Dos formas son buenas. Primero, combinar algunos de los scripts aquí. Segundo, es escalar previamente las imágenes antes de usarlas.
mpower

Excelente, me alegro de que haya ayudado.
Tom 'Blue' Piddock

-2

Úselo texture_set_interpolation(false)para dibujarlos como están.


Esto podría ser correcto, pero ¿podría entrar en más detalles? Normalmente buscamos un poco más de detalle en nuestras respuestas.
Gnemlock
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.