Comment puis-je implémenter des sprites 2D pré-rendus qui peuvent faire face à n'importe quelle direction?

28

J'ai cherché sur Google comment des jeux comme Clash of Clans rendent leurs troupes, et il semble qu'ils pré-rendent les modèles 3D sur des feuilles de sprites 2D avant l'exécution, et rendent ces images 2D à l'exécution. Cependant, les troupes de Clash of Clans peuvent faire face à n'importe quelle direction.

Dans mon jeu similaire, si je devais créer une image pour chaque orientation (0-360 degrés) pour chaque type de troupe (il y a 18 types) à chaque image de leur animation, ils devraient produire une énorme quantité d'images. Je ne peux pas imaginer que c'est ce que font les autres développeurs, alors comment puis-je réellement y parvenir?

Kyle Lin
la source
2
La technique à laquelle vous faites référence s'appelle "Billboarding", soit dit en passant.
Weckar E.

Réponses:

45
  1. Il existe généralement moins de 360 ​​directions. Le cas courant est 8 ou 16. Les animations sont également assez courtes.

  2. L'automatisation est votre amie. Écrivez un script Blender / 3DMax / etc pour charger un modèle à partir de la liste, rendez-le dans chaque cadre et direction requis à une image. Marquez les images en fonction de leur contenu et adressez-vous-y depuis le jeu.

  3. Emballez le tout dans des atlas de texture (aka feuilles de sprite) pour un accès plus rapide.

À la fin, vous vous retrouverez avec plusieurs milliers de sprites, soigneusement emballés dans une douzaine d'atlas. Pas si grave;)

Je n'ai pas pu trouver une image de CoC, mais voici Diablo II, qui a utilisé la même approche pour les animations de personnages. Par exemple, attaque de mêlée sur Amazon:

entrez la description de l'image ici

Kromster dit soutenir Monica
la source
4
L'équilibre entre la puissance de rendu / temps par rapport à l'espace de stockage et le temps de téléchargement.
M. Mimpen
3
Qu'est-ce qu'un "atlas"? Un lien?
BЈовић
7
@ BЈовић Recherchez "Texture Atlas". C'est un concept très courant.
Kromster dit soutenir Monica
2
Il convient de noter que lors des discussions sur cette technique par les développeurs de Blizzard North, ils sont essentiellement arrivés à la conclusion que c'était une étrange mesure de décalage pour gérer un moment gênant dans les capacités graphiques du PC, et même alors, cela n'a pas vraiment finissent par en valoir la peine. Il y a eu une interview à ce sujet, et à la fin, il a fallu tellement de temps pour tout restituer que la conclusion générale était que ce n'était pas une excellente approche (et leur prochain jeu serait certainement en 3D).
KRyan
1
@KRyan bonne addition! Je suppose que c'était dû à la VASTE quantité de PNJ et d'équipement dans le D2. Pour CoC et les plates-formes mobiles, c'est un équilibre différent.
Kromster dit soutenir Monica
8

Gardez également à l'esprit la faible résolution de ces images. Il y a quelques autres choses que vous pouvez faire pour économiser de l'espace, bien que je ne sache pas lesquelles sont utilisées par Clash of Clans:

  • Vous pouvez biaiser le positionnement des troupes pour faire face aux directions standard (N, E, S, W, NE, SE, SW, NW) le plus souvent, puis optimiser uniquement pour les directions standard.

  • Vous pouvez faire une approche combinée, où vous pré-restituez seulement quelques directions. Pendant le cadre, vous pouvez rendre les troupes qui ne correspondent pas à une image existante, ou utiliser l'image la plus proche si vous manquez de temps.

  • Utilisez autant que possible les symétries gauche / droite pour réduire de moitié le nombre d'images enregistrées.

  • Vous pouvez hiérarchiser certaines animations comme la marche et le repos, en stockant plus de directions et d'images pour celles-ci. Ensuite, dépriorisez les autres animations, comme le balancement d'une épée, où vous stockez moins de directions et d'images (je suggère de conserver plus de directions pour la première et la dernière image de la balançoire).

  • Vous pouvez simuler les directions restantes en utilisant l'image la plus proche, puis en l'étirant.

Dans l'ensemble, nous pourrions parler de 18 unités, jusqu'à 8 directions, peut-être 2 secondes d'animations à 20 images par seconde, une moyenne de 64x64 pixels et environ 2 octets par pixel. C'est 18x2x20x64x64x2 = 50 Mo. Ils peuvent également mettre à l'échelle le nombre de directions, la résolution et le nombre d'images en fonction des capacités de l'appareil et du nombre d'unités utilisées sur la carte.

Peter - Unban Robert Harvey
la source
2
Vous pouvez également passer des panneaux d'affichage aux modèles 3D si vous zoomez à proximité d'un certain objet - il est donc proche de 3D, puis utilisez le 2d plus rapide lorsque vous avez juste beaucoup de choses en arrière-plan. La gestion de la transition en douceur peut cependant être délicate.
Tim B
@TimB Ce qui est particulièrement bon parce que vous finissez par rendre des résolutions élevées et utiliser des images pour des résolutions basses.
Peter - Unban Robert Harvey
2

En plus de la réponse de @Kromster, notez que les images sont souvent compressées de manière significative, et dans les grandes images "atlas" où il y a beaucoup d'éléments répétitifs (par exemple un arrière-plan vierge), la compression est importante. La "taille" finale des images n'est donc pas simplement une multiplication directe de la taille d'une image individuelle.

afaulconbridge
la source
5
La compression fonctionne différemment pour les GPU que pour les jpeg, en particulier les GPU mobiles dans les appareils pour lesquels Clash of Clans a été écrit. en.wikipedia.org/wiki/S3_Texture_Compression En d'autres termes: l'arrière-plan vierge n'est pas pertinent à 100% pour la compression de texture.
Peter - Unban Robert Harvey
-2

Pour un exemple classique, je vous suggère de télécharger le Doom original, qui utilisait des sprites 2D dans un environnement pseudo-3D. Les sprites avaient 8 directions opposées (par rapport au point de vue du joueur), et de mémoire environ 8 tailles différentes à mesure qu'elles se rapprochaient. C'était très visible, mais c'était assez acceptable pour le gameplay. Dans Clash ou d'autres jeux de visualisation isométrique, il n'est pas nécessaire de tenir compte de la distance, bien sûr.

Graham
la source
Il n'y avait pas de tailles différentes. Le rendu a simplement fait monter / descendre le plus proche voisin naïf selon les besoins.
R ..
@R .. Merci pour la correction. Cela fait quelques années que je ne l'ai pas joué! :)
Graham
1
Désolé, mais cela ne répond pas du tout à la question "Comment puis-je implémenter ..".
Kromster dit soutenir Monica
@Kromster Donc, pour une question demandant "comment puis-je implémenter cela?", Je ne réponds pas à la question avec un aperçu rapide d'un jeu classique implémenté (8 angles au lieu de 360), et mentionnant que la façon dont ils l'ont fait est particulièrement facile à voir lorsque vous y jouez, car l'OP ne pouvait apparemment pas le dire dans Clash? Et notant les différences entre ce cas général et le cas spécifique d'une vue isométrique? J'admets librement que ce n'est pas aussi bon que votre réponse, mais il y a une différence entre une réponse de moindre qualité et le fait de ne pas répondre à la question.
Graham