¿Cómo reduzco el pixel art?

14

Hay un montón de algoritmos para escalar hasta el pixel art. (Prefiero hqx , personalmente.) Pero ¿hay alguna algoritmos notables escalarla abajo ? Mi juego está diseñado para ejecutarse con una resolución de 1280x720, pero si se juega con una resolución menor, todavía quiero que se vea bien.

La mayoría de las discusiones se centran alrededor de Arte del pixel 320x200o 640x480y reescalado para su uso en los emuladores de consola, pero me pregunto lo moderna 2D juegos como el Monkey Island remake podría verse bien en resoluciones más bajas?

Por supuesto, ignorando la opción de tener múltiples versiones de activos (es decir, mipmapping ).

Michael Stum
fuente
Mipmapping no requiere múltiples versiones de activos; puede hacerse en tiempo de carga de contenido automáticamente por OpenGL o DirectX. ¿Eso satisfaría tus objetivos?
Seth Battin
@SethBattin No estoy seguro. Estoy pensando en ejecutar un juego hecho para 1280x720 en, por ejemplo, 1024x576. ¿Qué usan OpenGL y DirectX para reescalar si le doy una imagen de 128x96 y se supone que se muestra en 102x76? (que es incluso un problema de redondeo ya que debería ser 102.4x76.8 píxeles)
Michael Stum
Mipmapping difumina mucho la imagen. No querrías eso para pixelart.
Kromster dice que apoya a Mónica el
55
Solo para tu información: Monkey Island Remake no requirió reducción de escala. El juego funcionaba con EGA y tenía un tamaño efectivo de 320x200 píxeles. No es necesario crear versiones reducidas de esto para dispositivos móviles, ya que es más pequeño que la resolución que tienen estos dispositivos hoy en día.
bummzack
2
¿Cómo se ve tu pixel art? Nos está pidiendo que respondamos con ceguera.
aaaaaaaaaaaa

Respuestas:

14

Actualmente estoy creando un juego que tiene que ejecutarse en una amplia variedad de tamaños de pantalla y relaciones de aspecto, y no ha sido un proceso muy fácil. Además, si está haciendo cosas en pixel art y desea mantener la sensación de pixel art mientras admite muchas resoluciones, está entrando en un mundo de dolor, así que prepárese.

En mi opinión, hay varias cosas que puede hacer (algunas son exclusivas, pero otras no)

  1. Defina una resolución mínima, y ​​solo escala (todo) en términos enteros con el vecino más cercano. De esa manera puedes mantener la sensación de pixel art. No creo que la reducción de escala sea una buena idea, ya que perderás detalles, y el propósito completo de usar pixel art cuidadosamente diseñado será derrotado. Si su resolución mínima admitida es demasiado pequeña para sus sprites, cambie su resolución mínima admitida o vuelva a dibujar todos los activos para admitir esta resolución mínima.

  2. Cuando encuentre una resolución o relación de aspecto que no sea suficiente para cubrir toda la pantalla, extienda su juego (muestre más fichas), mientras mantiene intactos los activos. Sin embargo, deberías hacer tu juego para que aún se pueda jugar con la resolución / relación de aspecto mínima.

  3. Si no es posible extender el juego, llena las secciones de la pantalla que no sean del juego con negro; rayas en la parte superior e inferior, izquierda y derecha, o un marco negro. Esto es lo que hace el iPad cuando ejecuta aplicaciones de iPhone en modo ampliado. Esto también se usa ampliamente en emuladores.

  4. Renunciar a mantenerse fiel a la cuadrícula de píxeles. Pero luego debe dejar de usar activos artísticos de píxeles con esquinas afiladas. Luego, aumente / reduzca la escala utilizando el filtrado bilineal (u óptimamente bicúbico, si su plataforma lo admite). Esta es la mejor opción para maximizar el uso de la pantalla, al tiempo que mantiene la experiencia del usuario similar en todas las resoluciones compatibles.

Para mi juego, terminé haciendo la opción número 4, y estoy bastante sorprendido de lo bien que se ve en dispositivos que van desde 320 píxeles en vertical (un viejo Android 2.3) hasta 1536 píxeles en vertical (un iPad 2012 con pantalla de retina). Los activos originales están destinados a 600 píxeles en vertical (originalmente para visualización de 800x600 en una PC con Windows). Aunque para juegos posteriores, creo que una mejor resolución vertical lógica es 720 píxeles.

El juego utiliza una resolución virtual de alta resolución virtual de 600 píxeles, ajustada a la resolución nativa del dispositivo con filtrado bilineal. Esto significa que todas las coordenadas Y en el código van de 0 (parte superior de la pantalla) a 600 (parte inferior de la pantalla).

Para el tamaño horizontal, supongo que el ancho máximo es de 1080 píxeles, que es más que suficiente para cubrir incluso las relaciones de aspecto más amplias de 16: 9. Mis coordenadas x están centradas, por lo que x = 0 es el centro de la pantalla, y las coordenadas x van de -540 a la izquierda a 540 a la derecha. Me aseguro de que todo encaje entre -400 y 400 para admitir las pantallas más estrechas (4: 3)

Sin embargo, si tuviera que mantener la sensación de pixel art, ciertamente usaría las opciones 1 y 2. Lo que significa que solo escalaría en términos enteros para mantener la sensación de bloque de pixel art y diseñaría el juego de manera que la cantidad de visibilidad los mosaicos no son fijos y pueden adaptarse a cualquier resolución de pantalla / relación de aspecto.

Entonces, para (no) responder a su pregunta. Creo que reducir el tamaño del pixel art es una muy mala idea, por lo que no debes hacerlo. Hay otras formas de admitir diferentes resoluciones de pantalla que proporcionarán mejores resultados que simplemente cortar su arte cuidadosamente creado.

Pijama Panda
fuente
Estoy en la misma situación y me está volviendo loco. Nuestro juego es pixelart hecho para pantalla de 600px de altura. Pero si escalo a pantallas de 720p (PC), se obtiene un aspecto realmente horrible y ligeramente borroso. Realmente no sé qué hacer aquí. También pensé en hacer un mapa más grande para pantallas de 720p y mantener el pixelart como está, pero luego tengo el mismo problema para las pantallas de 1080p. Creo que deberíamos haber hecho pixelart 360p (o más pequeño), por lo que tendríamos una escala x2 y x3 perfecta para pantallas de 720 y 1080p. Ahora es demasiado tarde para eso. ¿Alguna otra idea o consejo?
Damian
8

Considere la posibilidad de generar las versiones reducidas en el momento del desarrollo e incluirlas directamente en el juego como un recurso. Haz esto con Photoshop o cualquier herramienta que encuentres crea lo que te gusta. Luego, haga que el juego seleccione dinámicamente el conjunto de arte adecuado para la resolución actual.

Aquí hay un par de razones por las que podrías hacer esto ...

Ahorra trabajo de procesamiento

Si reescala programáticamente en tiempo de ejecución, su software probablemente creará y almacenará en caché la obra de todos modos. Entonces, ¿por qué no incluir las versiones reducidas en el paquete de activos artísticos? Supongo que si hiciera la descarga más grande de lo que quisiera, podría importar, pero ahorrará algo de carga de CPU, escrituras en disco, etc.

Mayor control artístico

Si cambia el tamaño del arte usted mismo, tendrá un mayor control sobre la apariencia final. Es posible que eso no haga una diferencia si está reduciendo una pequeña cantidad, pero cuando llegue a resoluciones mucho más bajas, es posible que desee tener un mejor control artístico sobre la apariencia final. Por ejemplo, si se necesita enfatizar los ojos de un personaje específico, en realidad podría dibujar las versiones de menor resolución con los ojos no reducidos tanto para retener el efecto, algo que la escala programática no puede hacer.

El escalado dinámico no es perfecto

Puede tomar decisiones artísticas distintivas que no funcionan con el escalado dinámico. Por ejemplo, suponga que desea poner un borde, un contorno o resaltar alrededor de una imagen. Cuando se ve a una resolución más alta, esto puede verse bien, pero la versión reducida puede enturbiar o perder el efecto por completo. Pero si se hace a mano, puede aplicar específicamente el efecto a cada tamaño usted mismo y garantizar que conserve el impacto.

otros pensamientos

También podría hacer un enfoque híbrido, con un conjunto de recursos específicos de resolución que se utilizan donde se encuentran, y un conjunto genérico que se escala dinámicamente si no se encuentra una versión específica de resolución. Esto es un poco como funciona la plataforma Android. Alguna información sobre esto en http://developer.android.com/guide/practices/screens_support.html

Tim Holt
fuente
0

Cambiar el tamaño es más fácil que cambiar el tamaño porque está eligiendo información para desechar en lugar de tener que inventar información nueva (y posiblemente incorrecta) para llenar los vacíos. Con eso en mente, probablemente no necesite nada especial aquí y la mayoría de los algoritmos de remuestreo estándar del ámbito del procesamiento de imágenes deberían funcionar bastante bien para reducir una imagen: bilineal, gaussiano, Lanczos, etc.

Lanczos en particular podría ser una opción interesante ya que agudiza la imagen, posiblemente preservando los detalles que de otro modo se perderían al combinar varios píxeles en uno. Obviamente, esto tiene el costo de introducir potencialmente artefactos no deseados.

Algunas comparaciones visuales aquí: /gis/10931/what-is-lanczos-resampling-useful-for-in-a-spatial-context

Kylotan
fuente
3
-1, porque reducir el pixel-art (que generalmente es un píxel por píxel hecho a mano, por ejemplo ) nunca se verá bien con ninguno de estos algoritmos. Con un enfoque de vecino más cercano, perderá segmentos de línea importantes. Con la interpolación obtendrás imágenes borrosas. Me temo que no hay una respuesta satisfactoria a la pregunta de los OP, excepto hacerlo manualmente.
bummzack