Making Off d'un level de jeu pour Unreal 2k3

Écrit le 28/11/2003 par Dams
Dernière mise à jour : 27/05/2006

1. Avant propos :

Je tiens avant tout, à préciser que je ne suis qu'un amateur en la matière, c'est pourquoi ce petit tutorial n'est qu'une somme de recommendations. En effet, je ne prétends pas être un pro en la matiere, ni que mes dires sont a prendres comme des paroles d'évangiles, mais je pense néanmoins pouvoir vous donner une idée plutôt juste de la conception d'un niveau de jeu.

L'activitée proposée ici, est en fait du level design . Il s'agit de créer un monde (ici en 3D), ou le joueur va évoluer. Mais ceci n'est pas aussi simple qu'il n'y parrait, car lorsque l'on se frotte au domaine du jeu vidéo, on se retrouve vite devant le 1er gros problème: la technique/optimisation. En effet bien que les moteurs 3D du moments soyent en constante évolution, le level designer doit toujours brider son imaginaire, pour faire un environnement low poly (avec le moins de poly possible), tout en tirant au maximum de chacun de ces poly, pour faire ressortir les détails et autres. Il faut ainsi s'adapter à la plate forme (moteur 3D), et une fois maitriser, en retirer un maximum. Il faut donc allier la technique et l'esthetique. S'ajouter à cela une notion de gameplay, qui demande beaucoups de pratique, afin de rendre ce dernier intéressant.

Maintenant, pour mon ptit making of, j'ai choisi de bosser sur le moteur du nouveau unreal, soit unreal tournament 2003.
Avant de commencer la conception du level, j'ai longuement réfléchis au thème, disposition de la map, pour que celle ci soit à la fois jouable techniquement, mais aussi originale, fun, et avec un gameplay équilibré.
Après quelques recherches (savoir si mes désires étaient adaptable à la plate forme choisie), j'ai donc choisi mon thème (attention on se moque pas ) : un royaume en pq.

La conception va se passer en plusieurs étapes:
*élaboration du level vue d'ensemble sur papier (croquis)
*conception des modèles qui meubleront la map, sous un logiciel 3D pro (3dsmax ici), avec modélisation et mapping des objets.
*création de tout ce qui touche a la 2D (textures) sous toshop
*convertion des modeles (mesh) vers l'éditeur jeu
*création du terrain, placement des mesh, mise en place d'une ambiance sonore (important), des entitées propres au fonctionnement de base du jeu, des entitées propres aux petits plus du jeu ... et tout ce que j'oublie :]

Bien sur chacune de ces étapes sont en constante évolution, et chacune d'entre elles s'entre-mêlent.

2. Préliminaires sur papier :

Etude préliminaire sur papier, fait de croquis, qui illustreront les idées, les concepts de la map.

3. Conception des statics meshs (modèles sous 3DSMAX)

Donc, le 1er modèle qui s'impose est qd meme celui du pq (cf thème). Voici sa création:
Je commence par la modélisation : une simple primitive 'tube' fera l'affaire, je modèle quelque peu les vertex pour avoir une forme moins cylindre, et plus pqzoïdale.
Une fois la modélisation de ce dernier bien avancée, je scanne un rouleau de pq sous tout les angles :
http://www.game-lab.com/images/tuts/pqland/pq_scan.jpgethttp://www.game-lab.com/images/tuts/pqland/pq_scann.jpg
Apres avoir scanné, je passe les images en revues sous photoshop pour donner plus de pêches aux couleurs, et effacer les éventuels défauts.
Je vais ensuite appliquer la texture au modèle 3D. Pour cette opération je vais réalisé une skin_map, c'est a dire que je vais rassembler tout les textures qui s'appliqueront à ce modele en un seul et meme fichier .bmp. Rassembler tte les textures en un meme fichier image, pour l'ensemble du modèle, est essentiel pour pouvoir ensuite récupérer le mesh sous la plate forme 3D. Pour ceci j'utilise l'uwp_map et l'uvwp_rap, en selectionnant a chaque fois les polys et la texture voulue.
Ainsi, avec le fichier image suivant :
http://www.game-lab.com/images/tuts/pqland/pq_map.jpg
J'obtiens le mesh suivant :
http://www.game-lab.com/images/tuts/pqland/pq_3D.jpg

La même opération va être répétée pour tout les meshs du niveau de jeu :
http://www.game-lab.com/images/tuts/pqland/champi_3D_1.jpg
http://www.game-lab.com/images/tuts/pqland/champi_map.jpg
http://www.game-lab.com/images/tuts/pqland/champi_3D.jpg

Et ainsi de suite ... on obtient notre petite bibliothèque de meshs en low poly, modelés et texturés sous 3dsmax :
http://www.game-lab.com/images/tuts/pqland/kit.jpg

4. Conception des textures en parallèle avec les modèles 3D

Création de fichier image image pour texturer les statics meshs. Le travail se passe sous photoshop. (cf partie précedente)

5. Convertion des modèles (meshs) vers l'éditeur jeu

Je peux commencer à convertir et à incorporer mes meshs fabriqués sous 3dsmax. Pour cela, pas besoin de plugins, je passe simplement par le format d'exportation ASCII en gardant les coordonnées de mapping des meshs.
http://www.game-lab.com/images/tuts/pqland/export.jpg

Sous l'utED je récupère les meshs, leur réattribue leurs textures, et enregistre les différents packs de modèles 3D et textures. En ce qui concerne les textures, il existe quelques limitations. En effet, la résolution de celles ci, ne doivent pas dépasser 1024*1024, et rester un multiple de 16 (ex.: 512*512). De plus celles-ci doivent être au format .bmp; mais il existe un format de compression spécialement créé pour unreal (DXT), qui permet une fois le bmp importé, de le compresser en gardant une qualité d'image presque identhique pour un poids largement moins important.

6. Les débuts sur l'utED

J'attaque maintenant sous l'éditeur de niveau, propre à la plate forme 3D choisie. Ici, j'ai choisi le jeu ut2K3, j'utiliserais donc l'unrealED (éditeur fourni avec le jeu).

Dans l'éditeur, je commence par créer une zone vide où le level va se meubler, se construire peu à peu.

J'implante ensuite le terrain de base. La nouvelle version de l'uted (celle utilisée ici) à une gestion intéressante de la création d'un terrain d'extérieur. En effet, on peut modeler celui ci à notre guise, 'peindre' dessus en temps réel avec une texture de terre, d'herbe, etc ... et le tout très facilement.

Voici donc une ébauche de la bête illustrant ce petit pragraphe :
http://www.game-lab.com/images/tuts/pqland/terrain_1.jpg

Je vais ainsi créer tout le terrain extérieur de mon niveau d'un seul coups, en suivant le plan du level, que je m'étais fixé au départ.

Je commence ensuite à placer mes statics meshs ...
Voici alors le début de la map, vue sous l'éditeur du jeu :
http://www.game-lab.com/images/tuts/pqland/uted_1.jpg

Après quelques heures de travail, j'ai fini de meubler la zone extérieure avec mes meshs.
Je réadapte ensuite le terrain créé au départ, pour que les meshs collent bien avec l'environnement.
J'avais parlé juste avant que l'éditeur de terrain etait plutot pas mal. Dans la version actuelle, il permet aussi de rajouter des sprites d'herbes un peu partout.
Je rajoute ainsi de l'herbe à quelques endroits, et j'incorpore des meshs d'arbres encore en plus (ces meshs étaient présents dans le jeu original, c'est pour cela que je n'ai pas eu a les faire au départ).
Commence ensuite, l'opération d'éclairage de la map. Cette opération consiste à placer des sources lumineuses pour mettre en valeur l'esthétique de la map, et aussi pour servir le gameplay. En effet des zones d'ombres peuvent par exemple être utile au jeu (le joueur peut s'y cacher etc) ... La marche a suivre est tjrs 'assez simple' :
je selectione mon type d'éclairage (omni, directionnel, lumiere dynamique, couleur de l'éclairage, intensité de l'éclairage ... etc), et je l'incorpore à l'endroit voulue.

La zone extérieure se présente (sous l'éditeur) sous la forme suivante :
http://www.game-lab.com/images/tuts/pqland/uted_2.jpg

Il est temps de faire un bilan sur le point de vue technique de la map. En effet, comme il est dit plus haut, tout ce qui touche à l'optimisation et aux ressources requises par l'environnement 3D créé, est tres important, car faire un level c'est bien beau, mais si celui-ci est trop lourd pour le moteur 3D, il sera injouable.
Le nouveau moteur 3D d'unreal est vraiment intéressant, car c'est pour le moment le moteur le plus performant en la matière. Il permet ainsi d'afficher une quantitée énorme de poly à l'écran. Apres un rapide calcul de poly par mesh, d'un level officiel du jeu, j'obtiens un chiffre ahurissant: presque 50000 poly dans une zone. Ce sera dc la limite à ne pas dépasser.
Je vais donc modeler ma zone de facon a ne pas dépasser cette limite, d'où l'importance, d'avoir dès le début, modelé ses meshs intelligemment, pour avoir un mdl en low poly d'une bonne qualitée visuelle.
Cette limite des 50000 poly ne s'applique que pour une 'zone'. En effet, un niveau de jeu en 3D, à une astuce pour alléger un level niveau ressource: il est zoné. C'est a dire, que si le joueur se trouve dans une zone, le pc de ce dernier ne va s'occuper que d'afficher (dc de calculer) que ce qui se trouve dans cette même zone. On définit ainsi des frontières, au dela desquelles, ce que l'on ne voit pas n'est pas calculé.
Ainsi pour ma map, j'ai choisi de faire une partie en intérieur, et grâce au zoning, je pourrais meubler l'intérieur jusqu'à une limite théorique de 50000 poly, vu que ce qui se trouve à l'intérieur ne sera pas lié l'exterieur.

Après ces petites explications techniques, je vais passer au niveau du gameplay.
J'ai en fait choisi de faire une map multijoueur pour ut2K3, dans le mode 'capture the flag'. Pour ceux qui ne connaisse pas, le principe est tres simple: deux équipe de joueurs s'affronte dans une map; le but pour chacune d'entre elles, est d'aller dans la base adverse, de prendre le drapeau ennemis qui s'y trouve, et de le ramener chez soi. Pour ne pas désiquilibrer le gameplay, le plus simple est de faire une map 'symétrique', c'est à dire avec le camp de chaque teams symétrique par rapport a une droite passant par le milieu de la map. C'est en gros un ying/yang géant.
Dans le cas présent, la base de chaque team se trouvera en dessous des chiottes géantes (gros trucs noirs de chaque coté de la map), dans une salle 'spéciale'. (une salle à part, d'ou l'utilité de 'zoner' la map).

7. La conception du ciel

A ce point, la zone extérieure du niveau commence sérieusement à prendre forme : la forme générale de l'architecture est faite (meshs implanté, terrain modelé, éclairage mis en place). D'un point de vue graphique il reste une chose essentielle dans la création d'un level en extérieur : le sky (le ciel quoi ).
Alors voyons voir le background : des chiottes géantes, du pq partout ... ba on va pas se compliquer la vie: on va mettre tout ca dans le ciel. ^^

Dans ut2K3, il est intéressant de bosser sur le sky, car il met à disposition du mappeur, pas mal de possibilitées. En effet pour expliquer tout ca, je vais tenter de faire le plus simple possible :
il est possible de matérialiser la map créée, par une entitée, et ensuite de placer cette dernière, a son tour, dans un environnement 3D pour créer un effet de lointains dans la map d'origine.

En gros on matérialise l'environnement 3D nommé 'A', par un entitée ponctuelle nommé 'B'. On met 'B', dans un autre univers 3D nommé 'C'. L'environnement 'C' sera en fait le sky (le décors) pour 'A', et grâce à cette petite manipulation, il est possible de créer un effet saissisant.

Place à l'image pour illustrer tout ca :
http://www.game-lab.com/images/tuts/pqland/uted_3.jpg

- 0 : c'est l'entitée matérialisant le level 'A'
- 1 : texture animée (imitant un soleil bleu), plaqué sur un mesh
- 2 : meshs de chiottes (les memes que dans 'A')
- 3 : meme chose que pour 1, mais cette fois ci il s'agit d'une planete
- 4 : série de mesh entourant le bas de 0, avec une texture animée de nuages opaques
- 5 : parois de 'C'. En effet 'C', est en fait un cube appartenant à la map, mais dans un coin bien caché. Ces parois sont recouverts d'une texture représentant le ciel lointains de la map.

Je vais maintenant bosser sur 5, c'est à dire la texture qui tapisse 'C'. il s'agit en fait de créer une texture de sky qui s'adapte avec le reste des éléments de 'C'. Pour cela, j'ai choisi une solution de facilitée, c'est à dire que je vais faire de la retouche de texture, et non pas recréer totalement une texture.

Ainsi je vais partir de :
http://www.game-lab.com/images/tuts/pqland/ciel4.jpg
(texture de ciel présente ds le jeu originale)

Utiliser l'image suivante :
http://www.game-lab.com/images/tuts/pqland/pq_3D.jpg

'Fusionner' le tout sous photoshop :
http://www.game-lab.com/images/tuts/pqland/v_cielf.jpg

C'est ainsi que se termine la création du ciel.

8. Premiers pas 'ingame'

Si on récapitule, on a une zone complètement aménagée d'un point de vue graphique. On va pouvoir commencer à visiter tout ca dans le jeu lui même (enfin!).

Pour cela, il manque des entitées de bases : les players_starts. Ce sont en fait les points de spawn (d'apparition) des joueurs dans la map. Je vais donc en placer dans les parties de la map, dans lesquelles je veux que les joueurs apparaissent puis renaissent après une mort éventuelle (mais plus que probable).

Après qques 10e de secondes de compilation(BSP/rendu de la lumière), je peux enfin visiter mon level dans ut2K3.

Voici donc, où j'arrive :
http://www.game-lab.com/images/tuts/pqland/ingame1.jpg
http://www.game-lab.com/images/tuts/pqland/ingame2.jpg

Ces screens proviennents d'une ancienne version de la map, mais qui sont qd meme un peu plus avancée que là où nous sommes arrêtés plus haut; il y a donc eu entre temps le rajout d'entitées de points de spawn des armes.

On implante en fait une entitée, qui dans le jeu correspondra à une borne de 'distribution d'armes'; ainsi lorsque le joueur passera dessus, il prendra l'arme qui se trouve à cet endroit. On peut régler dans les options de cette entitée le type d'arme qui sera distribué (sur le bas du 1er screen, on distingue un minigun sur la borne, mais il y a tte sorte de joyeusetées qui sont proposées : lance-roquette, biorifle, sniper-rifle ... etc). A régler aussi (entre autres), le temps que va mettre l'arme à réapparaitre sur la borne, apres qu'un joueur soit passé dessus pour l'acquérir, ou encore si l'on veut que l'arme dessus rotate, si oui, a quelle vitesse ... etc

9. Rajout d'entitées

Autres ajouts niveau entitée : les pillules d'adrénalines.
Dans les maps officielles du jeu, on peut trouver des items, tels que des kits d'energies pour reprendre de la vie, mais aussi des pillules d'adrénalines, qui s'accumulent dans une réserve (voir le hud des 2er screens ingame : en haut a droite de l'écran). Une fois que le chiffre de cette réserve atteinds le nombre 100, il est possible de faire des mouvements spéciaux pdts un temps donnés. C'est beau, tout ca mais pourquoi il nous raconte ca ?

J'ai en fait modifié l'apparence de ces pillules, par un meshs animés plus approprié :
http://www.game-lab.com/images/tuts/pqland/uted_4.jpg
(A gauche le nouveau modèle de pillule, à droite, l'ancien.)

Dans un niveau de jeu, l'intéractivitée ne s'arrête pas au simple fait de faire un décors strictement visuel. En effet, il faut aussi assigner pas mal d'entitées à celui-ci. Il existe un grand nombre d'entitée, donc de possibilitées possibles pour bosser sur cette intéractivitée.

Jusqu'à présent je ne me suis pas encore intéressé à une partie très importante sur le sujet : le son ou plutot l'ambiance sonore.
UT2K3 accepte différent type de fichier son, tel que le .wav, ou encore le .ogg.
Le .wav (8/16 bits de 8 a 22khz) servira en fait essentiellement pour tout ce qui est bruitages, comme les voix des bots, le bruits des armes etc ...
Le .ogg sera utile pour utiliser des musiques d'ambiances. C'est dans ce format, qu'il sera possible d'intégrer la musique de fond du level.

Ainsi pour coller le mieux possible a l'esprit de la map, j'ai choisi une musique d'ambiance un peu 'space' : Mirwais 'never young again' (pour ceux qui connaissent). Musique suceptible d'être changé avant la sortie de la map.
La musique d'ambiance ainsi choisie, je l'implante dans le level grâce à une entitée propre à cela.

Pour continuer sur le thème de l'ambiance sonore, il serait par exemple assez judicieux je placer d'autres sons pour faire vivre le niveau, tel le sifflement du vent par exemple ...

Toujours pour cette zone commune entre les 2 équipes, je vais rajouter des entitées de téléportations, menant de l'interieur de chacune des bases a un point en extérieur surplombant la map.
Le point de destination sera ainsi le haut des chiottes géantes pour chacune des équipes.

De même sur chacune de ces chiottes géantes se trouve encore d'autres entitées de téléportations menant le joueur de ce point à un autre endroit encore un peu plus haut dans la map.
(sur les rouleaux enfilés sur la branches géantes, devant les chiottes géantes - cf screens ingame)

Sur ces points surplombant une bonne partie de la map, j'implante des entitées pour faire apparaitres a ces endroits le fusils de snipers.

Après, cela, et toujours en ce qui concerne tout ce qui est armement du joueur, je dispose dans des coins un peu reculés (mais accesibles) dans les hauteurs de la map, les armes les plus puissantes.

Enfin, toujours au niveau du gameplay, j'incorpore le concept de 'pq moelleux'. :]

En effet, grâce à une entitée encore inutilisée jusqu'alors, je crée des jump_pad, c'est à dire des surfaces, sur lesquelles, le joueurs va rebondir/propulser en hauteur. La surface de rebondissement du jump_pad peut etre définit en largeur, longueur et hauteur (c'est un volume en fait), au contact duquel le joueur intéragira avec. Je les dispose ainsi sur les pqs posés sur la tranche. Pour avertir le joueur de la fonctionalité de ces pqs, j'incorpore par au dessus de chacun d'eux une entitée simulant un effet de particules.

http://www.game-lab.com/images/tuts/pqland/ingame3.jpg

La création de la zone extérieure touche à sa fin.

10. La partie intérieure (même façon de procéder)

Je commence donc ensuite l'intérieure de la base de l'équipe rouge.

Celle-ci se trouve dans la montagne, sous le chiotte géant. Pour cette zone en intérieur, j'ai décidé de changer complètement de style graphique, en essayant de garder quand même un lien plus ou moins prononcé avec le reste du level. (plus dans le moins que dans le plus dirons certains)

C'est pour cela, que j'ai décidé de modéliser le berceau des pensées d'un esprit hors du commun :
http://www.game-lab.com/images/tuts/pqland/cartes03.jpg

Cette chambre, où le coeur du camp des rouges, est en fait l'un des 2 cerveaux de la map, qui a engendré ce monde fantastique. Quoi de plus naturel qu'une chambre pour s'imaginer un lieu aussi irréel ...
(tiens j'ai même réussi à trouver un lien entre la chambre et le pq ^^)

De la même facon, que les 1er meshs de la map (pq, champignon, etc ...), je créais et texture sous max ma petite bibliothèque de meshs utile à la fabrication de la salle en question.

Le principal problème que va poser la mise en 3D de la chambre d'arles, c'est la restitution du non-respect des perspectives présent dans l'oeuvre originale ...

Après la modélisation, et le texturage de tt mes meshs, j'incorpore donc tout ca dans mon level, à la place voulue. J'en profite pour placer le drapeau rouge au milieu de celle-ci.

http://www.game-lab.com/images/tuts/pqland/ingame4.jpg
(+quelques effets de particules ...)

Le reste de la salle, avec au fond un des points de teleportations vers l'extérieur (cf paragraphe la dessus):
http://www.game-lab.com/images/tuts/pqland/ingame5.jpg

Un des 2 couloirs menant à la zone extérieure :
http://www.game-lab.com/images/tuts/pqland/ingame6.jpg

J'ai poursuivis, en retravaillant l'éclairage, pour bannir au maximum les zones contenant un trop grd contraste ombre/éclairé.
http://www.game-lab.com/images/tuts/pqland/v_lumiere1.jpg

En parallèle avec la phase de finition de l'éclairage, j'ai aussi meubler les zones intérieures tout en évitant de géner le joueur ds ces déplacements :
http://www.game-lab.com/images/tuts/pqland/v_meuble1.jpg
http://www.game-lab.com/images/tuts/pqland/v_meuble2.jpg

Toujours dans un soucis de pas gêner le joueur dans ces déplacements, j'ai 'englober' un max d'objet par un brush invisible mais créant une collision avec le joueur. Ainsi en longeant les murs de certains couloirs, le joueur pouvait se retrouver bloquer tt les 2 metres sur une poutre verticale. En englobant tte la longueur du mur par un bloc de collision invisible, ce meme mur 'n'accrochera' plus personne.

http://www.game-lab.com/images/tuts/pqland/v_uted_5.jpg

11. Les 'petits plus' ou un brin d'originalité

Niveau gameplay toujours, j'ai rajouté quelques bonus danss des zones cachées, un peu à l'écart du chemin habituel. Ces bonus sont en général des points de vie en plus, ou un bouclier ...

http://www.game-lab.com/images/tuts/pqland/v_bonus.jpg
(Ici un pad permettant de faire aléatoirement apparaitre n'importe quel type de bonus, afin de rajouter du fun et du piment au jeu.)

Autres :
http://www.game-lab.com/images/tuts/pqland/v_pano.jpg
(Indication de la direction de la base ennemis, ou encore du type d'environnement à venir.)

etc

12. Prévisulation du level, dans le menu du jeu

Une fois, tout ce petit monde mis en place, j'attaque l'integration de la map dans les menus. Pour cela je cré une texture animés contenu 3 shots général de la map qui défileront les uns derriere les autres avec des fades in/out pour la transtion. Tout se passe sous l'uted ds les options de la texture : je choisi le temps de transition entre chaque image, le nombre d'image a afficher, le temps d'afficher du shot choisi ... etc

http://www.game-lab.com/images/tuts/pqland/v_menu.jpg

13. Rajout de sons d'ambiances

Pour égayer le tout, on oublie pas quelques sons d'ambiance :
http://www.game-lab.com/images/tuts/pqland/v_uted_7.jpg
(Cette entitée va diffuser en boucle un son en .wav, comme bruit d'ambiance.Ici un son de vent sera tres bien.)

14. Le placement des paths nodes

Reste finalement la dernière étape de la construction de la map :
le placement des paths nodes et cie.

Les paths nodes sont des entitées ponctuelles, par lesquelles les bots (perso joué par l'ordinateur), devront passer. Ainsi on 'programme' en qques sortes leurs mouvements, en leur dictant les chemins à parcourir ds la map pour accomplir leurs objectifs (ici capturer le drapeau adverse).

L'objectif prioritaire sera donc de capturer le drapeau adverse, mais pour y parvenir, la map dispose d'au moins 3 chemins, et autant de solutions pour les bots de relier les 2 bases.

Là ou sa se complique legerement, c'est que la map n'est pas tte plate : elle se compose de teleporteur, de jump pad (point propulsant le joueur ds les airs), etc ... Il faudra donc placé les entitées appropriés au bon endroit, pour les bots intéragisse avec un maximum de réalisme virtuel ds le décor.

Ainsi, pour donner une idée, rien qu'une petite parcelle de terrain occupé par des paths nodes, ca donne ca :
http://www.game-lab.com/images/tuts/pqland/v_uted_6.jpg

On remarque different type de ligne reliant chaque paths nodes; ils indiquent une action différent pour le bot.

Une grosse partie de l'interet du jeu contre les bots repose sur cette étape, en effet si celle ci est négligé on se retrouvera sur une map avec des bots bloqués comme des c** contre les murs, ou alors accroupis dans un coin ... bref c'est chiant à faire, et c'est un passage plus qu'obliger.

15. Fin de l'aventure

Le nécessaire permettant de jouer à la map présentée dans ces 2 pages se trouve ici :
==> CTF-PQ.Land <==

http://www.game-lab.com/images/tuts/pqland/shot0.jpg

Gallerie d'images : PQland

Il vous sera ainsi possible de voir plus en détails les étapes de la création de la map, en vous plongeant ds le fichier source lui meme. (celui restant compatible avec l'éditeur après compilation)

Voici donc dans les grandes lignes, une explication de la création d'un niveau de jeu.