Notions générales sur les textures
 
Les surfaces et les textures :
 
Les textures sont des images bitmaps qui seront plaquées sur les surfaces des polygones de la map créée. Chaque jeu a plus ou moin son propre format de texture, mais en fait le contenu de ces fichier texture diffèrent peu.
Avant de voir comment créer des textures, il faut comprendre comment elles sont appliquées sur les surfaces.
Une surface est définie par les coordonnées de ses sommets, il faut donc au moins 3 sommets pour une surface. Mais il y a encore une donnée supplémentaire qui est la normale. Cette normale est un vecteur qui défini quel est le côté visible de la surface, c'est un vecteur normalisé à 1 perpendiculaire à la surface.
Si on n'avait pas cette normale on ne saurais pas de quel côté la surface est vue, ceci est fait pour éviter qu'une surface soit dessinée recto verso. Il faut toujours économiser les ressources dans un jeu et tout ce qui n'est pas visible ne doit pas être rendu par le moteur du jeu.
Les textures sont appliquées sur la surface comme une projection orthogonale, une surface va en plus avoir des coordonnées de texture pour savoir quel est le positionnement de la texture sur la surface et quelle échelle a été choisie, on peut aussi biaiser la texture et l'étirer sur ses axes.
 
Le format des textures :
 
Le format des textures dépend du jeu, les anciens jeu utilisaient des fichier de texture compilés, ce qui signifie que les textures étaient composées de plusieurs éléments appelés mipmaps.
Quesque le mipmapping ?, le mipmapping est le fait d'afficher des textures de taille différente selon la distance à laquelle on la regarde. De près on utilise une grande texture détaillée et de loin une petite avec très peu de détails.
Par exemple à courte distance, on va utiliser la texture de 256 x 256 pixels et à grande distance on va utiliser la texture de 32 x 32 . Sur les distances intermédiaires on va utiliser la 64 x 64 puis la 128 x 128 .
Pourquoi fait-on cela ? , eh bien c'est pour limiter l'usage de la mémoire de texture de la carte vidéo. Lorsqu'une carte vidéo doit afficher les textures d'une map, elle doit les charger dans sa mémoire physique. Le moteur du jeu décide quelles surfaces sont visibles puis envoie à la carte vidéo les textures à mémoriser.
Ce qui veut dire que si on utilise que des texture 256 x 256, il faudra beaucoup de mémoire pour tout stocker. Les anciennes cartes vidéo avaient peu de mémoire car ça coutait très cher, elles avaient souvent 4 meg de mémoire au total. Ce qui veut dire qu'il fallait 2 meg pour mémoriser l'affichage en cours et 2 meg restaient pour les textures. C'était le cas des cartes Voodoo 1 par exemple.
Ceci signifiait que la totalité des textures visible ne devait pas dépasser 2 meg. C'est pourquoi on a utilisé le mipmapping qui permettait d'afficher de grande textures que pour les surface très proche, les surfaces lointaines utilisaient de petites textures.
De cette manière on limitait l'usage de la mémoire, de plus on utilisait des textures 8 bits (256 couleurs) seulement pour limiter l'usage de mémoire, les jeux très anciens comme Quake 1 et Quake 2 avaient mêmes une seule palette de couleurs pour toutes les textures du jeu. Avec une seule palette on limitait encore la taille des textures dans la mémoire.
Il fallait donc créer toutes les texture au format bmp 8 bits en utilisant une palette unique, ce qui limitait énormément les nuances et donnait des jeux avec des dominantes très marquées, par exemple Quake 2 avait une dominante brun rouge car il y avait beaucoup de surface métalliques rouillées et pas mal de sang.
Un jeu comme Jedi Knight utilisait une méthode légèrement différente, on avait une palette par niveau, mais les deux tiers de la palette était toujours les même pour les objets communs à tous les niveaux. Ca permettait d'avoir des niveaux avec des tons différents.
Une fois qu'on avait terminé la texture, il fallait la compiler au format du jeu. Le programme de compilation supprimait la palette du fichier bmp puis créait les mipmaps de tailles décroissantes et les enregistrait dans un fichier wal.
On utilisait en général 4 mipmaps, ce qui veut dire qu'une image bmp de 256 x 256 donnait un fichier texture composé de 4 images : 256x256, 128x128, 64x64 et 32x32.
Plus tard avec l'évolution des cartes graphique (par exemple Voodoo 2) on avait 4 meg pour les textures, ce qui permettait de ne plus avoir une seule palette pour toutes les textures, mais une palette de 256 couleurs pour chaque texture.
C'était le cas de Half-Life, Sin, Daikatana et de Unreal, la différence se voyait au premier coup d'oeil et les jeux ont énormément gagné en qualité de rendu graphique.
Plus tard avec des cartes graphique ayant 16 ou 32 meg de mémoire, on a pu utiliser des textures 24 bits et même 32 bits pour utiliser le canal alpha des transparences.
Mais la taille était toujours limitée à 256 x 256 pour que les cartes Voodoo puissent toujours être utilisées, et on utilisait toujours des texture avec mipmap compliées. C'était le cas de Soldier of Fortune. Kingpin lui utilisait déjà directement des texture au format tga non compilées.
Ce n'est qu'à partir de Quake 3 que la taille des textures a dépassé cette limite, on avait des texture de 512 x 512 voir même 1024 x 1024.
Avec l'arrivée de Quake 3 la compilation des textures et le mipmapping précalculé a disparu, on pouvait utiliser des textures au format tga ou jpg
Pour pouvoir afficher ces textures, il faut impérativement un port AGP et des cartes avec au minimum 32 meg de mémoire.
Pour les jeux encore plus récents comme Return to Castle Wolfenstein ou Medal of Honor il vaut mieux avoir 64 meg de mémoire vidéo pour un affichage parfait.
Mais dans le cas de Soldier of Fortune 2 ou Jedi Knight Outcast ou encore Tournament 2003, le nombre de très grandes textures a augmenté et il faut maintenant 128 meg de mémoire vidéo pour utiliser les réglages maximums sans avoir de ralentissement.
 
Le dessin de textures :
 
Dessiner des textures est un travail difficile, il faut avoir un don artistique plus des connaissances en géométrie. En effet, comme les textures sont très souvent appliquées sur de grande surface à petite échelle, la texture va se répéter plusieurs fois sur la surface et il faut éviter d'avoir un effet de damier.
Certain jeu comme Half-Life donnent la possibilité de créer plusieurs textures semblables avec de légères différences, ensuite le moteur va les choisir au hasard pour avoir un effet plus irrégulier et plus naturel.
Certaines textures pour les jeux modernes ont des transparences pour créer des textures de feuillage ou de grillages par exemple. Certain jeux plus anciens définissaient une couleur spécifique comme transparente pour avoir des effets semblables.
Mais le plus grand progrès actuel à partir de Quake 3 a été le multitexturing, c'est à dire qu'on va appliquer plusieurs textures en couches sur une surface avec des transparences de divers types.
Certaines de ces couches vont servir à créer le bummapping par exemple qui va donner du relief à une texture en créant des ombres portées artificielles.
Mais la pluspart du temps ces couches vont servir à créer des animations, ou à définir des zones avec des éclairages différents. Par exemple une lampe sur un mur. On aura la texture du mur de fond recevant l'éclairage normal des lumières ambiantes et dynamiques et une couche transparente sauf à l'endroit de la lampe qui ne dépendra pas de l'éclairage ambiant et qui aura une valeur d'éclairage définie.
Ce qui fait que dans le noir la lampe ressortira très nettement sur le mur et son éclairage ne changera pas si tout s'éclaire.
Ces textures en couches sont traitées comme une texture normale pour l'éditeur de map, on va alors ne pas prendre l'image comme texture, mais un fichier shader qui contient les informations sur les couches à afficher. Pour l'éditeur de map une texture de base sera affichée, mais dans le jeu on verra toutes les couches superposées.
Tout ceci fait qu'une texture finale sera composée de plusieurs textures avec des zones transparentes, il faudra donc travailler en couches et faire en sorte que ces couches se superposent sans erreurs, puis chaque couche sera enregistrée et un fichier shader sera créé pour définir comment et dans quel ordre les transparences seront appliquées.
 
 
 Les bases de données de textures :
 
 Il y a des sites où on peut charger des textures qui sont mises à disposition par de généreux donateurs.
 Par exemple :
Wadfather