Last updated: 06/10/2024, 02:17

Current Project: Rejuvenation of Hellkeeper.net

Index des tutoriaux

Semi-Solids, Solids, Non-Solids

Des brushes par milliers

D'autres brushes ? Des que vous aurez commencé à mapper, vous allez certainement ouvrir les maps d'autres mappers pour voir comment ils ont fait tel ou tel truc, ce qu'ils ont mis dans telle ou telle situation, bref, comment ils ont aménagé leur petit monde a eux. Or, vous n'allez pas tarder à voir des brush qui, contrairement aux vôtres, auront toute sorte de couleurs nuancées, et la, vous allez bien sur vous demander a quoi ils servent et pourquoi les mappers ont changé les couleurs de leurs brush (voir même comment ils l'ont fait).

Bon, vous l'aurez certainement compris des la première ligne du texte, ces brush aux couleurs bizarres ne sont pas la juste pour faire joli.

Des brushes utiles.

Résumons au minimum vital : vous connaissez, on va dire trois types de brushes : le brush de base, rouge, invisible dans le jeu et qui n'est qu'un moule pour vos autres formes, le brush soustractif, ou substract, marron, qui devient jaune quand on le sélectionne, et qui est creux, et le brush additif, bleu, qui au contraire, est plein.
Pour commencer, votre brush rouge, là, on s'en fiche royalement, vu que de toute façon, il n'existe pas vraiment : il ne sert qu'a créer des formes autres, qui elles, servent a quelque choses. Le brush soustractif est très particulier vu qu'il vide son contenu, il est vital et on ne peut pas le remplacer par quoi que ce soit d'autre. Pour le brush additif par contre, c'est bien plus contestable.

La plupart des brushes "étranges" que vous trouverez seront roses pâle. En voici un échantillon :

Brush Rose

Ces brushes roses deviennent très pâles (presque blancs) une fois qu'ils sont sélectionnés. Il peut s'agir de deux choses. Soit il est invisible en jeux, et il s'agit d'un volume, auquel cas nous ne nous en occuperons pas tout de suite. Si a l'endroit ou il se trouve, il y a effectivement quelque chose de visible (je ne dirais pas solide, et vous allez vite comprendre pourquoi), alors cela nous intéresse beaucoup plus.

Mais il y a aussi des brushes vert, qui, s'ils ne sont pas visibles en jeux, sont des zones portals. Pour l'instant, ca ne nous intéresse pas non plus, ils servent au découpage de la map en zone, et ceci fait l'objet d'un autre tutorial, partie généralité. S'ils sont visibles en jeux, voila bien plus intéressant. En effet, ces brush visibles qui ne semblent pas être des brushes additif vu qu'ils ne sont pas bleus sont tres important pour l'optimisation des performances. Bien que l'optimisation du BSP soit moins importante aujourd'hui vu que les Static Mesh sont tres employés là ou des brushes étaient utilisés sous UT99, il est tout de même utile de s'y pencher des que votre map dépasse une centaine de brushes (l'idéal étant bien sur de toujours optimiser sa map). D'abord, revenons en arrière, au moment ou vous soustrayez un brush dans votre map :

Un cube en deux vues différentes

Voici votre brush dans deux vues différentes : l'une est la vue Texturée normale, l'autre est la vue en mode Zone/Portal (notez les petites icônes encadrées en rouge au dessus de chaque vue). Dans la vue en Mode Zone portal, vous remarquez que votre brush apparait avec des parois d'une texture unie bleu (mais pour vous, ça pourrait être n'importe quelle couleur, vu qu'elle est tirée au hasard). Vous remarquerez néanmoins que chaque paroi a une nuance différente de bleu (ou de n'importe quelle couleur que vous avez).

C'est bien beau ça, mais maintenant, regardons une map finie et observons en mode Zone Portal ce que cela donne (ici, DM-Premaka) :

Premaka en Zone Portal

Bon, deux remarques s'imposent : d'une part, vous voyez que toute la map n'apparait pas de la même couleur : dans mon exemple, il y a du jaune, du vert, du rouge, du cyan et du bleu ciel. Ca c'est tout a fait normal : la vue "Zone/Portal" permet normalement de vérifier les zones différentes de la map : vous ajoutez des "portals" qui coupent hermétiquement la map en plusieurs parties, et qui permettent d'optimiser la map en ne chargeant pas tout a la fois.

Nota bene : il y a bien un mode de vue "BSP/Cuts", mais si vous l'essayez, vous constaterez a la surprise générale qu'il ne marche pas, il se contente de donner une couleur différente a chaque mur/surface. Pourquoi est-il quand même la ? Je ne sais pas, d'autant plus qu'il est bogué depuis Unreal 1. Rappelez vous que seul le mode ZONE/PORTAL est utile dans notre cas.

Mais surtout, ce qui est frappant, c'est que sur une même surface, constituée d'un seul brush, il y a des découpages de différentes nuances, qui se forment dans le prolongement des autres brush environnant. Par exemple, si je prends le même screen :

Découpage BSP

Comme j'ai sélectionné le brush soustrait, vous voyez bien que le découpage ne suit pas la forme : dans la zone encadrée, il y a une seule surface, mais elle est découpée plusieurs fois dans tout les sens, et dans le prolongement d'autres brush (que l'on ne voit pas sur le screen par contre).

Et vous allez me dire que vous n'en avez rien à faire. Bah malheureusement, si, et c'est même plutôt important si votre map se complexifie. Qu'est ce que c'est que ces lignes ? Ces lignes, ce sont des découpages de brush qui permettent au moteur de calculer plus facilement les différents polygones. En effet, le moteur ne sait afficher que des TRIANGLES. Or, la plupart des brush que nous ajoutons ont des faces CARREES, voir RECTANGULAIRES, HEXAGONALES, et pour les sadique parfois, OCTOGONALES, et ainsi de suite. Pour pouvoir afficher ce qu'on lui donne, le moteur découpe tout les surfaces en triangles, normalement en partageant les carrés en deux triangles égaux. Concrètement ? Voila un cube dans le jeu, une fois que le découpage a été fait :

Wireframe

Bien, vous comprenez déjà la base du découpage du moteur. Le problème, c'est que si vous ajoutez un brush contre une autre surface, le moteur va revoir son découpage de base pour ne pas prendre en compte les faces en contact. Par exemple, si j'ajoute un cylindre au fond d'une boite, la face circulaire qui est au bas du cylindre n'a pas besoin d'être chargée, mais la face carrée du cube qui contient le cylindre doit être découpée pour éviter le chargement du morceau inutile qui est sous le brush, et donc annulé par le contact avec la face inferieur de l'autre. Vous n'avez pas compris ? Pas grave, on s'en fiche. Voici une image pour mieux comprendre :

Découpage BSP

Comme vous le voyez, dans le prolongement des cotés du cylindre, la face inferieur du cube est découpée. Bon, la vous avez peu de brush, un cylindre avec peu de faces, donc forcément, ça fait sourire. Maintenant, imaginez que vous avez deux-cent cinquante brush dans la même pièce, avec des cylindres, des cubes, des sphères, et que ca se découpe dans tout les sens. Ca va donner un découpage à tomber par terre. Et bien dite vous que chaque petite face découpée va elle-même être découpée en triangles. Voila, vous commencez à comprendre.

Le problème c'est qu'au bout de onze mille triangles par images a quarante images par secondes plus une flopée de Static Mesh et le calcul des lumières sans compter le calcul des joueurs, vous allez vous rendre compte que votre jeu est beaucoup moins rapide. Normal, plus c'est découpé a la base, plus il faut redécouper en triangles, donc plus il y a des polygones pour une même scène, donc plus c'est long a afficher.

Mais repensez a notre cylindre de tout a l'heure : finalement, on s'en fiche que la face inferieure de notre cylindre soit chargée ou pas, tant que le cylindre est là.
Ca y est, vous avez quasiment compris l'intérêt des brushes roses et verts dont on parlait plus haut.

Solid ou Non-Solid

Les brushes que vous ajoutez avec le boutons "ajouter", et qui apparaissent en bleu sont des brushes solides. Ca veut dire que vous pouvez les toucher, qu'ils bloquent le joueur, qu'ils peuvent servir de passerelles, etc. Mais en contre partie, des qu'ils sont en contact avec un autre brush, PAF, découpage dans tout les sens. Pas de pot. Maintenant, imaginons que vous vouliez que votre brush soit juste visible, mais qu'on ne puisse pas le toucher, pas tirer dessus, juste le voir. Ce serait cool de faire un brush qui ne soit pas solide, c'est à dire qu'il ne bloque rien et qu'il ne découpe pas les brushes qu'il touche : c'est un brush NON-Solid !

Pour cela, rien de moins compliqué, préparez votre brush rouge, et au lieu d'ajouter le brush normalement, cliquez sur le petit bouton bleu et un petit pop-up apparait : dans le menu déroulant, choisissez non-Solid :

Special Brush Menu

Maintenant, rebuildez, jouez et observez : non seulement, votre map n'est pas découpé, mais en plus, votre brush est bien la et on peu passer a travers.

Le troisième besoin

Super titre de film.

Mais il serait intéressant de prendre le meilleur des deux mondes : un brush qu'on pourrait toucher, qui arrêterais joueur et projectiles, mais ne découperais pas. Bref, un brush qui aurait les bons cotés du solide et du non Solid. Ce brush existe, il s'agit du brush semi-solid, le messie.

Le brush semi-solid fait tout comme le brush Solid : on le touche, il arrête les tirs; mais comme le brush non-Solid, il ne découpe rien. Pour en créer, il suffit de faire comme pour un brush non-Solid, mais de choisir "semi-solid brush" :

Semi Solid

Tout va pour le mieux dans le meilleur des mondes

Bien sur, ce titre est totalement ironique vu que rien ne va marcher comme vous le voulez. En effet, bien que théoriquement il soit possible de ne rien faire en brush ajoutés grâces aux brushes semi-solid, il va y avoir des problèmes. Premièrement, la diminution du découpage occasionné par les brush semi-solid est censée permettre d'éviter beaucoup de trou BSP... Le problème : si vous faites deux brushes semi-solid qui se touchent, pas de problème, mais si l'un rentre dans l'autre, il va y avoir un magnifique trou la ou ils se rencontrent. Paf, premier problème : c'est beaucoup moins souple a l'usage que du Solid : pas question de faire du bricolage, un brush raté et c'est tout le boulot qui est flingué (enfin, pour peu que le brush soit un peu trop complexe) solution : bah on supprime les brush dans ce coin et on refait l'assemblage avec des brush propres.

Ensuite, il est censé être solide : mais en général, si le brush entre en contact avec un brush semi-solid, même sans lui rentrer dedans, les deux brush auront tendance à devenir tout les deux non-Solid : vous passerez à travers, c'est quand même gênant, notamment pour les constructions du genre escalier qui découpent énormément mais qui sont en contact avec des dizaines de choses (brushes, Static Mesh etc.) En, gros, avec un brush semi-solid (ou même non-Solid), il est préférable d'éviter les contacts avec les autres brushes... Sauf les brushes substract, ce qui réduit quand même pas mal le champ d'action.

Pas qu'une question d'optimisation

Ces brushes spéciaux ne sont pas juste la pour optimiser, il y a deux cas ou le non-Solid et le semi-solid sont quasiment indispensables. Pour le brush non-Solid, c'est simple, ouvrez DM-Curse4, et cherchez l'armure +100 : elle est cachée derrière un mur... Qui n'est en faite qu'un brush non-Solid : tres bien donc pour des passages secrets et des issues camouflées. Pour le semi-solid, ca va être plus difficile à expliquer. Imaginez que vous voulez faire une vitre ou une grille avec un brush, vous voudrez machinalement utiliser le brush Solid, car il faudra qu'il stoppe les joueurs et les projectiles. Or, si vous ajoutez un brush Solid, certes, il bloquera tout, mais problème : si vous mettez par exemple un grille, l'espace transparent de la texture sera remplacé par autant de trou bsp, comme si il y avait un trou DANS le brush. Pourquoi ? Eh bien imaginez que le vide noir autour de vos brush substract est un liquide : lorsque vous ajoutez un brush normal, il ne charge pas les faces en contact, et voila le résultat :

Solides transparents

Comme vous le voyez, si vous regardez à travers la grille, au lieu de voir en dessous, votre regard va être arrêté par le "vide" (qui est en faite plein d'ailleurs), et donc vous afficher comme il se doit un... HOM. Donc, c'est laid. Il va falloir soit faire du brush un Static Mesh, soit éditer le brush et l'écarter de une unité du bord et camoufler la jointure avec des Static-Mesh, ce qui non seulement risque d'être laid mais a aussi tendance à vous faire recalculer entièrement votre brush (et on ne trouve bien sur pas souvent le Static Mesh adapté).

Avec un brush semi-solid, comme les faces en contact ne sont pas supprimés, pas de problème : le vide ne rentrera pas dans le brush, et donc, vous verrez à travers la grille sans problème, sans Static-Mesh et sans effort.

Conclusion

Eh bien voila, nous avons fait le tour de l'intérêt et des problèmes des brush Semi-Solids et non solides. Pas dur à utiliser, pas dur a créer, et surtout, utile pour l'optimisation, je le rappelle : le découpage est bien plus simple car le calcul des surface est différent. Encore un avertissement : contrairement a un brush add normal, un brush semi-solid ou non-Solid qui est coupé en deux par un zone-portal... Eh bien le résultat n'est pas beau a voir, donc évitez ce genre de bêtise. Rappelez vous enfin que vous ne pouvez rien soustraire dans un brush semi-solid ou non-Solid sans tout faire planter. Si vous ajoutez un brush et que vous voulez creuser quelque chose dedans, choisissez un brush additif solide.

Maintenant que c'est dit, je vous invite fortement a bien penser a ce que vous faites, et à éviter de faire des maps qui ont un découpage BSP de ce genre, car même si ca s'affiche, ca risque quand même de ramer pas mal.

BSP sur-découpé

Une dernière chose, lorsque vous avez un Trou bsp, passez donc quelques secondes en modes ZONE/PORTAL : il y a de fortes chances que le trou BSP suive exactement un bout du découpage de la surface sur laquelle il apparait. Dans ce cas, cherchez ou commence les lignes qui donnent lieu a ce découpage et essayez d'en supprimer, par exemple en transformant quelques brushes solides en semi-solides pour que le découpage s'allège : cela permet au moteur de souffler et cela corrige en général la zone bogué. Dernière solution, tres efficace, mais tres contraignante et longue à appliquer a l'échelle d'une map (et qui de surcroit peut entrainer des bugs supplémentaires si elle est appliquée a l'arrache), si vous avez un découpage autour d'une forme ajoutée comme sur le sol sous ce cylindre :

Cylindre découpant le BSP

C'est sur, c'est pas beau à voir, et surtout, c'est un appel au trou BSP. Si vous ne pouvez pas transformer votre brush en semi-solid (par flemme par exemple, ou parce qu'il est tres complexe, qu'il est traversé par d'autres brushes etc.). Le petit truc tout bête, c'est d'ajouter un cube qui est complètement dans le sol a la base de votre brush complexe : le découpage BSP va s'arrêter au bord du cube (mais celui-ci va quand même découper votre brush. Dans mon exemple, il vaut mieux quelques découpes a cause du cube plutôt que le découpage de ce cylindre a 64 face). Voici le résultat bien plus propre :

Ajout d'un cube pour limiter le découpage

Inconvénient majeur de cette méthode : le brush ajouté découpe quand même le sol, mais moins que le Brush complexe. L'autre inconvénient c'est que ce truc a tendance à donner des catastrophes surnaturelles : il m'est arrivé d'avoir du trou BSP créés dans le prolongement du découpage du cube alors que le cylindre directement sur le sol ne posait pas de problème (sauf au niveau des performances). Bref, ne pas en abuser sous peine d'horreurs (qui restent rares, je vous rassure).

Une petite note finale : rappelez vous que pour chaque cube qui sera convertit en semi-solide, c'est 4 lignes de moins de découpages. Comme ces lignes ne s'arrêtent pas sur les angles, qu'elles n'ont pas de problèmes pour se poursuivre sur les plafonds, les murs etc., vous allez vite avoir besoin d'optimiser. De plus, ouvrez donc une map comme BR-Skyline et observez le grand cube qui contient la map et qui n'est en contact direct avec AUCUN brush, il est quand même découpé bizarrement : parfois, pas besoin d'un contact pour que le découpage se complexifie. Donc si vous avez un trou BSP et que les brush qui semblaient le causer ont étés convertis en semi-solid sans effet, n'hésitez pas a vous balader dans votre map a la recherche de quelques brush à optimiser, parfois un brush sans intérêt a l'autre bout de la carte débloque tout les problèmes une fois convertit en semi-solid.

Dernier mot : n'oubliez pas de rebuilder et privilégiez une grille de 16.

© 2005-2024, by Hellkeeper.

Valid XHTML 1.1 & CSS 3