====== Gestion des textures pour les avatars ====== Dans le jeu, les créatures (monstres ou animaux) utilisent tous des textures d'une taille de 512x512 pixels. Suivant la complexité de la créature et sa taille, on trouvera sur un fichier DDS de 1 à plusieurs créatures. Pour les personnages, là on trouve dans le répertoire ''meshes'' une multitude de petits fichiers DDS, l'un étant la texture d'un bras, l'autre le pantalon, etc ... Chose étonnante, leur tailles qui n'ont rien à voir avec les valeurs puissance 2 (comme on le voit beaucoup en informatique). En fait cela cache une astuce que nous allons découvrir ici. Cet article a été tiré à l'origine de l'ancien blog d'Etory (Terd Seglet). Il est à compléter et à corriger si besoin est. ===== Les textures des objets Cal3D dans LE ===== La plupart des cartes graphiques 3D permettent de gérer des textures que l'on applique sur les triangles composant les meshes. Pour cela on aplatit le maillage pour pouvoir indiquer les textures de chaque triangle. Pour ceux qui seraient intéressés, cette technique est appelée [[http://en.wikipedia.org/wiki/UV_mapping|UV mapping (lien en anglais)]]. Ces textures ont pour tailles maximales 256x256, 512x512 ou 1024x1024 suivant la puissance de la carte graphique. Il est à noter que si les cartes modernes acceptes des textures de taille différente de 2^X, ce n'est pas la cas des cartes plus anciennes. Dans le jeu, les textures les plus grandes font 512x512 pour fonctionner avec le maximum de carte même plus ancienne mais aussi pour des questions de place mémoire (256x256 prend 4 fois moins de place en mémoire que 512x512 par exemple). Par exemple la texture pour les tigres est : {{:participation_au_projet:graphismes:texture_tigres.jpg|}} Cette texture est commune au deux tigres (normal et des neiges). Chose intéressante également est que la texture sera plaquée de chaque côté du tigre de manière symétrique afin de gagner de la place sur la texture. Donc chaque créature est décorée comme cela dans le jeu. ===== Et les avatars et leurs équipements ... ===== Oui les avatars eux aussi utilisent le même principe de texture mais avec une astuce supplémentaire. Comment faire cohabiter différentes couleurs de peau, différentes armures ou chemises, différents pantalons et bottes, etc ... sur une texture de 512x512 pixels. Les combinaisons sont multiples et si on devait créer une texture pour chacune d'elles, le jeu serait trop gros à télécharger. D'abord voyons quelles sont les textures qui compose un avatar : | un couvre-chef:\\ un casque, chapeau\\ {{:participation_au_projet:graphismes:texture_casque.jpg|taille 78x27}} | une tête\\ {{:participation_au_projet:graphismes:texture_tete.jpg|taille 64x64}} | les cheveux\\ {{:participation_au_projet:graphismes:texture_cheveux.jpg|taille 67x96}} | le torse\\ {{:participation_au_projet:graphismes:texture_torse.jpg|taille 98x107}} | | les bras\\ {{:participation_au_projet:graphismes:texture_bras.jpg|taille 80x80}} | les mains\\ {{:participation_au_projet:graphismes:texture_mains.jpg|taille 32x32}} | les jambes\\ {{:participation_au_projet:graphismes:texture_jambe.jpg|taille 80x80}} | les bottes\\ {{:participation_au_projet:graphismes:texture_bottes.jpg|taille 78x80}} | | l'arme\\ {{:participation_au_projet:graphismes:texture_epee.jpg|taille 78x72}} | le bouclier\\ {{:participation_au_projet:graphismes:texture_bouclier.jpg|taille 78x72}} | la cape\\ {{:participation_au_projet:graphismes:texture_cape.jpg|taille 125x77}} | | Et un jour peut être le carquois de flèches. Les US gère la texture du carquois et des flèches dans l'emplacement du bouclier car il est vrai qu'il est impossible de se servir d'un arc quand on porte un bouclier. Comme pour le tigre, on retrouve ici le principe de symétrie dans les textures. Par exemple le côté gauche du torse est la symétrie du côté droit, pareil pour le visage, le pantalon ... Cela permet de gagner de la place mais au détriment de l'apparence de l'avatar. Par exemple, n'espérez pas mettre un beau blason de lion sur votre torse car celui-ci n'est pas symétrique. Dommage mais bon c'est comme ça. ===== Oui mais la texture 256x256 c'est où ? ===== Et bien l'astuce est dans le programme du client, plus exactement dans la fonction ''load_bmp8_enhanced_actor'' du fichier ''textures.c'' (dans le code source du client). Cette fonction va, pour chaque avatar affiché à l'écran, reconstituer la texture 256x256 à partir des caractéristiques de l'avatar et de son équipement. En fait la texture reconstituée est la suivante : {{:participation_au_projet:graphismes:textureformat.jpg|}} Ce programme recrée la texture ci-dessus en plaçant les différents fichiers textures dans les positions suivantes : * pantalons (pants) : 78,175 * bottes (boots) : 0,175 * torse (torso) : 158,149 * manches (arms) : 0,96 * mains (hands) : 67,64 * tête (head) : 67,0 * cheveux (hair) : 0,0 * arme (weapon) : 178,77 * bouclier (shield) : 100,77 * casque (helmet) ou chapeau (hat): 80,149 * cape : 131,0 exemple : {{:participation_au_projet:graphismes:texture_exemple_blender.jpg|}} {{:participation_au_projet:graphismes:textureformat1.jpg|}} Cela explique la taille de chaque texture individuelle. Il ne reste d'ailleurs plus beaucoup de place (zone blanche) pour rajouter de nouveaux objets sur les avatars. Créer de nouveaux équipements, impose de se conformer à ces tailles de texture. Toutes les armes ou les boucliers, par exemple, devront avoir une texture de 78x72 quelque soit la taille du mesh par rapport au reste de l'avatar. Ce sont des limitations imposées par le programme et si on devait les modifier, il faudrait modifier cette fonction ''load_bmp8_enhanced_actor'' du programme client.