Les HintsCe tutorial porte sur "les Hint Brush" Ce cours a été entièrement écrit par moi, c'est à dire NykO18.
sous un contrat Creative Commons. PlanI. IntroductionDans ce tutorial, je vais essayer de vous faire comprendre une bonne fois pour toute ce qu'est un "hint", à quoi cela sert et comment s'en servir (surtout) Je vois beaucoup trop de gens dire n'importe quoi sur les hints ou se vanter de les "maîtriser" sans même réellement savoir ce que c'est ! Pour bien comprendre les hints, je vais rapidement (mais pas vainement) revenir sur le fonctionnement de BSP et VIS durant la compilation ainsi que leurs rôles respectifs. Je ne vous cache pas que les hints sont une notion bien souvent très mal comprise, car très "abstraite" et sûrement trop pour certaines personnes.. Comme je le mentionnais dans un autre tutorial de ma conception, utiliser les hints requiert relativement peu de choses, à part un brin de logique, pas mal de facilité à "visualiser et se repérer dans un espace en 3 dimensions" et également du temps et de la patience.. II. BSP et VISPour faciliter la compréhension de ce tutorial, je vais prendre pour référence une map, ou plutôt un bout d'une map, que j'ai réalisée et sur laquelle je me suis rendu compte que les hints étaient vraiment utiles. Ce bout de map représente un immeuble, tout du moins quelques étages d'un immeuble. Le plan de chaque étage est le même, et il est relativement simple : Une cage d'ascenseur et un escalier situés à peu près au milieu du batiment. Puis un couloir (palier) en "U" qui dessert tous les appartements de chaque étage. Chaque appartement possède une seule et unique ouverture vers ce palier (la porte d'entrée) et il est impossible de sortir autrement que par là. (les fenêtres sont incassables) Le problème majeur de ce type d'architecture est que depuis le palier, il est pratiquement possible de voir tous les appartements.. Je pourrais mettre des func_areaportal à chaque porte d'appartement pour limiter la visibilité, mais pour une map multijoueurs, cela serait trop gourmand.. et à la limite, même pour une map solo, étant donné le nombre d'étages et d'appartements par étage. Bref, toujours est-il que, lorsque BSP va découper cette map, il devrait "normalement" procéder ainsi : Comme on le voudrait, BSP devrait découper notre étage en salles.. une pour chaque appartement, 3 pour former le couloir, une pour la cage ascenseur et une pour la cage d'escalier.. Ca parait au fond tout à fait logique ! Et sans même parler ici d'optimisation De cette façon, lorsque la compilation passe à VIS, ce dernier n'a plus qu'à prendre chaque pièce une par une et regarder quelles pièces sont visibles de chacune des autres. De cette façon, une fois dans le jeu, le moteur ne s'embêtera pas à calculer les pièces invisibles. Si on prend notre plan ci-contre :
* On ne peut pas voir la pièce 1 depuis la pièce 2, mais par contre on peut la voir depuis la pièce 3 par l'ouverture de la porte. Tout cela pour dire qu'une découpe parfaitement effectuée par BSP est la clef de l'optimisation. III. BSP tu déconnes ?Comme tous les logiciels, comme tous les programmes, comme tout ce qui touche à l'informatique.. BSP n'est pas infaillible, loin de là.. Après tout, ce n'est qu'un vulgaire programme qui tente de deviner "où sont vos pièces et de quelle forme elles sont".. Et vous savez très bien que, même si pour vous il est très simple de distinguer chaque appartement d'un autre, et un appartement d'un couloir, pour BSP ce n'est pas SI évident que cela.. Je vais vous faire par de la magistrale découpe de BSP sur ce type de plan.. et vous allez voir, c'est vraiment TRÈS éloigné de ce que l'on cherchait à obtenir tout à l'heure : III.1. Exemple 1Voici à peu près comment BSP a compris.. ou plutôt, comment BSP n'a pas compris mon étage ! Lui, il a vu des trous dans les murs, des trous pour les portes.. malheureusement, il ne sait pas qu'il y a des portes car il ne touche pas aux entités.. Il a donc vu des trous dans les murs, et s'est dit "comme de chaque côté du couloir les portes sont les unes en face des autres, cela doit être un couloir" (caricature) et il a donc "découpé" des couloirs au beau milieu des appartements. Chaque bloc d'une même couleur est un leaf (une pièce pour BSP) et chaque bloc noir est également un leaf.. Le problème maintenant, ce n'est plus tellement BSP mais VIS.. car VIS, lui, va gentillement suivre ce que BSP lui a découpé, et va donc regarder quelle "pièce" et visible de chacune des autres.. Malheureusement, les pièces sont découpées n'importe comment, et c'est donc une vrai anarchie.. Regardez attentivement le plan, il y a une "pièce" horizontale colorée en vert sur mon schéma. Cette pièce parcourt tout l'étage de part en part en passant par le couloir et deux appartements. Maintenant imaginons que l'on se trouve dans cette pièce, n'importe où à l'intérieur (dans un appart ou dans le couloir).. Et bien pour VIS, peu importe l'endroit où vous vous trouvez, vous êtes dans la même pièce ! Ce qui signifie que vous pouvez très bien vous trouver dans l'appartement de gauche, VIS lui considère que vous êtes également en même temps dans l'appartement de droite mais aussi dans le couloir ! Comment ne pas imaginer dès lors comment il va calculer la visibilité.. Très facile pour lui, depuis cette pièce verte, on peut voir TOUS les appartements, tout le couloir, la cage d'ascenseur et aussi l'escalier ! Ce qui signifie en d'autres termes que, peu importe l'endroit où vous vous trouvez, tout l'étage sera modélisé alors qu'en fait vous ne serez pas censés en voir la moitié.. Vous voyiez bien que BSP n'est pas parfait..! Et bien sûr ce n'est qu'une exemple parmis d'autres.. Je vais d'ailleurs prendre un autre exemple tout de suite pour être bien sûr que vous avez compris ! III.2. Exemple 2Nous sommes maintenant hors de l'immeuble.. sur le trotoir qui borde le rez-de-chaussée.. Par soucis de pudeur, les architectes qui ont construit cet endroit ont cru bon de surélever le rez-de-chaussée afin que les gens dehors ne puissent pas matter ce qui se passe dans les appartements du bas.. C'est une bonne idée en soit.. mais dommage que BSP ne l'entende pas de cette façon ! Et j'ai envie de dire que c'est tout à fait normal.. un simple problème de point de vue dirons-nous.. Je vais vous expliquer. Dans le jeu, une fois que nous sommes dans la peau de Gordon ou autre protagoniste, voici à peu près les angles de vue que l'on peut avoir de l'intérieur de l'appartement.. et ce depuis l'extérieur. Comme vous pouvez le voir, c'est ridicule.. on voit le plafond, et point barre.. Et selon des lois de géométrie très simples, on ne pourra absolument JAMAIS voir l'appartement "plus bas" que la ligne en pointillés rouges. Pour avoir ne serait-ce que l'équivalent du point de vue en pointillés, nous devrions nous trouver à une distance de l'immeuble égale à l'infini. On peut donc dire qu'il est impossible de voir l'intérieur de l'appartement depuis l'extérieur.. Malheureusement, ce n'est pas comme ça que BSP et VIS interprètent tout cela.. Voyons plutôt la façon dont BSP va définir les "pièces" de cet endroit.. Voici la découpe que BSP va réaliser si tout se passe bien. (à peu près) Il y a donc une "pièce" pour l'extérieur et une autre pour l'intérieur.. Logique non ? Ce qui est beaucoup moins logique, mais tout à fait normal par contre c'est que peu importe l'endroit ou vous trouverez à l'extérieur, le contenu de l'appartement sera constamment dessiné. Si vous avez suivi un petit peu ce que je raconte depuis tout à l'heure, vous aurez compris pourquoi.. Pour VIS qui va réinterpréter tout ca par la suite, peu importe où vous vous trouvez dans la "pièce" rouge (la numéro 1), il considèrera qu'à tout moment vous pouvez très bien vous trouver en train de voler devant la fenêtre et donc avoir une pleine vue sur la pièce bleue ! Et c'est exactement pour ca que les hints vont nous servir.. IV. Les HintsVenons-en au fait, car c'est bien beau d'avoir exposé des problèmes un peu plus haut, mais désormais il faut les résoudre ! IV.1. C'est quoi un hint ?C'est une très bonne question, et c'est à ce moment là qu'il faut avoir un brin de bon sens et de logique.. Un hint sous Hammer ce n'est ni plus ni moins qu'un bloc normal paré des textures tools/toolshint et tools/toolsskip. Normal ? Non, en fait absolument pas :) A dire vrai, c'est plus complexe que cela.. et il ne faut pas voir les hints comme des blocs, surtout pas ! Si jusqu'à présent vous pensiez qu'un hint était un "volume" alors oubliez tout ca, la seule chose qui compte dans un hint sont les faces texturées avec la texture tools/toolshint.. Et uniquement les faces ! En fait, un hint n'est pas un bloc. Chaque face d'un bloc texturée avec la texture tools/toolshint est un hint. Si vous créez un bloc rectangulaire de 6 faces et que vous les texturez toutes avec cette texture, vous obtenez 6 hints.. tout simplement. IV.2. Ca sert à quoi un hint ?En étant très direct pour être bien clair, un hint va nous servir à découper en plusieurs morceaux les "pièces" que BSP découpe dans votre map. Oui je sais.. c'est pas spécialement clair dit comme ca, mais vous allez voir, ca va rentrer avec des schémas.
Voici un pavé.. bon, on va dire que c'est une "pièce" sous Half-Life.
A l'intérieur de cette pièce, on créé un bloc..
Le but est maintenant de texturer la face qui "coupe la salle en deux" avec la texture tools/toolshint et toutes les autres avec la texture tools/toolsskip.
Puisque les textures "skip" sont ignorées par le compilateur, on peut donc considérer qu'il ne reste plus que la face texturée en "hint".
Résultat, que reste-t-il après la compilation ? Finalement, ajouter un hint c'est comme ajouter un mur invisible pour le compilateur..
Ainsi, à cet endroit précis, il sait que le mappeur a voulu dire quelque chose, et ca permet de découper ces "pièces virtuelles" (appelées leafs) utilisées par VIS pour calculer la visibilité. IV.3. Comment s'en servir ?IV.3.A. Exemple 1
Revenons à nos deux exemples du départ.. Qu'à cela ne tienne ! S'il ne voit pas les portes, et qu'il ne voit que des trous, alors nous allons l'aider à y voir plus clair en découpant à l'aide de hints ! Le but va être de boucher les trous des portes afin que BSP arrête de faire n'importe quoi et comprenne que cet étage est découpé en appartements et non en couloirs ! Sur le schéma ci-contre, les trous des portes sont repérés en vert clair.
Il suffit donc de créer quelques blocs de la taille des trous, les texturer avec la texture "hint" de chaque côté de la porte et en "skip" sur le reste des faces.. Et c'est ainsi que l'on se retrouve avec un découpage flambant neuf comme celui que nous désirions tant au début de ce tutorial ! IV.3.B. Exemple 2
Revenons maintenant à l'exemple numéro 2.. l'histoire du rez-de-chaussée surélevé.
Il suffit alors de créer un autre mur invisible pour découper en plusieurs morceaux les "pièces" découpées par BSP.
On obtient alors deux nouvelles "pièces" représentées ici en mauve et en vert. V. ConclusionComment trouver les endroits ou ca foire ? Rien de plus facile, deux commandes console sont vos meilleures amies pour optimiser votre map grace aux hints :
J'espère que ce tutorial vous aura un peu aidé à comprendre les hints.. Il reste certes de très nombreux cas de figure ou les hints peuvent s'avérer TRÈS utiles, mais il m'est bien sûr impossible de tous les détailler ! Néanmoins, si vous cherchez encore plus d'informations sur les hints : En attendant, bon mapping et bonne optimisation ! Par NykO18
* Ouvrez la map sdk_hints.vmf fournie avec le SDK. Cette création est mise à disposition selon le Contrat Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. |
||