Terrain sous Unreal 2
Introduction
La création de terrain sous UT2003/2004 est relativement facile une fois que l'on a compris comment ajouter des layers et comment paramétrer l'Heightmap. À partir de là, il me semble inutile de réexpliquer tous les outils un par un. Malheureusement, il est beaucoup plus compliqué de procéder à cette opération sous Unreal2, et pour cause, la création d'un terrain à partir de rien est impossible du à un problème de l'éditeur.
Pour commencer, il est préférable (mais pas obligatoire), de lire le tutorial du même nom et du même but destiné à UT2003 et UT2004, par moi-même.
Il est possible de s'en passer car je reprends tout depuis le début (mais pour mieux assimiler certains concepts, il est bon de repasser par l'autre tuto, car mon expérience s'est agrandi et je ne suis pas sur de toujours bien me faire comprendre par les débutants).
Le terrain, c'est avant tout une texture en noir et blanc qui sert à l'éditeur pour faire monter et descendre les "quads", des pièces de géométrie, faisant partie d'un énorme bout de géométrie, que nous appelons terrain. En d'autres termes, le terrain est un assemblage de "quads" (petites figures géométriques à 4 cotés, d'où leur nom), qui ensemble, texturés, forment le terrain.
L'Heightmap est une texture carrée, que l'on peut créer sous n'importe quel logiciel de dessin (oui, même Paint), qui correspond en fait à une carte du terrain en sachant que les zones les plus claires sont les plus hautes, les plus basses sont les plus sombre, et les valeurs de gris intermédiaires sont les différence de hauteur.
Lorsque vous aurez joué à Unreal 2 (j'espère que c'est fait, ce jeu est une démonstration technique et, somme toute, pas désagréable à jouer), vous repérerez certainement des passages magnifiques, qui se feront (car je vous le dit), en extérieur, à l'image de la map "MM_Waterfront", qui est tout à fait surprenante par la beauté de sont terrain, réaliste au possible, et dont voici une image prise sous l'éditeur, parmi toutes celles que j'aurais pu prendre :
Comment ? Oui, je sais, c'est beau, c'est le plus beau terrain qu'il m'ait été donné de voir sous Unreal, et c'est pas les ridicules cartes d'ONS d'UT2004, avec leurs terrains basiques, plats et mornes, qui diront le contraire (je connais un Hourences qui a beaucoup de boulot pour en arriver là, et vous aussi, je donne d'ailleurs des cours du soir d'embellissement de terrains sous Unreal, si ca vous intéresse, patientez jusqu'à ce que je vous passe un coup de fil chez vous (si vous n'avez pas de téléphone, patientez ... jusqu'à ce que vous en ayez un.)). Si vous voulez vous balader dans ce terrain magnifique et l'avoir en plein écran, pour profiter et vous instruire sur la création de terrain, ma foi, achetez vous le jeu, c'est un bon investissement.
Malheureusement, il est pour le moins ardu de créer le terrain. Au boulot !
Création à partir de zéro
Créez un cube de 16384*32768*32768, soustrayez-le, texturez-le comme vous voulez, puis ouvrez l'actor browser et choisissez la zoneinfo, dont voici la place pour les habitués d'UT qui seront perdu dans l'actor browser (faut s'adapter au changement, ca fait toujours un choc au début).
Placez la zoneinfo au milieu du cube, et dans ses propriétés, Zoneinfo=>bTerrainZone, mettez True.
Le cube est prêt à accueillir votre Terrain. Maintenant, les choses vont se compliquer.
Sous UT2003/4, il est possible de créer le terrain en cliquant sur, pour ouvrir le TerrainEditing Tool. Ensuite, on pouvait simplement créer un terrain à partir de rien en cliquant sur la petite page blanche dans le coin.
Mais sous Unreal 2, si vous cliquez ici, vous obtenez ce message :
Oui, vous lisez bien, "Not Implemented Yet", les programmeurs n'ont pas implémentés cette fonction dans l'UnrealEd d'Unreal 2, ils n'ont pas eu le temps, questions de délais (ces mêmes délais qui ont menés au raccourcissement dramatique du jeu solo, bien triste donc). Pour passez outre, il va falloir créer l'Heightmap dans un autre programme.
A priori, Paint suffirait. Toute l'idée est de faire une texture grise puis de la faire venir et de l'éditer sous UnrealEd. Les deux seuls formats qu'UnrealEd accepte d'importer sont le .PCX et le .BMP.
A ce moment là, plusieurs solutions s'offrent à vous. La plus simple est d'ouvrir Paint, qui est toujours fournis avec Windows (que les utilisateurs de Linux ou Mac OS cherchent, je ne leur dirais pas quoi utiliser car je ne connais pas, z'avez qu'à avoir le même OS que tout le monde), et de faire dans les menus du haut, Affichage=>Attributs, et dans la fenêtre qui s'ouvrira, entrer la taille de l'Heightmap, qui doit être une puissance de 2 (c'est à dire 2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536, ET AUCUN AUTRE).
Je ne vous conseille pas de dépasser 256 comme taille, car au dessus, la multiplication des quads du terrain ruinera vos performances sans rien apporter, et cela détruirait l'intérêt de l'éditeur : créer l'illusion du détail avec PEU de polygones. Il existe une astuce pour augmenter la taille du terrain sans multiplier la taille de l'Heightmap (et donc le nombre de quads), que je vous donnerais plus tard, quand le moment sera venu. Je vous rappelle que pour avoir la taille de l'Heightmap, il faut prendre le coté du cube qui contiendra votre terrain et le diviser par 64. Nous avons choisis un cube de 32768*32768, aussi, en le divisant par 64, on obtient 512. Comme je vous l'ai dit, il vaut mieux ne pas dépasser 256. Aussi, réglez la fenêtre de Paint ainsi :
Remplissez entièrement la texture par une couleur grise quelconque. Ensuite, sauvegardez l'image sous le nom "Heightmap01.bmp". Assurez-vous que vous avez bien choisi le format .BMP.
Revenez dans l'éditeur. Dans l'actor browser, choisissez le Terraininfo.
Attention ! Cliquez droit au milieu de votre cube et ajoutez votre Terrainfo, puis, ne touchez plus à rien : tout ce que vous pourrez faire avec le Terrainfo fera planter l'éditeur, Y COMPRIS LE DEPLACER.
C'est d'ailleurs un bon moment pour sauvegarder la map, exécutez donc une bonne sauvegarde. Ensuite, ouvrez le texture Browser, et choisissez File=>Import, puis dans la fenêtre qui s'ouvre, retrouvez le fichier Heightmap01.bmp que vous avez enregistré plus tôt :
Ensuite, cliquez sur "Ouvrir", et réglez la fenêtre qui apparait comme suit :
Réglez bien PARFAITEMENT comme ci-dessus, choisissez bien le package MyLevel, très important, le group que vous voulez (mais essayez de suivre le tuto tant qu'à faire), et pour le nom, laissez le même que le fichier .BMP. Décochez bien "generate mipmap", pour éviter la création d'artefacts visuels désagréable et des bugs de collisions affreux à votre terrain, et ne choisissez pas de compression pour la même raison.
Cliquez ensuite sur "OK". Vous êtes amené au package MyLevel ou vous avez mis votre texture, et vous l'avez devant vous :
Sélectionnez là. Vous noterez que, comme vous n'avez pas choisi de compression, l'image est au format [RGBA].
Maintenant, assurez-vous que le Terrainfo est bien sélectionnée. S'il ne l'est pas, cliquez sur lui en faisant bien attention à ne pas le déplacer.Dans les propriétés, Terrainfo=>TerrainMap, cliquez sur le champ de texte devant et sur le bouton "util" qui y apparait : votre Heightmap est entré dedans.
Ensuite, on va sauvegarder (le plantage est au bout de la souris, l'éditeur d'unreal2 est décidément trop instable pour mapper dans de bonnes conditions, mais ca vous donnera de bonnes habitudes).
Une fois ceci fait, rebuildez pour faire bonne mesure, et il va falloir créer un layer nouveau pour pouvoir le voir notre terrain. Pour cela, ouvrez le texture browser, package ScottT, et choisissez dans le group "alpha", la texture "dirt particle", comme sur ce screen :
Maintenant, nous allons ouvrir le terrain editing tool
: (ne cliquez pas sur l'actor terrainfo, mais sur l'icone dans la barre d'outil à gauche).
Cliquez sur l'onglet "Layer", qui vous permet d'ajouter des textures à votre terrain, puis sur le premier bandeau rouge noté "undefined", et enfin sur le bouton "new", pour en ajouter un (qui sera la texture par défaut de votre terrain). Réglez la fenêtre qui s'ouvre comme suit :
Il faut absolument mettre MyLevel comme package, car de même que l'Heightmap, cette texture doit être chargée avec la map. Le group, vous pouvez mettre ce que vous voulez, mais tant qu'à faire, autant faire comme moi, ca pourrait éviter des confusions.
Le nom aussi est celui que vous voulez, mais tant qu'à faire, je vous conseille de le numéroter, car au fur et à mesure, ca vous servira à mieux comprendre où vous en êtes.
Le champ suivant, contient une bande noire. Cliquez dessus, puis cliquez sur le petit "+" qui apparait devant "ALPHAFILL".
Plusieurs champs apparaissent. Laissez le premier, le champ A, à 0, et mettez les champs R, G et B à 255, le bandeau deviendra blanc. Cliquez maintenant sur "OK". Rebuildez votre map et sauvegardez-la.
La première chose qui vous frappera c'est que tout est noir. Mettez vous en mode "textured" en cliquant ici :
Regardez vers le bas, et observez votre terrain. Déjà, il est beaucoup trop petit. De plus, il est à EXACTEMENT 8192 unités en dessous du Terrainfo, contrairement à UT2004, ou il est exactement au niveau de l'actor terrainfo.
Comme votre terrainfo est à 0 unités de hauteur, votre terrain est à -8192 unités, et votre cube est haut de 16384, et s'élève de 8192 unités au dessus et en dessous du point 0, ce qui techniquement se traduit par le fais que votre terrain est exactement au niveau du fond du cube, et que du coup, il a l'air de "clignoter".
Sélectionnez votre Terraininfo et montez là juste de quelques centimètres pour que votre terrain soit au dessus du fond de la boite et qu'il soit normal. Une fois ceci fait, il va falloir faire en sorte que le terrain soit à la bonne taille sans démultiplier la taille de l'Heightmap et donc le nombre de Quads.
Pour ce faire, nous entrons dans les propriétés du Terrainfo, dans l'onglet Terrainfo, et cliquez sur le petit "+" à coté de Terrainscale.
Ici, vous pouvez modifier la taille de votre terrain, ou plutôt son scale : son échelle, cela l'agrandira sans augmenter le nombre de polygones dans votre map. Dans notre cas, nous voulons juste multiplier sa taille en X et Y par 2 (X=longueur, Y=largeur, et Z=hauteur, donc on ne touche pas à Z). Comme les valeurs d'X et Y sont à 64, pour les multiplier par deux, il faut mettre 64*2=128 :
Maintenant sauvegardez.
Si vous voulez commencer à Editer votre terrain, mettre des fossés, des ravins, des collines, vous allez vous rendre compte de plusieurs choses : La première est que cela ne fonctionnera pas, la deuxième est que le terrain deviendra noir sous votre pinceau. De plus, il y a de bonnes chances pour que l'éditeur plante une fois que vous commencerez à utiliser vos outils.
Pour les plantages, vous ne pouvez faire qu'une seule chose, c'est sauvegarder votre map sous un autre nom, puis tester les outils, et si ca plante, rouvrir la map et la resauvegarder sous encore un autre nom, tester, et ainsi de suite jusqu'à ce que ca ne plante plus (en deux ou trois sauvegarde généralement, le problème disparait, mais sauvegardez régulièrement et sous plusieurs noms, car vous êtes toujours à un doigt du plantage, soyez près à rouvrir régulièrement l'éditeur). Cela arrivera certainement plus souvent que vous croyez, même après de longues heures de travail, ou en ouvrant un terrain commencé depuis des mois, il peu soudainement planter alors que depuis deux heures, vous étiez en train de mettre vos textures. Cela semble assez aléatoire. Alors si vous êtes sur votre terrain depuis trente secondes ou trente jours, sauvegardez régulièrement, et en cas de plantage, ouvrez une sauvegarde (gardez toujours au moins deux ou trois sauvegarde à porté de main, à des stades différents). ET TOUT CECI N'EST PAS OPTIONEL, car quoi qu'il arrive, il finit TOUJOURS par planter, donc si vous ne voulez pas perdre des heures de travail, sauvegardez sous plusieurs noms et assez régulièrement, pour avoir plusieurs fois la même map à des stades différents prêts à prendre le relai. Lorsque le terrain devient noir, on panique généralement. Cela est du à un bug : le terrain est toujours en mode Dynamic Light, aussi même si vous êtes en mode textured (voir plus haut), il va falloir éclairer votre terrain. Le moyen le plus simple est de mettre en éclairage ambiant dans les propriétés de la zoneinfo=>zonelight=>et mettez "ambiant brightness" à 200, cela devrait résoudre le problème (vous devrez repasser le pinceau sur tout le terrain pour qu'il reprenne des couleurs, sinon il restera noir).
Maintenant, il est impossible de modifier le terrain. Pour cela, allez dans le TerrainEditing tool, et sélectionnez votre Heightmap. Son format est actuellement [RGBA], eh bien c'est cela qui pose problème, il faudrait le convertir en G16. De longues de conversion en perspective ? Non ! Il suffit de cliquer droit sur votre Heightmap et de cliquer sur le bouton "Convert to 16-bits" qui apparait :
A ce moment là, pas de miracles : soit ca marche, soit ca ne marche pas, étonnamment, cela ne marche pas toujours mais régulièrement, votre fichier se convertira. Je crois que l'éditeur à un module spécial appelé "pile-ou-face.dll", qui est codé pour décider au hasard si ca marche ou pas, parce que la même image peut refuser de se convertir puis, la prochaine fois, accepter l'opération sans aucun problème. Une fois ceci fait, si cela a marché, vous pouvez commencer à modeler votre terrain (voir plus bas), sinon, il va falloir procéder autrement. Cela a marché pour moi, mais je vais tout de même vous donner la manière d'agir en cas de problèmes :
Si le .BMP normal n'a pas voulu se convertir en G16, il existe encore deux solutions : la première est de créer un fichier .PCX, qui est naturellement en 16 ou 8 bits, aussi il sera forcement accepté. Malheureusement, ce fichier ne peut pas être créé avec paint. Paint Shop Pro et Photoshop le permettent, aussi vous aurez besoin d'un de ces deux programmes. Une fois le fichier .PCX créé, procédez comme avec le fichier .BMP ci-dessus.
Paint ne sais pas faire de .PCX, donc tout ce que je peux vous suggérer, c'est d'utiliser un autre programme. Le programme gratuit le plus simple que je puisse vous conseiller est de loin Paint.net.
Une fois que vous aurez choisi la taille de votre Heightmap, vous pouvez l'importer et procéder exactement comme c'est inscrit au dessus pour le fichier.bmp.
Création par import de UT2004
Si vous possédez UT2004, il existe une autre solution encore plus satisfaisante : ouvrez l'UnrealEd d'UT2004, et grâce à ce tuto, créez votre terrain sous UT2004. Une fois qu'il sera finis (ne vous occupez pas des textures, juste de la forme du terrain, des collines, des fossés, des ravins et des vallées, les textures ne seront pas importées.), nous allons prendre l'Heightmap d'UT2004 et la faire venir à Unreal2.
Pour ce faire, rien de plus simple, vous aurez certainement enregistré votre Heightmap dans le package MyLevel, alors allez-y, et vous verrez que UT2004 créé automatiquement ses Heightmap en G16. Or, comme c'est le seul format que l'éditeur accepte de traiter en tant qu'Heightmap (enfin le seul format avec lequel il est possible d'éditer le terrain sous l'éditeur en tout cas), on va l'exporter : dans votre texture browser, sélectionnez votre texture et faites file=>export
Bien, dans la fenêtre qui s'ouvre, sauvegardez votre texture là ou vous voulez. Notez que le format est un format de BMP 16bit "grayscale", donc censé être en niveau de gris. Pourtant, si vous l'ouvrez, vous aurez ceci :
L'image a été ouverte à gauche avec l'éditeur, à droite avec paint.
Ne vous inquiétez surtout pas, c'est le mode 16 bits qui ne fait pas de gris. Votre texture déformée et colorée ressemble certainement aux vêtements d'Arlequin après un combat avec un ours dans un magasin de peinture (admirez le talent naturel que j'ai pour faire des analogies foireuses au passage). Bref, importez cette texture sous Unreal 2, réglez la fenêtre d'import comme ceci pour éviter toute mauvaise surprise :
Bien, cliquez sur OK. Le package MyLevel s'ouvre et là trône votre Heightmap made in UT2004, au format G16 et avec les bonnes couleurs :
Ça y est ! Vous avez finit ! Vous pouvez entrer votre Heightmap dans le terrainfo et admirer le résultat. Enfin, ce n'est pas vraiment visible, placez donc un sunlight dans un coin, rebuildez et hop :
Ce terrain ne vous rappelle rien ? (indice : DM-Antalus).
Vous pouvez le modifier à loisir bien entendu.