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?
Réponses:
Il existe généralement moins de 360 directions. Le cas courant est 8 ou 16. Les animations sont également assez courtes.
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.
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:
la source
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.
la source
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.
la source
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.
la source