Pour le faire efficacement sans `` générer toutes les options possibles '', vous allez vouloir utiliser une approche de superposition ... au moins en théorie, même si en pratique vous finissez par réduire les textures en couches à un seul sprite pour la réduction de l'appel d'appel , que je pense que vous devriez et détaillerez plus tard.
L'approche en couches consiste à avoir un ensemble de sprites pour tous vos personnages sans armes ni équipement, et des ensembles de sprites individuels pour chaque arme ou équipement alignés de telle sorte qu'ils puissent être rendus par-dessus les sprites du personnage de base pour former le personnage composite final.
Pour les sprites simples avec peu d'angles de vue (comme les sprites de combat des jeux traditionnels Final Fantasy), c'est relativement facile. Pour les sprites plus complexes (tels que les personnages de Diablo II, qui avaient plusieurs faces et une perspective isométrique), les sprites d'armes et d'armures seront plus difficiles à construire car vous devez laisser des "lacunes" dans le sprite quand il apparaîtra derrière le personnage. Un moyen simple de résoudre ce problème est de permettre aux sprites d'équipement d'être subdivisés en une couche "de premier plan" et "d'arrière-plan". Votre processus de rendu d'un sprite est alors logiquement:
- Rendez les couches d'arrière-plan de l'équipement (généralement uniquement des armes).
- Rendez le sprite du personnage de base.
- Rendre les couches de premier plan de l'équipement (généralement principalement des armures).
Cette méthode n'est pas infaillible (d'autant plus que vous augmentez le nombre de pièces d'équipement interchangeables indépendamment qui peuvent être équipées et ont également un impact sur un personnage rendu), mais elle fonctionnera pour une grande majorité de l'équipement une fois que vos artistes auront compris de la technique de création.
Un outil d'édition de sprites avec des couches à bascule sera essentiel car il est difficile d'animer une épée ou un bâton dans l'air vide sans qu'une couche de référence du personnage ne la balance. Si vos sprites sont réellement créés dans un outil 3D, cela peut être beaucoup plus facile de configurer ce pipeline.
Vous pouvez utiliser cette technique sous sa forme vanille comme décrit ci-dessus. Cependant, vous devez savoir que cela signifie augmenter le nombre d'appels de tirage par l'écran caractère significativement , ce qui peut être un problème sérieux dans un MMO où une fois doit au moins compte de la possibilité que de nombreux personnages seront à l'écran à temps.
La cuisson du rendu de couche combiné dans une seule feuille de sprite est un outil utile pour lutter contre ce problème. Vous devriez avoir du code qui effectuera les étapes de rendu ci-dessus dans une texture que vous pouvez enregistrer sur le disque ou mettre en cache en mémoire. De cette façon, vous pouvez payer le coût de rendu accru une fois, à chaque fois qu'un joueur change de vitesse, mais après ce rendu initial, vous passez à l'utilisation de la feuille de texture composite cuite pour toutes les images suivantes.
Pour une efficacité d'exécution maximale, assurez-vous que toutes les feuilles de sprite pour le caractère et l'équipement s'alignent exactement afin que vous puissiez simplement rendre la feuille entière et non les images individuelles. Vous pouvez utiliser différentes formes d'emballage bin hors ligne pour maximiser la disposition des images-objets sur la feuille, ainsi que la compression de texture, pour économiser de l'espace hors ligne.
Il est également possible de tirer parti de cette technique lors de la création du contenu de votre jeu: les personnages avec un équipement fixe, tels que les PNJ, peuvent être précuits pour économiser du temps d'exécution (en particulier pour les personnages qui peuvent apparaître fréquemment).
Vous voudrez également vous assurer que votre jeu est un moyen de signaler à n'importe quel joueur le type de personnage de base et l'équipement équipé des autres joueurs à proximité, afin que vous puissiez effectuer de manière préventive le compositing sur la machine d'un client pour savoir quand ces joueurs à proximité viendront finalement à la vue du joueur local.