¿Cómo debo manejar la creación de sprites para personajes 2D personalizables?

8

Quiero crear animaciones de avatar (sprites) para un MMORPG basado en navegador. El jugador puede personalizar el personaje, y el contenido cambia a menudo (nuevas armas, armaduras, etc.). ¿Cómo puedo gestionar estructuralmente la creación y actualización de todas las hojas de sprites?

La cantidad de combinaciones diferentes es lo suficientemente grande como para que simplemente generar todas las permutaciones no funcione.

Esto puede basarse en el servidor o en el cliente, pero si funciona completamente en el cliente, manténgalo solo en HTML5 / CSS / Canvas / WebGL.

Lauri Laakso
fuente
3
componiendo jugadores de múltiples sprites + tinte de color
LearnCocos2D
Un artículo relacionado sobre la generación de este tipo de sprites: gamasutra.com/blogs/DavidYork/20161130/286500/…
MichaelHouse

Respuestas:

14

Para hacer esto de manera efectiva sin 'generar todas las opciones posibles', querrá usar un enfoque de capas ... al menos en teoría, incluso si en la práctica eventualmente colapsa las texturas en capas en un solo sprite para la reducción de llamadas de sorteo , que creo que deberías y detallaré más adelante.

El enfoque de capas implica tener un conjunto de sprites para todos tus personajes sin armas o equipo, y conjuntos de sprites individuales para cada arma o equipo alineados de tal manera que se puedan superponer los sprites del personaje base para formar el personaje compuesto final.

Para sprites simples con pocos ángulos de visión (como los sprites de batalla de los juegos tradicionales de Final Fantasy), esto es relativamente fácil. Para sprites más complejos (como los personajes de Diablo II, que tenían múltiples caras y una perspectiva isométrica), los sprites de arma y armadura serán más difíciles de construir porque debes dejar "huecos" en el sprite cuando aparezca detrás del personaje. Una manera simple de aliviar ese problema es permitir que los sprites del equipo se subdividan en una capa de "primer plano" y "fondo". Su proceso para renderizar un sprite es entonces lógicamente:

  1. Renderiza las capas de fondo del equipo (generalmente solo armas).
  2. Renderiza el personaje base sprite.
  3. Renderiza las capas de primer plano del equipo (generalmente principalmente armadura).

Este método no es infalible (especialmente a medida que aumenta la cantidad de piezas de equipo intercambiables de forma independiente que pueden equiparse y también impactan a un personaje renderizado), pero funcionará para una gran mayoría del equipo una vez que sus artistas se acostumbren de la técnica de autoría.

Una herramienta de edición de sprites con capas conmutables será crítica porque es difícil animar una espada o un bastón que se balancea en el aire vacío sin una capa de referencia del personaje que lo balancea. Si sus sprites se crean realmente en una herramienta 3D, puede ser mucho más fácil configurar esta tubería.

Puede usar esta técnica en su forma de vainilla como se describe anteriormente. Sin embargo, se debe tener en cuenta que esto significa aumentar el número de llamadas extraída personaje en la pantalla de manera significativa , lo cual puede ser un problema grave en un MMO donde una vez como mínimo, deberá dar cuenta de la posibilidad de que muchos personajes estarán en pantalla a una hora.

Hornear el renderizado de capa combinada en una sola hoja de sprite es una herramienta útil para combatir este problema. Debe tener un código que realice los pasos de representación anteriores a una textura que puede guardar en el disco o en la memoria caché. De esa forma, puede pagar el aumento del costo de renderizado una vez, cada vez que un jugador cambia su equipo, pero después de ese render inicial, cambia a usar la hoja de textura compuesta horneada para todos los cuadros posteriores.

Para obtener la máxima eficiencia de tiempo de ejecución, asegúrese de que todas las hojas de sprite para el personaje y el engranaje se alineen exactamente para que pueda renderizar toda la hoja y no cuadros individuales. Puede usar varias formas de empaquetado fuera de línea para maximizar el diseño de los sprites en la hoja, así como la compresión de texturas, para ahorrar espacio fuera de línea.

También es posible aprovechar esta técnica durante la creación de contenido de su juego: los personajes con equipo fijo, como los NPC, se pueden hornear previamente para ahorrar algo de tiempo de ejecución (particularmente para los personajes que pueden aparecer con frecuencia).

También querrás asegurarte de que tu juego sea una forma de informar a cualquier jugador el tipo de personaje base y el equipo equipado de otros jugadores cercanos, para que puedas hacer la composición de manera preventiva en la máquina de un cliente para cuando esos jugadores cercanos eventualmente vengan a la vista del jugador local.


fuente