¿Cómo puedo implementar sprites 2D renderizados previamente que puedan mirar en cualquier dirección?

28

He estado buscando en Google cómo los juegos como Choque de clanes representan a sus tropas, y parece que están renderizando previamente modelos 3D en hojas de sprites 2D antes del tiempo de ejecución, y renderizando esas imágenes 2D en tiempo de ejecución. Sin embargo, las tropas en Choque de clanes pueden enfrentar cualquier dirección.

En mi juego similar, si creara una imagen para cada orientación (0-360 grados) para cada tipo de tropa (hay 18 tipos) en cada cuadro en su animación, tendrían que producir una cantidad masiva de imágenes. No puedo imaginar que esto es lo que otros desarrolladores están haciendo, entonces, ¿cómo puedo lograr esto?

Kyle Lin
fuente
2
La técnica a la que te refieres se llama "Billboarding", por cierto.
Weckar E.

Respuestas:

45
  1. Por lo general, hay menos de 360 ​​direcciones. El caso común es 8 o 16. Las animaciones también son bastante cortas.

  2. La automatización es tu amiga. Escriba un script Blender / 3DMax / etc para cargar un modelo de la lista, renderícelo en cada cuadro y dirección necesarios a una imagen. Etiquete las imágenes según el contenido y abordelas desde el juego.

  3. Empaque todo en atlas de texturas (también conocido como hojas de sprites) para un acceso más rápido.

Al final, terminarás con varios miles de sprites, perfectamente empaquetados en solo una docena de atlas. No es un gran problema;)

No pude encontrar una imagen de CoC, pero aquí está Diablo II, que utilizó el mismo enfoque para las animaciones de los personajes. Por ejemplo, ataque cuerpo a cuerpo de Amazon:

ingrese la descripción de la imagen aquí

Kromster dice que apoya a Mónica
fuente
44
El equilibrio entre potencia / tiempo de representación versus espacio de almacenamiento y tiempo de descarga.
M. Mimpen
3
¿Qué es un "atlas"? Cualquier enlace?
B 14овић
77
@ BЈовић Busque "Atlas de texturas". Es un concepto muy común.
Kromster dice que apoya a Mónica el
2
Vale la pena señalar que en las discusiones sobre esta técnica por parte de los desarrolladores de Blizzard North, básicamente llegaron a la conclusión de que era una extraña medida provisional para manejar un momento incómodo en las capacidades de gráficos de PC, e incluso entonces realmente no terminar valiendo la pena. Hubo una entrevista al respecto, y al final tomó tanto tiempo volver a renderizar todo que la conclusión general fue que no era un gran enfoque (y su próximo juego definitivamente sería 3D).
KRyan
1
@KRyan buena adición! Supongo que se debió a la gran cantidad de NPC y equipo en el D2. Para CoC y plataformas móviles, ese es un equilibrio diferente.
Kromster dice que apoya a Mónica el
8

También tenga en cuenta la baja resolución de estas imágenes. Hay un par de cosas más que puedes hacer para ahorrar espacio, aunque no sé cuáles de estas son utilizadas por Choque de clanes:

  • Puede sesgar el posicionamiento para que las tropas se enfrenten a las direcciones estándar (N, E, S, W, NE, SE, SW, NW) la mayoría de las veces, luego optimice solo para las direcciones estándar.

  • Puede hacer un enfoque combinado, donde renderiza previamente solo algunas direcciones. Durante el marco, puede representar las tropas que no coinciden con una imagen existente, o usar la imagen más cercana si se le acaba el tiempo.

  • Use simetrías izquierda / derecha siempre que sea posible para reducir la cantidad de fotogramas almacenados a la mitad.

  • Puede priorizar ciertas animaciones como caminar y descansar, almacenando más direcciones y marcos para estas. Luego, priorice otras animaciones, como el balanceo de una espada, donde almacena menos direcciones y marcos (sugiero mantener más direcciones para el primer y último marco del swing).

  • Puede simular las direcciones restantes utilizando la imagen más cercana y luego estirándola.

En general, podríamos estar hablando de 18 unidades, hasta 8 direcciones, tal vez 2 segundos de animaciones a 20 cuadros por segundo, un promedio de 64x64 píxeles y aproximadamente 2 bytes por píxel. Eso es 18x2x20x64x64x2 = 50 MB. También pueden escalar el número de direcciones, la resolución y el número de fotogramas en función de las capacidades del dispositivo y el número de unidades utilizadas en el mapa.

Peter
fuente
2
También puede cambiar de vallas publicitarias a modelos 3D si se acerca a un determinado objeto, por lo que está cerca de 3D y luego usa el 2d más rápido cuando solo hay muchos corriendo en segundo plano. Sin embargo, manejar la transición sin problemas puede ser complicado.
Tim B
@TimB Lo cual es especialmente bueno porque terminas renderizando resoluciones altas y usando imágenes para resoluciones bajas.
Peter
2

Además de la respuesta @Kromster, tenga en cuenta que las imágenes a menudo se comprimen significativamente, y en las imágenes grandes de "atlas" donde hay muchos elementos repetidos (por ejemplo, fondo en blanco) la compresión es significativa. Entonces, el "tamaño" final de las imágenes no es simplemente una multiplicación directa del tamaño de la imagen individual.

afaulconbridge
fuente
55
La compresión funciona de manera diferente para GPU que para jpegs, especialmente GPU móviles en los dispositivos para los que se escribió Choque de clanes. en.wikipedia.org/wiki/S3_Texture_Compression En otras palabras: el fondo en blanco es 100% irrelevante para la compresión de texturas.
Peter
-2

Para un ejemplo clásico, le sugiero que descargue el Doom original, que utilizaba sprites 2D en un entorno pseudo-3D. Los sprites tenían 8 direcciones enfrentadas (en relación con el punto de vista del jugador), y de memoria unos 8 tamaños diferentes a medida que se acercaban. Esto era muy visible, pero era lo suficientemente aceptable para el juego. En Clash u otros juegos de visualización isométrica no hay necesidad de considerar la distancia, por supuesto.

Graham
fuente
No hubo diferentes tamaños. La representación simplemente hizo que el vecino más cercano ingenuo aumentara / disminuya según sea necesario.
R ..
@R .. Gracias por la corrección. ¡Han pasado algunos años desde que lo jugué! :)
Graham
1
Lo sentimos, pero esto no responde a la pregunta "¿Cómo puedo implementar ..." en absoluto.
Kromster dice que apoya a Mónica el
@Kromster Entonces, para una pregunta que pregunta "¿cómo implemento esto?", No estoy respondiendo la pregunta con una descripción general rápida de un juego clásico implementado (8 ángulos en lugar de 360), y mencionar que cómo lo hicieron es particularmente es fácil de ver cuando lo juegas, ya que el OP aparentemente no podía verlo en Choque? ¿Y observando las diferencias entre ese caso general y el caso específico de una vista isométrica? Admito libremente que no es tan bueno como tu respuesta, pero hay una diferencia entre una respuesta de menor calidad y no responder la pregunta.
Graham