Optimisation sur Source Engine : Partie 2

Dans ce tutoriel tu apprendras comment te servir des Hint/skip et des areaportal

Optimisation sur Source Engine : Partie 2

Dans ce tutoriel tu apprendras comment te servir des Hint/skip et des areaportal

Crée le 27 nov. 2020

Salut à toi ! Tu as survécu au précédent tutoriel et tu souhaite en savoir plus sur l’optimisation ? Alors tu es au bon endroit ! :D

Dans ce tutoriel tu vas apprendre comment te servir des Hint/Skip brush, mais aussi des Areaportals. Je vais également faire un petit point sur la visibilité. N'hésite pas à retourner à la précédente partie si nécessaire.

Gestion de la visibilité

Comprendre le fonctionnement des Hint/Skip

Les Hint/Skip sont un point important dans l'optimisation. Même s'il est difficile d'appliquer ce genre de méthodes sur les grosses maps DarkRP, il ne faut pas négliger leur utilisation. Commençons !

Qu'est-ce que le Hint/Skip brush?

Le Hint/Skip brush est un "brush" (merci captain obsious!) auquel on a appliqué la texture Hint et/ou Skip. (tro fort j'savais pas tiens). Il se présente comme ceci : Alt text

Et à quoi sert-il?

Il sert à découper la map aux yeux de VVIS. Pour vous illustrer ceci, je vais reprendre des photos provenant de ce tutoriel. Je pourrais les créer moi-même mais c'est déjà très bien illustré. 🙃

Imaginez une pièce rectangluraire (la forme importe peu). Alt text À l'intérieur de cette pièce, nous allons insérer un bloc que nous texturerons avec du Hint et du Skip. Alt text Le skip (texture bleue) a été mis sur la face touchant le mur car ce dernier ne découpe rien, il est invisible pour le moteur. Ainsi, le moteur ne voit que ceci : Alt text Le découpage se résultera en une simple division de la salle en deux parties: Alt text Cela ne veut pas dire que vous ne verrez pas l'autre partie.

Mais du coup, à quoi ça sert de découper une map si on voit toujours la partie découpée?

C'est une très bonne question Billy ! Comme tu l'as vu juste ci-dessus, le Hint permet de découper la map. Il agit donc comme un mur invisible pour nous, mais pas pour l'optimisation. En effet, vous allez voir qu'il permet de ne pas charger une partie de la carte comme le ferait un brush normal. Mais pour cela il faut que ce dernier ne laisse pas transparaître l'autre côté de la map. Exemple : Nous avons cette pièce, dans laquelle un brush de Hint/Skip a été placé comme ceci Alt text Puis une autre pièce similaire, mais cette fois-ci sans ce brush Alt text Voici le résulat: Dans la salle avec le brush nous obtenons ceci en activant mat_wireframe 1 Alt text Alors que pourtant Il y a bien quelque chose de l'autre côté ! Alt text Au contraire, dans la salle sans ce brush, nous chargeons tout... Alt text

Alors bien sûr, ceci n'est qu'un cas d'utilisation bien spécifique. Mais sachez que la map rp_southside est presque entièrement optimisée de cette manière (truc de ouf non ? 😂).

J'espère que vous avez un peu mieux compris le fonctionnemet des Hint/Skip. Si vous souhaitez en apprendre plus, je vous invite à aller voir ce tutoriel qui va bien plus en profondeur que moi. Passons désormais aux areaportals. 😄

Les areaportals

Aaah non ! Pas eux ! Je n'ai que des problèmes sur Rockford avec !

Alors déjà, tu te calmes, et qui t'as dit de modifier rockford pour débuter? 🤔

Les areaportals sont des brushs entités, qui ne sont donc pas pris en compte par le moteur dans les tests de visibilité, mais qui peut la gérer. Ça va tu suis ? 🙃 En fait l'Areaportal permet de complètement décharger une zone de jeu. C'est extrêmement utile et même assez simple à mettre en place (faut-il encore savoir comment ils fonctionnent).

Création

Pour créer un areaportal, rien de plus simple. Il suffit de créer un bloc, lui appliquer la texture bleuâtre estampillée "areaportal", et lui le transformer en une entité func_areaportal (via le raccouri Ctrl+T par exemple). Alt text

Fonctionnement

Un areaportal doit impérativement fermer une zone hermétiquement. Il ne faut surtout pas faire comme ci-dessus, en fait je l'ai juste copié pour vous montrer à quoi il ressemblait. x)

Vois-tu, j'en ai mis un à l'emplacement exact de ces portes. Ceci est un stand de tir sans fenêtre, sans trou, donc fermé hermétiquement. Il faut que le bloc d'areaportal remplisse entièrement le trou. Le moindre écart suffira à le rendre inutilisable et obstruera la visibilité dans tous les cas. Alt text

Vous avez peut-être remarqué qu'un nom de porte a été assigné. En fait ça sert à l'ouvrir et à le fermer en même temps qu'une porte. Pour faire cela, il faut donner un nom à votre porte, puis mettre ce nom dans Name of Linked Door. Alt text Vous devrez bien sûr modifier la valeur de Initial State selon l'état par défaut de votre porte. Ainsi, si la porte est fermée, tout ce qui se passera derrière ne sera pas chargé ! :D Vidéo de démonstration

Et si je souhaite mettre une fenêtre dans mon bâtiment ?

Dans ce cas, deux choix se proposent.

  • Soit tu lui appliques un areaportal ouvert (à l'emplacement de la vitre)
  • Soit tu crées un areaportal_window

Tu peux aussi appliquer un areaportal fermé, mais cela reviendrait à utiliser un bloc de skybox. En effet, ce sera la 3D skybox qui sera montrée. Ça peut être une très bonne astuce d'optimisation, comme je l'ai fait ici sur Rosewood. Alt text On ne charge pas l'extérieur du bâtiment, c'est un gros gain de fps, mais il faut cependant "gérer" pour créer une 3D Skybox fidèle au monde extérieur pour que l'illusion soit parfaite. Alt text Assez impressionant non? Cependant, cette technique n'est convaincante que si la vue vers l'extérieur est limitée. Ici nous sommes au dernier étage de ce bâtiment. Donc ce n'est pas très grave de ne pas charger le monde extérieur. Mais dans le cas de notre commissariat... Ce serait assez embêtant. Alt text

Qu'est-ce que c'est un areaportal_window ?

C'est ni plus, ni moins, un areaportal avec une distance d'activation (c'est bizarrement dit ça). En fait son utilisation est à prendre avec des pincettes. Il peut aussi bien augmenter vos FPS que les diminuer. Pour chaque areaportal window, il faut vous demander ce qu'il cachera. Cette potentielle perte de FPS vient du fait que le serveur doit calculer pour chaque joueur la visibilité de l'areaportal_window. Même si aujourd'hui nous avons des ordinateurs bien plus puissant qu'en 2004, l'excès d'addons dont font preuve les serveurs DarkRP nous ramène à des performances similaires à cette période pourtant révolue.

La création d'areaportal window est un peu plus complexe que celle d'un simple areaportal. En effet, il faut 2 blocs entités. La première vous la connaissez, c'est le func_areaportalwindow, la seconde sera un func_illusionary qui nous servira de masque. Alt text Alt text Vous pouvez voir que l'on peut définir la distance à laquelle la transition commencera, et celle à laquelle l'areaportal window sera entièrement opaque et déchargera la salle concernée. La logique voudrait que le func_illusionary ait une texture opaque, comme du noir par exemple. Mais dans mon cas, mon func_detail masque déjà l'intérieur. Regardez plutôt le RDC dans mon exemple vidéo. Aussi! Une dernière petite chose, il est préférable d'avoir l'areaportal window plus petit que le func_illusionary. Comme ceci: Alt text

Voilà tout ! Encore un tuto bien rempli, j'espère qu'il vous aura été utile. :D

Envie de lire la suite de ce tutoriel ?

Connecte-toi dès maintenant, et accède entièrement à tous les tutoriels de GCA !

#Hammer

Écrit par SofianeLasri#3420

13

Sommaire