Gaming Zone Communautes Battlefield PiTrust Communautes Mods
SommairemapstutorielsforumtétéchargementsdiversLes liensLivre d'Or
27/. Optimiser sa map avec les PORTALS

 

Dans ce tutorial, nous allons voir l'intérêt de l'utilisation des portals dans votre map Cod ainsi que l'utilisation de commandes de développement pour comprendre comment réagit le moteur. Il est impératif de bien comprendre l'utilisation des brushs structure/detail et leur incidence à la compilation. Mais avant d'aller plus loin, il faut impérativement éviter tous les "exploits" sur la carte, on entend par "exploit" l'utilisation de bugs pour grimper sur des zones non prévues pour au final se retrouver derrière un mur, sous la map, sur un toit etc ... En effet, certains joueurs s'amusent à chercher les failles des cartes pour sortir de la zone de jeu.

Il suffit de repérer les zones à risque et de placer des brushs avec la texture CLIP pour empêcher toute tentative de sortie de la zone de jeu. Ici, j'ai placé tout autour de la carte un brush à partir du sommet du mur faisant office de clôture. Pour être sûr de ne rien oublier, il faut impérativement allez sur sa carte et la tester, tenter de monter un peu partout (comme avec l'ouverture de notre grande, là où nous avons lacer la MG42). Bref, c'est à vous de réfléchir sur les possibilités de sortir de la carte (prenez en compte l'utilisation des véhicules !).

Cette partie terminée, nous allons attaquer dans le vif, comment fonctionne l'optimisation et comment utiliser les commandes de développement du moteur mises à notre disposition.

PARTIE I/. Les commandes

Avant d'aller plus loin, voyons d'abord les commandes de développement qui peuvent servir à vérifier l'optimisation.

/devmap

Cette commande est incontournable pour lancer votre map en mode débugage. Sans elle, vous ne pourrez utiliser les commandes r_lockpvs, r_showtris, r_showportals etc, qui sont par nature des commandes de cheats, puisqu'on peut voir au travers des murs. Le moteur refusera donc d'activer ces options puisque c'est une protection contre le cheat. La commande est simple, une fois le jeu lancé, appelez la console et tapez le nom de votre map en faisant précéder /devmap. Exemple : /devmap tuto_26 (ou le nom de ma map est tuto_26.bsp)

/r_showportals 1

Cette commande vous montrera dans le jeu les portals que vous aurez implantés. Elle permet notamment de se rendre compte qu'elles sont les portals qui ont été supprimés lors de la compilation (nb : nous verrons qu'au cours de la compilation, les portals erronés seront indiqués). Pour annuler la commande, tapez /r_showportals 0

/r_showtris 1

Cette commande permet d'afficher sous forme de fil de fer l'ensemble des polygones affichés selon l'emplacement actuel, que se soit sur des brushs ou des modèles. Cette commande est incontournable pour optimiser sa carte. Elle permet en effet d'afficher et de vérifier les endroits mal optimisés. Pour annuler la commande, tapez /r_showtris 0

/r_lockpvs 1

Cette commande permet de bloquer l'affichage selon l'emplacement actuel et permet ainsi de se déplacer pour comprendre quels sont les polygones affichés. En fait, il fige l'affichage selon le point voulu. Pour annuler la commande, tapez /r_lockpvs 0

Voivi donc les principales fonctions nécessaires au débugage de votre map. Passons maintenant à la pratique. Comme je le disais précédement, il est impératif d'avoir assimilé le fonction et l'utilisé des brushs structure/detail. Car optimiser sa map passe d'abord par une "propreté" et un design de sa map sans reproche (pas d'overlapping, pas de leak, etc...).

Pour commencer son optimisation (avec les portals), il faut bien entendu avoir terminé sa map. Mais l'optimisation proprement dit commence bien au début, à son élaboration : une map bien construite et bien pensée, et c'est 50% de travail effectué.

Revenons à nos moutons, pour travailler avec les portals, il faut impérativement filtrer tous les brushs détails (mais aussi les entités, curves ...), a contrario il faut impérativement conserver les caulk, structure, hint, portals, translucent et world.

Chose faite, on se retrouve alors avec les brushs "porteurs" (structure) pour la création du BSP, c'est-à-dire les brushs qui serviront pour scinder les cellules et ainsi optimiser l'affichage (on verra plus tard comment avec la fonction /r_showtris 1.

Voyons d'abord comment réagit le moteur sans portal pour commencer à vous familiariser avec les commandes de développement. Lançons la map tuto_26 comme stipulé précédemment.

Activez aussi l'option cg_drawfps 2 (dans la console) afin d'afficher les TRIS (ou Triangles) et différentes informations comme le nombre d'entités ou la place mémoire occupée en haut à droite de votre écran. Déjà, on peut voir le nombre de TRIS qui monte à 32 899 (moyenne acceptable entre 60 000 et 80 000 pour être jouable confortablement).

Ouvrez maintenant la console et tapez /r_showtris 1. Et là miracle, c'est "rencontre du troisième type" !!! Oh la belle verte !

Vous voyez en faite toutes les faces visibles de l'endroit où vous êtes actuellement. Et là vous vous dites "ben merde, il affiche le camion dans la grange, et même ce qui est derrière la grange (le champs) alors que je les vois pas !!!" Et oui, il affiche tous les faces visibles ou non, les buissons et arbres alors qu'ils ne sont pas visibles de là où nous sommes. Et vous commencez à comprendre, le moteur n'a pas l'intelligence humaine et il faut lui dire ce qu'il doit afficher ou non.

En poussant un peu plus avec les commandes de développement, on peut même figer l'affichage de là où nous sommes pour pour voir ce qu'il affiche derrière : c'est la commande /r_lockpvs 1. Le champ est entièrement affiché, même notre abris de bois le long du mur alors qu'il n'est pas visible d'où nous étions !

Et voilà, ceci confirme ce que la commande /r_showtris 1 nous affichait. En fait, cette commande a figé l'affichage des triangles que le moteur affichait sur le screen précédent. C'est là que rentre en jeu les portals. Les portals ont en fait une fonction précise, celle de "filtrer" l'affichage d'une cellule à l'autre lorsque brush STRUCTURE sépare les 2 cellules.


PARTIE II/. Les PORTALS

Passons maintenant à la pratique, comme je le précisais plus haut, il faut en fait créer des "cellules" séparées par des brushs structure ainsi que des portals pour que l'optimisation fonctionne, car le moteur de COD, soit celui de Quake III, fonctionne différement de MOH (Medal Of Honor).

Nous allons dans un premier temps faire quelques modifications avant de poser nos brushs PORTAL. Sélectionnez les brushs comme sur le screenshot ci-après, et mettez-les en DETAIL.

Pour dessiner un portal rien de compliquer, il suffit de créer un brush (je les fais de 8 unités d'épaisseur mais cela n'a pas d'importance) et de texturer les 6 faces avec la texture PORTAL NO DRAW et de placer sur UNE SEULE FACE avec la texture PORTAL. Généralement, sur la face qui permet le prolongement d'une surface.

Alors vous savez maintenant comment les créer mais alors comment les placer ? Rappelez-vous le tutorial sur la gestion des brushs STRUCTURE/DETAIL. La compilation de la map permet la création de cellule (espace) séparés par des brushs STRUCTURE. Le portal intervient ici pour cloisonner ces cellules. Une cellule ouverte (comme notre maison avec ces 3 fenêtres et sa porte) devra être cloisonnée par un portal à chaque ouverture.

Prenons exemple sur notre maison, celle-ci a 4 ouvertures : les fenêtres 1 - 3 - 4 et notre porte 2. il va donc falloir fermet l'espace intérieur de notre maison à l'aide de PORTALS.

Pour cela, créez 4 brushs de l'épaisseur des murs de la maison et texturez-les avec la texture NO DRAW sur toutes les faces des brushs.

Ensuite, placez UNIQUEMENT la texture PORTAL sur la face extérieure de manière à prolonger la surface. Voilà, la cellule de notre maison est hermétique mais le travail est loin d'être fini.

En effet, chaque cellule doit être "hermétique" et composée de brushs structure et portal pour que cela fonctionne, la face PORTAL doit systématiquement être le prolongement de la face extérieure d'une cellule. Ainsi, toute ouverture de porte, fenêtre ou mur cassé peut le cas échéant être "fermé" avec un PORTAL. Attention, ce n'est pas automatique, cela dépend de votre optimisation de la configuration de la carte encore une fois.

Pour pouvoir bien comprendre comment bien fermer, imaginez que vous devez remplir les fondations de notre carte avec de l'eau, cette eau doit pouvoir monter jusqu'en haut des murs faisant le tour de notre carte sans qu'elle puisse s'échapper par des "failles". Ces failles doivent donc être fermées par des PORTALS.

Une fois le travail fait, il va maintenant falloir se creuser les méninges pour générer des cellules supplémentaires pour essayer de casser l'affichage. Les numéros de 1 à 10 sont des cellules créées manuellement séparées par des PORTALS. Le but est que lorsque l'on se trouve dans une des cellules, les autres cellules soit le moins affichées possibles. Prenons exemple de la cellule 3, théoriquement de celle-ci, peut de choses de la cellule 10 ne devrait pas être affiché, nous verrons après à la compilation.

Assurez-vous que vos PORTALS de séparation soient bien à la même hauteur que les murs externes de la map et et qu'ils aient qu'une seule face avec la texture PORTAL.

Une fois les séparations terminées, nous allons refermer nos cellules avec un brush au sommet toujours composé de 5 faces NO DRAW et d'une face PORTAL sur le sommet cette fois-ci.

Une exception dans la pose des faces portals, sur nos 2 brushs où nos murs sont explosés. Ici, nous n'avons pas d'autres choix que de mettre 3 faces PORTAL, une de chaque côté ainsi que sur le sommet du brush.

Le risque de l'utilisation des portals se situe à leur intersection. Nous en avons un bon exemple au niveau de l'entrée de notre grange. A l'origine, il y qu'un seul PORTAL cloturant son entrée. Le problème est que celui-ci voit dans deux cellules différentes lorsque nous positions nos cellules externes. Ici notre PORTAL horizontal délimite 2 cellules (cellule 1 et cellule 2). Or, un PORTAL ne doit JAMAIS voir deux cellules à la fois. A la compilation, il sera de toute manière annulé, ce qui peut ensuite engendrer une cascade d'autres annulations si celui-ci ouvre une autre "brèche" ou "faille" dans votre système de cellule hermétique, c'est tout le problème de la pose des PORTALS.

Pour en revenir à notre problème, il suffit simplement de sélectioner le PORTAL de l'entrée de notre grange et de le couper en 2 partie au niveau de l'intersection avec le PORTAL horizontal (cf. flèche rouge). De cette manière, les PORTALS 1 et 3 ferment la cellule 1 et ne voient pas la cellule 2 et inversement les PORTALS 2 et 3 ferment la cellule 2 et ne voient pas la cellule 1.

Pour information, voici le message lors de la compilation :

WARNING : portal at (384 -448 112) entity 0 brush 580 sees into two cells (aka portal t_junction)
aborting due to 1 bad portals

Il ne faut donc bien sûr surtout pas croiser des PORTALS entre eux (cf. flèche rouge), le résultat serait exactement le même. Seule solution, créer 4 brushs avec 4 PORTALS différents.

Pour vérifier de la bonne étanchéité de vos cellules, il est possible de filtrer les faces NO DRAW à l'aide d'un outil qui n'est pas affiché lorsque l'écran est en résolution 1024 x 768. Pour ce faire, double-cliquez juste à droite de l'icône "enregistrement". Il suffit alors de cliquer sur l'icône représentant un D pour filtrer les brushs NO DRAW et de cliquer à nouveau pour les réactiver.

Cela permet de mieux contrôler les jonctions entre PORTALS et brushs STRUCTURE.

Relançons notre map en mode développement (/devmap tuto_27) , et affichons par exemple les PORTALS dans la map : /r_showportals 1.

Vous pouvez ainsi contrôler le bon positionnement de ceux-ci, et en cas d'erreur à le compile de voir les endroits où ceux-ci n'ont pas été pris en compte.

Maintenant, remettons-nous à l'endroit où nous avions constater que le moteur affichait tout, même ce qui n'était pas visible. On constate déjà que le nombre de TRIS est passé de 32 899 à 25 117.

Passons en mode TRIS (/r_showtris 1), à première vue, on ne vois déjà plus le camion dans la grange, mais d'autres détails ne sont pas vraiment visible ici, il va falloir passer à la fonction LOCKPVS.

Le blocage de l'affichage (/_lockpvs 1) confirme ce que nous avons constaté, le camion n'est plus affiché ni même une partie dans la grange, une partie du champs a disparu et notre abris à bois lui aussi. Voivi comment fonctionne l'optimisation à petite échelle.

Voici qui termine la partie construction d'une map mais il reste encore des fonctions non expliquées au cours de ces tutoriaux que vous pouvez découvrir en faisant des tests comme j'ai pu le faire tout au long de mon apprentissage sur Graydiant.

Les fichiers (.map - .gsc - csv) de notre tuto 27/. se trouve ici. Pour l'utiliser, à partir du menu FICHIER, sélectionnez IMPORTEZ (.map) ==> IMPORTEZ NOUVELLE MAP.

Par Caskou - 2005 Copyright © by CaskAmi Prod. Tout droit réservé.

 

Page générée en

Design / concept Amigos3D - Copyright ©2006 CaskAmi Prod. Tous droits réservés.
Caskami.com est hébergé; par Eliott-Ness.