L'une des notions les plus importantes de l'optimisation est liée au func_detail, voici comment bien les utiliser. Comme son nom l'indique, le func_detail est un brush qui détaille vos niveaux, son utilité principale est d'alléger le temps de compilation de vvis.exe tout en simplifiant la structure des leafs de vos map. Il est également fréquent de passer des brushs en func_detail lorsque ces derniers ont une géométrie trop complexes. Les func_detail agissent sur le calcul de l'éclairage mais cela est généralement négligeable.
Quoi mettre en func_detail ?
Comme beaucoup de choses sur Source 1, il y a beaucoup de cas par cas mais voici quelques exemples.
Exemple 1
Dans ce cas précis, le guichet ne bloque pas la visibilité du joueur, ce dernier n'a pas de rôle à jouer et le laisse en world geometry ne ferait que créer des leafs inutiles, ce qui augmenterait le temps de compilation pour rien.
Exemple 2
Dans cet exemple, les détails extérieurs du bâtiments n'ont aucune utilité pour l'optimisation, c'est pourquoi il est utile de les passer en func_detail, afin que ces derniers ne créent pas des leafs inutiles ou complexes. Cela rend le bâtiment plus cubique et cela s'adapte mieux au compilateur.
Exemple 3
Ici, ce pont cassé est très mal adapté au compilateur, de par sa complexité (des brushs avec de nombreuses faces, pas droits, et le pont est en rotation de 45°). Si ce pont reste en world geometry, il est très probable que la compilation de vvis.exe tourne dans le vide, ou durant plusieurs heures/jours voir plus.
Dans le cas actuel, au vu du nombre de brushs, la meilleure solution reste de passer les différentes parties du pont en props à l'aide de Propper et Blender (pour retoucher les props si nécessaire).
Rejoindre la communauté
Rejoins notre communauté pour progresser et t'améliorer
Comment créer des func_detail ?
Créer des func_detail, c'est plutôt simple. Il suffit de sélectionner votre/vos brush(s) (avec l'option "Objects" qui se trouve en haut à droite de votre hammer) puis d'appuyer d'utiliser le raccourci clavier CTRL + T. Aucun paramètre n'est à changer.
Les erreurs liées aux func_detail
Voici une petite liste de choses déconseillées lors de l'utilisation de func_detail.
Ne pas mettre de func_detail sur la totalité des brush de sa map
Cela peut totalement ruiner l'optimisation de la map, voire créer des erreurs. C'est l'une des pires solutions possibles.
Ne pas mettre des murs importants en func_detail
Cela fera calculer au joueur ce qui se situe derrière le mur en question, alors que ça ne devrait pas être le cas.
Certains brushs/entités ne doivent pas être en func_detail
A l'exemple des brushs avec des textures d'eau (de skybox, etc..), des displacements, ou encore des blocks qui servent à l'optimisation ou à fermer la map. (liste non exhaustive)
Les func_detail et les T-juncs
Sur des grosses maps ou des maps très détaillées, beaucoup de func_detail associés à des brushs en world geometry peut créer un problème de T-juncs. Cette erreur est (en résumé) lié aux limites du moteur à corriger les jonctions entre les func_detail et les brush en world geometry. Beaucoup de personnes recommandent d'utiliser la commande -notjunc dans les paramètres de compilation du $bsp_exe. Cette solution permet effectivement de compiler la map, mais cette solution n'est pas finale. Le paramètre de compilation annule la correction de ces jonctions et cela cause des erreurs visuelles au joueur comme des filets de "textures invisibles" dans les jonctions de brushs. La meilleure solution est de passer certains func_details en props à l'aide de Propper.
Compilation infinie de vvis.exe (Portal Flow)
Si votre map n'utilise pas correctement les func_detail ou que cette dernière n'a pas de leafs bien optimisés, cette "erreur" risque d'apparaître. Il est à noter que plusieurs autres facteurs sont à prendre en compte pour cette erreur, par exemple, si certains leafs sont trop grands, cela peut également poser problème. D'autres entités peuvent être nécessaire pour régler ce problème.
