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 |
|
|
|
|