#Tutorial
Passer de Valve Hammer Editor à MoHRadiant



Télécharger le tutorial (806ko)


Sommaire:

I) Intro
II) Installation & Configuration
III) Naviguer dans l'éditeur
IV) Monter ses brushes
V) Travailler ses brushes
VI) Le Texturing
VII) Régler ses entités
VIII) Ajouter des lumières
IX) Compiler…
X) … et débugger
XI) Les nouvelles fonctionnalités : Shaders et Surfaces courbes


I) Intro

Si beaucoup de mappeurs francophones restent encore et toujours sous le moteur d'Half-life, c'est parce que d'une part la documentation quasi-anglophone est inaccessible pour ceux qui ne comprennent pas la langue, et d'autre part, il faut se former à toutes les subtilités de l'éditeur de niveau ad hoc. Ce qui n'est pas une partie de plaisir car on a l'impression de repartir du Niveau Zéro. Ce guide a été écrit pour faciliter un maximum ce passage en se basant sur les caractéristiques communes entre VHE et Radiant.

Retour en haut

II) Installation & Configuration

Si ce n'est déjà fait, téléchargez MOHAATools.zip (environ 2.5 Mo), sur FilePlanet par exemple. Dézippez l'archive de préférence dans Ea games/Mohda/MohaaTools/. Copiez le fichier entdefs.pk3 dans Ea games/Mohda/main/. Vous pouvez désormais lancer MOHradiant.exe. Ca ne ressemble pas beaucoup à ce que vous connaissez avec Hammer...
Cliquez sur File/Project Settings...


Une fenêtre apparaît, elle ressemble un peu au menu de configuration de Hammer (choix du FGD), en moins complexe.
Dans basepath, entrez le chemin d'accès au dossier MOHDA (ici : E:\EA GAMES\MOHDA).
Dans mapspath, entrez le chemin d'accès du main : c'est l'équivalent du répertoire valve pour Medal of Honor (ici : E:\EA GAMES\MOHDA\main\maps).
Dans autosave, entrez le chemin d'accès au dossier où vous voulez sauvegarder vos sources (ici : E:\EA GAMES\MOHDA\main\src). Faites attention aux valeurs par défaut, qui indiquent MOHAA (version US du jeu) comme répertoire au lieu de MOHDA (version FR).
Vous remarquerez que l'on ne s'intéresse pas à la petite fenêtre intitulée : Menu Commands. C'est le compilateur interne à l'éditeur comme celui de WorldCraft. Nous verrons par la suite qu'il y a un moyen plus économique en RAM pour compiler ses maps.
Fermez puis relancez Mohradiant : des lignes de textes défilent à toute vitesse dans la console : l'éditeur charge en mémoire les informations sur les entités (info_player_start, etc…) et les textures du jeu à partir des informations que vous venez d'entrer dans Project Settings : Il vient de charger le " FGD " propre à MOHDA.
Autant le mapping pour Half-Life était possible sur Pentium 2 de faible fréquence, ici il faudra sortir l'artillerie lourde : disons que la config que vous utilisez pour jouer à MOHDA est celle qui vous faudra pour mapper dans de bonnes conditions. Une souris à trois boutons (dont une molette) est fortement recommandée pour exploiter au maximum les capacités de l'éditeur…

NOTE : Les fichiers .pk3 ressemblent étrangement aux .pak que vous aviez l'habitude de rencontrer. Ils ont en effet le même but : compacter entités et assets (textures, sons,…) pour alléger le dossier du jeu en fichiers et en poids. L'avantage des .pk3 c'est qu'ils peuvent s'ouvrir avec Winzip, sans passer par PakExplorer trop limité en fonctionnalités. On y gagne au passage l'algorithme de compression de Winzip, plus performant. Pour compacter des fichiers au format pk3, zippez puis changez l'extension en renommant votre archive.

Retour en haut

III) Naviguer dans l'éditeur

Avant de commencer, nous allons corriger la vue 2D qui éclate la rétine. Allez dans Misc/Colors>Themes et cliquez sur Black and Green.
Voilà un fond un peu plus doux pour les yeux.
Notez que l'on peut faire mieux encore : Allez dans Misc/Colors et cliquez sur Grid Minor...
Choisissez une couleur gris clair. On se retrouve avec une grille plutôt familière.

Par défaut, le plan de travail se compose d'une fenêtre 2D au centre, la console en bas (n'hésitez pas à la réduire pour agrandir l'espace de la vue 2D), ainsi que le Texture application (nous y reviendrons après). Tout en bas, on a des indications similaires à ce qu'on avait avec Hammer : de gauche à droite : la position du curseur.


La position du solide par rapport à l'origine de la grille.


Les Statistiques (nombres de brushes et d'entités. ToLight = Inconnu).


Les propriétés de la texture sélectionnée.


Les préférences : Texture Lock (comme sous VHE, M = lock par rapport au déplacement du brush, R = lock par rapport aux rotations) Incrément de la grille, L'angle par défaut sous lequel le brush effectuera une rotation (en degrés). Far = Distance de vue en mode camera.

  • Naviguer dans les vues 2D

    Premier obstacle à surmonter : sous MOHradiant, les touches fléchées sont assignées à la navigation 3D, c'est-à-dire qu'il n'y a pas besoin de poser son curseur dans la vue 3D pour pouvoir naviguer dans celle-ci. Oubliez donc de déplacer la grille 2D grâce aux touches fléchées, utilisez plutôt le bouton droit de la souris maintenu appuyé. Par contre, pour zoomer/dézoomer sur la vue 2D, c'est toujours la molette que l'on utilise (les touches DEL et INS ont la même fonction).
    Pour augmenter / diminuer la taille de la grille, utilisez les touches 1 (grille au minimum) à 9 (grille au maximum).
    Pour changer de vue (passer de Front (XY) à Side (YZ) puis Top (XZ)), appuyez sur CTRL+TAB.
    Pour centrer la vue 2D sur la sélection, c'est ALT+X.

  • Naviguer dans la vue 3D

    Là aussi il y a eu du changement : Tout d'abord, cliquez sur l'œil en haut à droite de MOHrad jusqu'à temps qu'un " 2 " apparaisse.


    Maintenez le bouton droit de la souris appuyé et déplacez-vous dans la vue 3D : vous vous déplacez en avant, arrière et sur les cotés. En appuyant sur la touche CTRL, vous pouvez vous déplacer de haut en bas. En maintenant appuyés les touches SHIFT et CTRL et le bouton droit de la souris, vous pivotez sans vous déplacer (variante du Free Look Mode). Cette méthode de navigation nécessite un peu d'entraînement avant de la maîtriser.

  • Naviguer dans les textures

    Le browser de textures a changé lui aussi et est malheureusement devenu un peu moins pratique, enfin de là à dire qu'il est inaccessible, faut pas abuser quand même… Tout d'abord il faut loader les textures dans l'éditeur, l'avantage étant que l'on peut charger certaines textures, afin de ne pas se perdre parmi le bon millier de textures des Medal of Honor.
    Pour charger les textures, cliquez sur Textures et choisissez la catégorie que vous voulez charger. Les noms sont assez explicites.


    La console atteste de la réussite du chargement. Vous pouvez maintenant voir les textures en dessous de la vue 3D.


    Pour sélectionner une texture, cliquez dessus avec le bouton gauche.Pour plus de simplicité, allez dans Edit/Preferences... et cochez les cases : " Texture Scrollbar " et " Texture Subset ". Pour la première option, une barre de défilement apparaît ; pour la seconde, une barre de texte apparaît : c'est le Filter Texture de MOHradiant. Entrez les premières lettres de la texture cherchée et toutes les textures dont les lettres correspondent s'affichent. Le problème, c'est que lorsque ce filter est affiché, on ne voit plus le nom des premières textures...
    Plus vous chargez de textures, plus MOHradiant va bouffer de la ressource, soyez donc vigilants là-dessus.

    Retour en haut

    IV) Monter ses brushes

    NOTE : Pour annuler toute action : CTRL+Z


    Avant de démarrer, allez dans le menu Edit/Preferences…
    Puis cochez l'option Paint Sizing Info. Cette option permet de connaître les dimensions du brush sélectionné à tout moment.



  • Sélection / désélection

    Pour sélectionner un brush, faites un SHIFT+clic gauche dessus.
    Pour le désélectionner, appuyez sur ESC, ou bien faites un SHIFT+clic gauche : il n'est plus en surbrillance.
    Pour le re-sélectionner, faites un SHIFT+clic gauche sur celui-ci : il repasse en surbrillance.
    Si plusieurs brush sont empilés dans les vues 2D, la sélection se fait par défaut sur le brush le plus haut sur l'axe des Z.

  • Formes géométriques simples

    Il est temps de mettre les mains dans le cambouis.
    Par défaut, on se trouve toujours en mode " Création de brush ".
    Commencez par créer un brush en faisant un Click-Drag sur la vue 2D.


    Vous pouvez le redimensionner avec la souris en tirant sur les coins et les cotés (même s'il n'y a pas les poignées que l'on avait sous Hammer). Les dimensions du brush évoluent en fonction du redimensionnement.


    Déplacez votre brush de la même manière que sous Hammer.

    Vous avez monté un solide à 6 faces, mais il se peut que vous souhaitiez monter autre chose, comme un cylindre à 12 faces par exemple… Sélectionnez à nouveau le brush que vous venez de monter. Allez dans le menu Brush. Et cliquez sur Arbitrary Sided...


    Un pop-up apparaît : entrez le nombre de faces pour votre cylindre (12 dans le cas présent) dans le cadre prévu à cet effet.


    (Notez au passage la magnifique faute de frappe " Arbitrrary Sides "… Tsss… Ils ne sont pas allés bien loin dans le débuggage…)
    Validez avec ENTREE, le cylindre est là.


    Notez que vous pouvez directement choisir le nombre de faces de votre brush avec les raccourcis CTRL+#, où # varie de 3 à 9.

  • Cônes et Sphères

    Pour faire un cône ou une sphère, dont vous spécifierez le nombre de faces, allez dans le menu Brush et cliquez sur Cone... ou Sphere... (Torus... ne marche pas) Autant vous pouvez abuser sur le nombre de faces pour le cône, pour la sphère il ne faudra pas mettre plus de 26 faces sous peine de crash de l'éditeur. Enfin, on utilisera les cônes dans des cas bien précis, car il est bien plus judicieux de les réaliser grâce aux surfaces courbes.

    Retour en haut

    V) Travailler ses brushes

  • Déplacer un brush

    Après avoir sélectionné un brush, vous pouvez le déplacer précisément sur la grille avec les touches fléchées tout en maintenant ALT enfoncé.
    Vous pouvez aussi le faire grimper ou descendre de l'axe Z directement en appuyant sur + ou - du pavé numérique.

  • Copier un solide

    Sous Hammer, on disposait d'une fonction de duplication de brush très intuitive. Ici, c'est encore plus simple. Sélectionnez le brush à copier et appuyez sur ESPACE. Le nouveau brush apparaît à coté de l'original, sélectionné par défaut.

  • Effectuer Rotations et Flips

    Pour effectuer une rotation libre, sélectionnez le brush que vous voulez faire tourner puis appuyez sur R : le brush se colore en violet.


    Faites le tourner comme sous Hammer, en tirant les coins du brush. Par défaut, l'angle de rotation est de 15 degrés. Vous pouvez le changer en allant dans le menu " Preference " vu plus haut et en mettant l'angle de votre choix.


    Si vous voulez effectuer une rotation d'angle 90° sans perdre trop de temps, utilisez la barre d'outils Rotate/Flip en haut à gauche : les boutons sont évocateurs.


    Pour renverser un brush (Flip), sélectionnez le brush ad-hoc puis utilisez la barre d'outils Rotate/Flip : les boutons sont évocateurs.


  • Le Clipping Tool

    J'en connais qui vont être content de le revoir, leur Clipping Tool ! Indémodable, l'outil de base pour découper proprement ses brushes. Enorme avantage, on peut maintenant découper les brushes en 3 dimensions. Concrètement, ça veut dire qu'au lieu de couper verticalement ou horizontalement (suivant les cas), on peut couper de biais.
    Sélectionnez donc le brush que vous voulez découper. Appuyez sur X pour passer en mode clipper. Cliquez sur l'arête que vous voulez découper : un point apparaît avec le chiffre 1 à côté. C'est le point de départ de coupe. Cliquez maintenant sur l'arête où vous voulez que la découpe se termine : un second point avec un 2 apparaît. La partie du brush qui sera conservée se colore en orange.


    Pour conserver l'autre partie du brush, appuyez sur " % ".


    Validez la coupe avec ENTREE. Si vous souhaitez simplement couper le solide sans supprimer une des deux parties, faites SHIFT+ENTREE.


    Pour réaliser une coupe en biais, changez la vue 2D où vous venez de placer vos 2 points de coupe et cliquez à l'endroit où vous voulez que le décalage se fasse. Un 3 apparaît à coté du point. Vous pouvez contrôler votre découpe dans la vue 3D.




  • Le Vertex Tool

    Probablement l'outil le plus puissant parmi tous ceux évoqués ici. Il est aussi simple d'emploi que sous Hammer, à cela près qu'il empêche automatiquement les manipulations hasardeuses et donc les erreurs qui s'en suivent.
    Pour passer en mode Vertex Edition : appuyez sur V
    Vous pouvez déplacer les sommets du solide sélectionné.



    Pour passer en mode Edges Edition : Appuyez sur E
    Vous pouvez déplacer les arêtes du solide sélectionné.



    Les déplacements au vertex tool se font comme sous Hammer, par cliqué-glissé.
    Il n'y a pas de merge de vertices ici, c'est-à-dire que vous ne pouvez pas réduire le nombre d'arêtes du poly que vous êtes en train de vertexer.

  • Le Snap-to-Grid

    Cette fonction est gérée différemment sous MOHradiant. En effet, autant sous Hammer le brush conserve sa forme mais est très mal aligné sur la grille, ici, le brush sera un peu déformé (cela dépend de la taille de la grille : plus elle est petite et plus le brush a de chances d'en réchapper) mais TOUTES ses vertices seront alignées sur la grille. Un bémol cependant, lors de rotation complexes (à partir de 2 axes), certaines vertices ne vont pas s'aligner correctement. Il faudra alors jouer avec le Vertex Tool.
    Sélectionnez le brush à aligner puis faites CTRL+G.

  • Carve et Hollow

    Très controversées, ces deux fonctions ont néanmoins le mérite d'être utiles dans certains cas (pour une compilation de test par exemple). Elles sont réunies dans le menu Selection/CSG.
    L'épaisseur des murs de la fonction Hollow dépend de la taille de la grille sous laquelle vous travaillez.
    Pour carver, sélectionnez le brush qui évidera ceux auxquels il est en contact, puis faites SHIFT+U.


    NOTE : à propos du Vis Grouping
    Bien utile sous Worldcraft, cette fonction est toujours présente et fonctionne très bien, tout du moins sous GTKradiant. Et oui, malheureusement, ça ne marche pas sous MOHradiant pour le moment. Néanmoins, avec la sortie prochaine de GTK 1.3 qui apportera le support de Medal Of Honor (qui sera sans doute disponible lorsque vous lirez ces lignes…ah bah nan en fait), ce bug sera en quelque sorte " réparé ".
    Pour grouper vos solides, sélectionnez-les et ouvrez la fenêtre des entités (touche N). Double-cliquez sur Func_group.
    Au sein d'un groupe, vous pouvez sélectionner indépendamment un solide en appuyant sur TAB jusqu'à ce que le solide désiré soit sélectionné.
    Pour dégrouper, sélectionnez le groupe visé, puis Selection/Ungroup Brush.

    Retour en haut

    VI) Le Texturing

  • Le Surface Inspector

    Créez un brush. Chargez un set de textures (" barrel " par exemple).
    Si vous voulez appliquer une texture sur l'intégralité du brush, sélectionnez-le préalablement. Pour sélectionner une seule face seulement, faites un CTRL+SHIFT+clic gauche sur la face concernée. Enfin, si vous voulez texturer plusieurs faces, faites un CTRL+SHIFT+Clic gauche sur les faces qui vont recevoir la texture. Vous pouvez utiliser la caméra sans désélectionner pour autant les faces qui sont déjà activées.
    Cliquez maintenant sur la texture que vous voulez appliquer au solide. Elle s'applique automatiquement, de manière un peu anarchique. Nous allons y remédier. Appuyez sur S : Une fenêtre apparaît, c'est le Surface Inspector (Ils l'appellent ici Surface Properties, mais on n'est plus à une aberration près).



    C'est le Texture Application de Hammer version MOHRadiant. Vous pouvez tout de suite oublier les cadres Surface Flags et Content Flags, car ils ne fonctionnent pas (sic).
    Horizontal Shift est l'équivalent du Shift X de Hammer. Par pas de 8 unités (Réglage par défaut. Vous pouvez changer sa valeur dans le cadre à coté).
    Vertical Shift est l'équivalent du Shift Y.
    Horizontal Scale est l'équivalent du Scale X de Hammer. Par pas de 0.25 (Réglage par défaut. Vous pouvez changer sa valeur dans le cadre à coté).
    Vertical Scale est l'équivalent du Scale Y.
    Rotation : pour faire tourner la texture sur le solide. Par pas de 15 degrés (Réglage par défaut. Vous pouvez changer sa valeur dans le cadre à coté).
    Même s'il n'y a pas de bouton prévu à cet effet, on peut Fitter la texture sur une face, il suffit d'appuyer sur CTRL+F.
    Pour renverser la texture suivant l'axe des X et/ou Y, il faut passer par le menu Textures/Alignement.

    Il n'y a pas de fonction d'alignement Top / Bottom / Right / Left / Center ici. C'est probablement le plus gros défaut de MoHRadiant.

    Vous venez d'appliquer votre texture, et vous souhaitez l'appliquer à une autre face avec les mêmes paramètres ? Sélectionnez la face qui doit recevoir la texture, puis cliquez avec la molette (bouton 3 se la souris) sur la face qui a déjà reçu la texture bien comme il faut : elle s'applique sur la face sélectionnée.

    Color : C'est un " normalisateur " de couleurs. Sous Quake 3 Arena, on ne fonctionne plus en termes de RGB standard (avec 3 valeurs comprises entre 0 et 255) mais normalisé, c'est-à-dire que ces trois valeurs sont comprises entre 0 et 1. Double-cliquez sur le carré coloré. La fenêtre de la palette de couleurs de Windows apparaît. Cliquez sur la couleur que vous voulez normaliser et validez avec OK. Ses valeurs apparaissent dans les cadres correspondants. Cette fonction est utile pour les shaders (expliqué plus tard dans ce chapître. La normalisation sera expliquée dans un prochain tutorial).

    NOTE :
    Les fonctions suivantes :
    Tesselation Size / Subdivisions / Angle / Density / Type / Surface ne marchent pas.

  • Créer ses propres textures

    Fini les wads ! On bosse ici avec des JPEG 24 bits ou des TGA 32 bits dans le cas de textures ayant une couche de transparence (comme les textures {nomdelatexture sous Half-life). L'innovation est que l'on peut coder les fonctions de la texture (une couleur pour une texture lumineuse par exemple) dans un petit fichier texte appelé Shader Script. Pour plus d'informations à ce sujet, lisez le chapitre XI.

  • Caulk roulaise !

    La texture Caulk, disponible dans textures/common est l'équivalent de la texture NULL du Custom Build des ZHLT sous HL. Inutile de dire qu'elle est très utile pour réduire le nombre de polys.

    Retour en haut

    VII) Régler ses entités.

  • Placer une Entité

    Les point-based et les brush-based entities, séparées sous WC sont mélangées ici. Pour ajouter une entité, il suffit de créer un brush puis de sélectionner l'entité que vous voulez lui appliquer grâce au bouton droit de la souris.
    Les point-based entites se redimensionneront automatiquement. Il faut maintenant régler les propriétés de l'entité. C'est là que ça se corse. Et oui, encore un défaut de MoHradiant par rapport à Worldcraft… Appuyez sur N pour faire apparaître la fenêtre des entités. Une liste apparaît. Autant sous WorldCraft, le FGD était correctement interprété, avec des menus déroulants et tout et tout, ici c'est du n'importe quoi. Il faut ajouter soi-même les propriétés d'une entité en s'aidant de la fenêtre qui décrit celle-ci.



    Le pire, je crois c'est le copier-coller des propriétés d'une entité qui est inexistant…il faut tout se taper à la main…et c'est spécifique aux éditeurs Radiants, donc il n'y aura pas de mise à jour avec GTK 1.3.

    Exemple : je veux créer un baril. Je crée mon brush, avec le bouton droit je sélectionne Func_barrel (le nom de l'entité apparaît sur le brush). Dans la fenêtre des propriétés de l'entité, j'ajoute dans Key : barreltype et dans Value : oil. Ainsi, lorsque l'on tirera dans ce baril, de l'huile s'échappera par les impacts.



    N'hésitez pas à lire la doc sommaire accessible entre la liste des entités et leur zone de saisie.

    Comme d'habitude, on retrouve les info_player_start et compagnie qui nous sont familiers.

  • Worldspawn

    Elle est nécessaire pour toutes les maps. Ses nombreux paramètres vont vous permettre de choisir le mp3 à jouer en début de niveau, changer la gravité, spécifier la map qui suit, le champ de vision et bien d'autres choses encore. Elle s'obtient par le bouton droit de la souris, de manière classique.

  • Detail vs Structural

    Arf, je vous vois venir…où qu'il est mon func_wall ?? Bah, le func_wall, il a été modifié dans q3. En effet, l'utilisation principale de cette entité pour les bons mappeurs est d'éviter la découpe par le CSG et BSP, lors de la compile, de brushes qui ne sont pas de bons VIS-blockers. Ici, le principe est toujours le même, sauf que le nom a changé. id Software appelle ça le Detail Brush. Le Detail Brush ne crée aucune découpe lors de la compilation à l'inverse du Structural (qui est la fonction par défaut) et donc le VIS l'ignore complètement. In-game, lorsque vous vous trouverez devant un Detail Brush, le moteur va calculer ce qu'il y a derrière, et ce, même si la scène est masquée par ce brush. N'oubliez pas qu'il est impossible qu'un Detail brush crée des portails. Seuls les Structural peuvent le faire. Pour le mapping on ne peut que recommander de faire une base en structural brushes assez sommaire en polys (enfin tout est relatif…finie la limite des 800 polys en SP, ici ça serait plutôt 8000-9000…ça vous laisse rêveur, hein ?) puis enrichir en détail avec des Detail brush (d'où le nom en quelque sorte).
    Pour passer un brush en Detail, sélectionnez-le puis click droit > Make Detail.
    Si vous voulez repasser un brush en Structural, même procédure sauf qu'ils faut cliquer sur Make Structural.

    Retour en haut

    VIII) Ajouter des lumières

  • Point-based Light

    Comme pour HL, la voie la plus simple, c'est de créer un brush puis de lui appliquer l'entité " light ". Par défaut, elle émet une lumière blanche avec une puissance de 300 (valeur arbitraire).
    Pour changer la puissance, mettez dans Key : light et dans Value : la nouvelle valeur. En fonction de la nouvelle valeur entrée, le rayon diminue ou augmente. Idéal pour savoir si la light va bien faire son boulot après compilation.
    Pour changer la couleur, mettez dans Key : color et dans Value : la nouvelle valeur. Attention, ici, les couleurs RGB sont normalisées. C'est-à-dire qu'il vous faut récupérer la valeur RGB de la couleur voulue puis diviser les trois nombres par 255. Inscrivez les résultats dans Value.

  • Du lights.rad à q3map_surfacelight.

    Il est toujours possible de créer des textures lumineuses. Mais la démarche est un poil plus compliquée. Il faut utiliser les shaders...
    Pour faire très simple, ouvrez le bloc-notes et copiez ces lignes :

    Textures/mon_repertoire/nomdelatexture.tga
    {
    qer_editorimage Textures/mon_repertoire/nomdelatexture.tga // Nécessaire pour que vous voyez votre texture dans MoHradiant.

    q3map_surfacelight 10000 // La texture va émettre avec une puissance de 10000.
    }

    Enregistrez le fichier dans scripts/mon_shader.shader.
    Ajoutez la ligne mon_shader dans le fichier scripts/shaderlist.txt N'oubliez pas de mettre votre texture dans le répertoire mon_repertoire/. La couleur de la lumière émise sera la moyenne de l'ensemble des couleurs du tga.
    Notez que plus la texture est petite, plus le q3map_surfacelight doit être élevé afin que le rendu soit satisfaisant et vice-versa.

  • Et une bouteille de Sky

    Les différents ciels sont disponibles dans textures/skies. Medal of Honor en propose un bon paquet par défaut. Vous pouvez néanmoins les customiser à votre convenance en bidouillant les shaders.

  • Ambient Lights

    Pour des maps de test, vous pouvez décider que toutes les faces renvoient de la lumière. Pour cela, il faut ajouter dans l'entité " worldspawn " la Key " ambient " et la Valeur RGB normalisée de votre choix. Il y a aussi moyen de faire à l'ancienne et d'intervenir directement avant la compilation, et pour cela, lisez le chapître suivant.

    Retour en haut

    IX) Compiler…

    Le voilà, le processus désormais traditionnel. Ici, fini les hlcsg et compagnie…tout est regroupé sous l'exécutable q3map. Divers paramètres à son lancement lancent les différents processus (BSP qui découpe la map en formes géométriques simples, VIS qui calcule le champ de vision et LIGHT qui éclaire la map).

    Pour économiser de la mémoire, on peut préférer l'utilisation du Batch file par rapport aux fonctions de compilation de l'éditeur. Le seul ennui est qu'il n'y a pas de fichier log à la fin de la compile afin de garder un trace de tout ce qui s'est passé.

    Voila un exemple de Batch :

    Q3map -v -gamedir "E:\EA GAMES\MOHDA" G:\MOHradiant\MOHAATools\nom_de_la_map
    Q3map -vis -help -v -gamedir "E:\EA GAMES\MOHDA" G:\MOHradiant\MOHAATools\nom_de_la_map
    MOHLight -v -gamedir "E:\EA GAMES\MOHDA" G:\MOHradiant\MOHAATools\nom_de_la_map
    del *.lin
    del *.vis

    Q3map seul lance le BSP process.
    Q3map -vis lance le VIS process. (-full pour un VIS complet, -fast sinon)
    MOHlight lance l'éclairage de la map.
    Les deux dernières lignes sont optionnelles, elles font le " ménage " en quelque sorte, en supprimant les fichiers temporaires générés lors de la compilation.

  • Où sont passés mon -onlyents et mon -leakonly ?

    Ils sont toujours là. Le -onlyent est même plus performant que celui des ZHLT : en effet, vous pouvez éditer ET ajouter des point-based entities sans que cela supprime des textures. Ne faites pas de compile -onlyents après avoir ajouté des brush-based entities (func_barrel par exemple), sinon vous allez être surpris du résultat…

    Le -leakonly a changé de nom, il s'appelle -leaktest mais marche de la même façon que le premier.

  • MOHlight.exe, quoi t'est-ce ?

    Chez 2015, on s'est dit : " Boarf, on est des gros patrons sur le moteur de Q3, donc on peut se permettre de créer nos propres outils de compile ". Heureusement, ils n'en n'ont créé qu'un seul (on aurait l'air de quoi sinon, alors qu'Ydnar améliore son Q3map2 de jour en jour), MoHlight, qui remplace le standard " Q3map -light ". A part le nom pas grand-chose de changé, si ce n'est une meilleure gestion de la lumière. Vous pouvez utiliser des paramètres supplémentaires parmi la liste suivante :

    -ambient "RGB non normalisé" // Pour que la map soit éclairée uniformément.
    -bounce 8 // Pour améliorer l'aspect des lightmaps.
    -final // Active toutes les options pour un rendu optimal.
    -chop 80
    -fast // Calcul rapide pour des compiles de test.

    Retour en haut

    X) …et débugger

    Passage obligatoire, les programmeurs d'id ont mis pas mal de moyens pour permettre de débugger et optimiser une map.

  • Dans l'éditeur : le PointFile

    A la manière de WC, lorsque l'on rencontre un leak, deux méthodes qui se présentent à nous : la méthode manuelle (la dichotomie) et celle de l'éditeur. De mon point de vue, la dichotomie est meilleure. On peut néanmoins charger le PointFile (File/Pointfile) dans l'éditeur, et naviguer vers le(s) leaks grâce aux commandes Next Leak Spot et Previous Leak Spot (dans le menu Edit).

  • Dans le jeu

    Les commandes consoles de cheat utiles pour le débugging sont les suivantes :


    Notarget // Les ennemis ne vous sont plus hostiles

    Viewpos // Donne les coordonnées du joueur

    Au lancement de la map, exécutez le fichier de config development.cfg, il vous procurera les avantages suivants :


    Touche
    Action
    Description
    N
    "Noclip"
    Permet de passer a travers les murs
    M
    "dog"
    Godmode
    G
    "Giveall"
    Donne toutes les armes et munitions
    I
    "Getchshader"
    Le nom du shader visé apparait sous le viseur
    F8
    "trisb"
    Cette commande est ultime. Elle cycle les modes d'affichage
    des polys en appuyant successivement sur F8
    F1
    "togglemenu leveldesign"
    Affiche le menu leveldesign
    F2
    "togglemenu animate2"
    Affiche le menu des animations
    F3
    "togglemenu emitter"
    Affiche le menu des scripts
    F4
    "togglemenu camera"
    Affiche le menu camera
    F6
    "togglemenu decals"
    Affiche l'editeur de textures
    F10
    "editscript"
    Lance l'editeur de script
    F11
    "toggle cg_3rd_person"
    Passage en mode 3e personne
    F12
    "screenshot"
    Capture d'écran

    Les togglemenus sont certainement ce que 2015 a fait de mieux pour le debugging. Plus besoin de binder ses touches, tout est automatique en appelant le menu puis en réglant à la souris les options. Malgré tout, ça reste complexe en ce qui concerne certains trucs (comme l'éditeur de textures et des anims…).

  • Créer un logfile

    Copiez le script suivant dans le development.cfg :

    Bind " votre_touche " vstr dbg set dbg vstr debug_1

    Set developer 0 set logfile 0 set debug_1 "set dbg vstr debug_0;echo DEBUGMODE ON;developer 1;logfile 2" set debug_0 "set dbg vstr debug_1;echo DEBUGMODE OFF;developer 0;logfile 0"

    Toutes les infos de la console vont être dumpées dans un logfile dès que vous appuyerez sur la touche assignée.

  • R_showtris / R_speeds / FPS

    R_showtris est une commande surpuissante : contrairement à HL où l'on était condamné à voir les flats (Pour beaucoup de détracteurs, Valve avait voulu empêcher que l'on voie que le moteur redécoupait les triangles en triangles…), ici on voit les triangles qui composent la map, ce qui est un excellent moyen de savoir quels sont les endroits de la map où le polycount est trop élevé, et de contrôler très précisément les découpes de polygones. Le showtris se comporte comme le gl_wireframe d'HL, en 1 il montre les polys que le joueur voit, en 2, ceux que le moteur voit.

    Le désormais traditionnel R_speeds est de la partie, mais ses différentes variables ont changé quelque peu : on voit à l'écran, dans l'ordre :

    FPS ##.#
    wt # wv # cl #
    t # v # Mtex ##.#

    Le FPS décrit le nombre de frames par seconde, (Blanc au-delà de 20 fps, jaune entre 10 et 20, rouge en dessous de 10).
    Wt, c'est le nombre de polygones (triangles).
    Wv, c'est le nombre d'arêtes (vertices) des polys.
    Logiquement, le W tiendrait pour World, ce qui serait pratique pour différencier les polys qui viennent uniquement des flats et non des models mais il n'en est rien. En effet, si l'on passe en vue 3e personne (on voit alors le model du perso que l'on incarne), les constantes Wt et Wv augmentent. Bref, pour obtenir le nombre réel de worldpolygons, il faut soustraire T à Wt.
    T, c'est le nombre de polys au total.
    V, c'est le nombre de vertices au total (models et flats confondus).
    Mtex : inconnu. (Probablement le poids en Mo de l'ensemble des textures de la scène ou bien le nombre de pixels texturés calculés pour le rendu de la scène - merci à CasqueBleu).

  • Bloquer le calcul d'une scène In-game. (Lock the Potential Visible Set Table)

    Le PVS, c'est l'ensemble des polygones que le moteur peut voir (et il voit souvent plus loin que le joueur lui-même) à partir d'un point dans la map. A chaque cycle, le moteur calcule les polys qui seront visibles dans le champ de vision du joueur, et ignore ceux qu'il ne pourra pas voir. On peut bloquer ce cycle afin que le moteur calcule indéfiniment la même scène, afin qu'on puisse aller voir jusqu'où il va. Pour cela, il suffit de se balader dans la scène " gelée ", jusqu'à ce que l'on voie un endroit où le rendu ne s'est pas effectué (Effet " Champ de Miroirs ").
    Le script suivant va vous permettre d'activer et de désactiver le blocage du PVS.
    (La commande r_clear est exécutée lors de ce script, au lieu de se trouver face au Champ de Miroirs, vous aurez une texture rose très tendance sur les faces non calculées)

    Set r_lockpvs 0 set r_clear 0
    Bind "votre touche" vstr lockview set lockview vstr lockview1
    Set lockview1 "set lockview vstr lockview0;echo PVS Locked:r_lockpvs 1;r_clear 1"
    Set lockview0 "set lockview vstr lockview1;echo PVS Unlocked:r_lockpvs 0;r_clear 0"


  • Empêcher l'affichage des entités et des surfaces courbes

    R_drawentities 0 empêche l'affichage des entités.
    R_nocurves 0, celui des surfaces courbes.

    Retour en haut

    XI) Les nouvelles fonctionnalités : Shaders et Surfaces courbes

  • Les surfaces courbes

    Une des évolutions les plus notables de Q3, c'est l'arrivée des courbes de Bézier qui permettent de réaliser des surfaces parfaitement courbes (et non pas similaires à un cylindre à faces comme c'était le cas sous Half-life).

    Je ne vais pas en faire un tuto ici, car piGfreeZer en a fait un complet pour GTKradiant (mais il reste compatible avec MoHradiant). Vous le retrouverez sur Game-Lab en cherchant un peu. Notez que les surfaces courbes sont obligatoirement des Detail Brushes.

  • Les Shaders : là, on rigole moins.

    Vous vous souvenez certainement des textures animées du liquids.wad, des decals, des textures avec une couche de transparence, le sky, etc. Sous le moteur de Quake3, ils sont tous regroupés dans ce qu'on appelle les shaders.
    Les shaders se présentent sous la forme de petits fichiers textes, dans le répertoire scripts/, qui vont paramétrer les propriétés d'une texture donnée que se soit sur sa surface (par exemple lorsqu'on saute dessus, on laisse une traînée de poussière) où sur son contenu (exemple : brouillard). Ce sont les shaders qui paramètrent tous les effets que l'on peut appliquer aux textures.
    Les effets sont codés par des mots-clés, plus ou moins simples à comprendre : certains sont uniquement destinés à MoHradiant (et oui, c'est grâce aux shaders que vos triggers sont à moitié transparents dans l'éditeur), d'autres interviennent uniquement lors de la compilation, et d'autres in-game.
    Dans le répertoire scripts/, le shaderlist.txt, comme son nom l'indique, indique la liste des shaders disponibles.
    Je n'ai pas l'intention de faire un tuto complet sur les shaders, d'une part parce que je ne maîtrise qu'une petite partie d'entre eux, et d'autre part cela prendrait une bonne cinquantaine de pages d'explications.
    Je vais donc expliquer quelques petits trucs tout simples.

  • Créer une texture avec une couche de transparence :

    Créez votre texture normalement (24 bits), puis ajoutez un calque 8 bits nommé " alpha " (Paint Shop Pro et PhotoShop savent gérer les calques) d'une couleur uniforme (le noir est tout indiqué) qui représentera la partie transparente de la texture.
    Par exemple, je veux faire un tag rouge en forme de " n " Je crée la texture (24 bits), puis le calque (8 bits) et j'enregistre le tout en TGA 32bits (24+8) (Seul Photoshop peut enregistrer en 32bits).



    Je crée ensuite un nouveau shader, que j'appellerai " mon_shader.shader ".
    J'y insère les lignes suivantes :

    textures/mes_textures/alpha1
    {
    	qer_editorimage textures/mes_textures/alpha1.tga
    	{
    		alphagen const .2
    		blendFunc blend
    	}
    }
    
    Ajoutez la ligne mon_shader dans le fichier scripts/shaderlist.txt
    N'oubliez pas de mettre votre texture dans le répertoire textures/mes_textures/


  • Changer les attributs de surface d'une texture.

    Comme je l'avais expliqué plus haut, certaines textures peuvent émettre un bruit ou envoyer un sprite lorsque le joueur est en contact avec celles-ci.

    Il suffit d'ajouter le paramètre surfaceparm "nom_du_parametre" dans le shader concerné.

    Les paramètres disponibles sont :


    Fog // Le brush où la texture sera appliquée sera considéré comme le brouillard.

    Metalsteps // La texture émet un son métallique lorsqu'un joueur marche dessus.

    Nodamage // Le joueur ne se blessera pas en atterrissant sur cette texture (utile pour simuler l'eau)

    Nodraw // La texture ne sera pas visible après compile (utilisé pour les triggers, etc…)

    Noimpact // Tout projectile passera au travers de cette texture sans la toucher (ciels, par exemple).

    Nomarks // Il n'y aura jamais de decals sur cette texture.

    Slick // Réduit le coefficient de frottement (utile pour simuler la glace)

    Trans // Le brush où la texture sera appliquée ne bloquera pas le VIS.

    Pour les paramètres suivants, les impacts de balle et les decals changent en fonction de l'attribut, ainsi que le son lorsque le joueur se déplace sur la texture avec le surfaceparm susmentionné.

    Wood // Bois

    Metal // Metal

    Stone // Rochers

    Dirt // De la poussière s'élève lorsque le joueur saute.

    Grill // Grille de métal

    Grass // Herbe

    Mud // Boue

    Puddle // Flaque d'eau

    Glass // Verre

    Gravel // Gravier

    Sand // Sable

    Foliage // Feuillage

    Snow // Neige

    Carpet // Tapis



    C'est la fin de ce tutorial, je remercie toute la team LeonTC pour qui j'ai fait ce guide. J'espère que je n'ai laissé passé aucune faute. En tous les cas, si vous décelez une connerie là-dedans, n'hésitez pas, signalez-le (par des mails d'insultes par exemple).
    M.A.J le 23 Nov 2002: Voilà le tuto remis à jour, j'ai corrigé deux trois idioties qui trainaient par-ci par là, mais dans l'ensemble tout est relativement propre.
    Re-M.A.J le 04 Juil 2003 : Conversion du tuto pour la V2, correction de petites choses (images, mise en page).


    Retour en haut


  • © Sylvain 'nunux' Douce
    Les marques citées appartiennent à leur propriétaires respectifs.
    Tous droits réservés.