Optimisation
: Les Leafs et les Hint brushs |
ou
"Leaf node" et "Hint brush" : Comment que ça compile ?
Je vais essayer de vous faire assimiler l'optimisation de la compilation (élément
majeur du mapping) par quelques exemples et quelques notions élémentaires comme
la différence entre un brush "structural" et un brush
"detail".
Plus loin dans le tuto, on verra l'utilisation des brushs "hint".
- Commande de la console :
Pour ce tutorial vous devez utiliser la commande de la console de ET, "/r_showtris 2".
Cette commande permet d'afficher tous les triangles affichés par le moteur graphique à un endroit donné.
Pour désactiver cette commande, il suffit de taper "/r_showtris 0"
- Concernant les "brushs" :
Il y a 2 types de brush. Les brushs "structural" et les brushs "detail".
Les brushs "structural" sont les brushs par défaut que vous créez sous Radiant. Donc par défaut quand je parle de brush, j'assimile ce terme à brush "Structural".
Les brushs "detail" seront expliqués plus tard.
Bon alors avant de voir ce que fait le compilateur, regardons l'intérieur d'un
fichier .map
{"classname" "worldspawn" //
brush 0 // brush 1 ... |
Waouh ! Maintenant que vous avez lut ces quelques lignes, vous vous dites que vous n'êtes pas sortie de l'auberge !!! Pas de panique.
Juste pour expliquer que cette ligne renferme la taille,
la position, la rotation, la texture...bref toutes les infos associées à chaque
face qui composent le bush.
Et c'est comme ça pour tous les brushs !
Et c'est ce qu'il faut garder à l'esprit dans ce tutorial; c'est que les brushs ne sont que des ensemble de faces !
"Leaf-node" et "Portal"
Le premier travail du BSP et de "casser" cette map en pièces de plus
en plus petites qu'on appelle "leaf nodes". Nous prendrons
pour exemple cette ensemble de pièces ( image à droite )
Une "leaf node" et tout simplement un espace ne contenant pas de brushs "structural" |
|
Maintenant si nous rajoutons des objets dans la première pièce comme un bureau, un casier, un meuble et une lampe (les 4 objets en rouge sur le schéma), étudions le découpage effectué par le processus BSP. |
|
Dans notre exemple nous avons 4 "leaf
node".
Imaginons que le joueur se
trouve dans la "leaf node" 4 : qu'elles autres "leaf node" voit-il ? Comment le processus "VIS" détermine cela ?
|
|
Le "VIS" construit une liste ou il indique
ce que voit chaque "leaf node" Cela pourrait ressembler à ce tableau: En utilisant notre exemple nous pouvons déterminer que Quand je suis dans la "leaf node"
1 je vois les "leaf nodes"
2 et 3
|
Revenons donc à notre première pièce composée de nombreuses "leaf
node" et imaginez le travail du processus "VIS" qui va appliquer
à chaque "leaf node" la procédure expliquée plus
haut ! Plus la structure est complexe, plus la table sera complexe ! Mais alors que faire ? Quelle solution ? |
|
Voila qu'arrive le brush "detail".
Le brush "detail" est comme un brush classique que vous créez avec la petite particularité de ne pas causer de découpage durant le processus BSP et de ne pas bloquer "les lignes de vue" du processus "VIS". En fait, les brushs " detail " sont considérés comme invisibles par le processus VIS.
Pour passer un brush en "detail", vous devez simplement le sélectionner
et faire CTRL+M ou choisir "Selection" "Make Detail"
Appliquons cela à notre pièce et relançons la compilation. Bingo ! La première pièce est considérée comme une seule "leaf node" On a réduit le nombre de "leaf node" à 1 en supprimant les "leaf nodes" inutiles. |
|
Donc vous vous dites : "et si je passais tous les brushs en "detail" ? "
Non, il y a des situations précises pour l'utilisation des brushs "detail".
Les brushs "detail" ne peuvent avoir le côté extérieur dans le
"vide".
Et c'est parfatiement logique si vous avez compris ce que j'ai mentionné plus
haut que les brushs "detail" ne bloquent pas les "lignes
de vue" du processus VIS.
Si vous avez un brush "detail" sur un mur extérieur, quand le
processus VIS va intervenir, votre map sera "leaked" car il sera impossible
pour le moteur de calculer sur un espace alors infini !
Par défaut tous les brushs donnant sur l'extérieur doivent rester "structural".
En général pour déterminer le type de brush à utiliser, on peut dire que tous les brush "structural" concernant la structure de votre map :
- les fondations,
- les murs,
- les sols des pièces,
- le ciel...
Les brush "detail" concernent tout ce qui composent l'intérieur de vos maps :
- objets,
- déco,
- peintures sur les murs...
- terrain....car complexe...
Cela permet au processus VIS d'être plus rapide et efficace.
A savoir aussi qu'une map trop peu équipée de brushs Structural
sera injouable car tueuse de FPS ! Et oui, si le nombre de portal est trop faible,
une trop grande quantité de polygones seront affichés en même
temps, imposant alors un gros effort au PC.
- Exemple 1 : le couloir
Le rectangle rouge représente le joueur et la direction dans la laquelle il regarde.
Vue dans GTK Radiant |
|
La ligne bleue montre le "portal" créé lors de la compilation.
Dans la vue de droite, tirée du jeu, on s'aperçoit que le moteur graphique affiche les brushs se trouvant dans le champ de vision du joueur mais aussi les caisses pourtant hors de portée de notre oeil humain.
Pour ce qui se trouve autour du joueur cela paraît
un peu normal mais pour ce qui se cache dans l'angle formé par le portal et
la direction de la vision du joueur, on peut imaginer les faces inutiles affichées
par le moteur graphique et donc le gaspillage de FPS.
Vue dans GTK Radiant |
Vue dans ET avec /r_showtris 2
|
On introduit un angle de partage en placant un "hint
brush". ( c'est un brush classique auquel on applique la texture common/hint
)
Maintenant, quand on se trouve à la place du joueur, le
moteur graphique n'affiche plus les caisses et tout ce qui se trouve dans la
zone délimitée en rouge sur le screen de gauche !
Notez que la diagonale bleue représente 2 "portal" chacun se terminant
à l'intersection avec l'autre portal.
|
Si le joueur se déplace un peu, les caisses apparaissent ! Bingo, voila un bon plan pour gagner quelques FPS avec des "hint brush" bien placés. |
- Exemple 2 : un étage
A chaque étage se trouvent des lits superposés
Vue dans GTK Radiant |
Vue dans ET avec /r_showtris 2
|
Dans cet exemple, on s'apercoit que le moteur graphique affiche même se qui se trouve à l'étage alors que le joueur se trouve au rez-de-chaussé.
Allez hop, je créé 2 brushs avec la texture hint que je place comme
suit :
Vue dans GTK Radiant |
Vue dans ET avec /r_showtris 2
|
Après compilation, on peut voir que cette fois que lorsque le joueur est en bas, le moteur n'affiche pas ce qui se trouve à l'étage !
Pour vous aider à savoir si vos brush sont en "detail" ou "structural" dans GTK Radiant, il y a un plugin qui s'appelle "prtview".
Pour l'utiliser c'est très simple : compiler votre map en "BSP -meta".
A la fin de la compilation allez dans le menu "Plugins"
et choisissez "prtview" "load .prt file"
Une fenêtre de sélection apparaîtra avec le nom du chemin
complet du ficiher .prt (ex "D:/Program Files/Wolfenstein - Enemy Territory/etmain/maps/rtcv.prt")
Cochez la vue (show 2d ou/et show 3d) dans laquelle vous
voulez faire apparaitre les infos et cliquez sur "OK"
En retournant dans le menu "plugins / prtview" vous
pouvez annuler la vue en faisant "unload .prt file" ou "toggle portals
(3D)"
Pour modifier les options d'affichage, "plugins / prtview
/ configure portal viewer"
Et voila en 3 screen la différence entre les brushs "structural"
et les brushs "detail"
Voici ma map en construction ! Une pièce tout classique avec sa cheminée,
sa table et des chaises entourées d'un brush "clip_weapon". |
|
Après passage de la compilation "BSP -meta", j'affiche le prtfile. Tous les brushs par défaut étant en "structural", on s'aperçoit bien
de toutes les "leaf nodes" créées (les polygones de couleurs
délimitées par les traits jaunes) |
|
Je passe tous les brushs de la pièces en "detail" et je relance la compilation
"BSP -meta"
J'affiche le prtfile et là on voit bien la différence. Les "leaf nodes" se limitent maintenant aux murs et au plafond qui n'ont pas été pasé en detail. |
Avec un peu de pratique et beaucoup de patience et de test,
on arrive facilement à trouver les bons endroits pour placer ses brushs "hint"
et à transformer ces brushs "structural" en "detail".
Karapahuu - 2005
Crédits :
Screenshots :
Leaf et Portal : Nib' World plus modifications de Karapahuu
Karapahuu pour le BSP Tree et le tableau VIS
Hint brush : Karapahuu
cR4ZyB3n®
1998-2005 |