Corriger les erreurs

Cubemaps dans GMod : corriger les reflets violets et noirs

Reflets violets et noirs ou faux dans ta map GMod ? Comment placer les env_cubemap, générer les cubemaps en LDR et HDR et les conserver au packing.

Des reflets en damier violet et noir, ou simplement faux, apparaissent quand les matériaux réfléchissants ne trouvent pas de cubemaps adaptées. Soit elles n’ont jamais été générées, soit elles ne l’ont été que pour l’un des deux modes d’éclairage, soit elles ont été perdues après une modification du BSP. Place des entités env_cubemap, charge la map en jeu et lance buildcubemaps séparément pour LDR et HDR. Recharge ensuite la map.

Ce que sont les cubemaps et pourquoi elles peuvent manquer

Une cubemap se compose de six images de l’environnement, capturées depuis un point fixe. Les matériaux qui ont une composante réfléchissante l’utilisent comme reflet précalculé. Ce n’est pas un miroir en temps réel. À la compilation, VBSP attribue à chaque face de brush réfléchissante un env_cubemap, par défaut le plus proche. Les modèles utilisent celui qui est le plus proche d’eux.

La compilation ne crée que des emplacements vides. Tu captures les images proprement dites en jeu, après coup, et le moteur les écrit dans le pakfile du BSP. Tant que ce n’est pas fait, les faces reflètent le ciel à la place. En intérieur, cela paraît trop clair et souvent bleuté. Si ce substitut est introuvable lui aussi, le damier violet et noir apparaît dans le reflet. Si les cubemaps n’existent que pour l’un des deux modes, les reflets sont, d’après la Valve Developer Community, trop clairs ou vides dans l’autre.

Cela n’a rien à voir avec des matériaux manquants. La face elle-même est correctement texturée, seul le reflet est cassé. Pour les vraies surfaces roses et noires et les models ERROR, consulte l’article sur la correction des textures manquantes et des models ERROR.

Bien placer les env_cubemap

  • Une par pièce ou par ambiance lumineuse. Chaque zone qui a son propre éclairage ou sa propre couleur de murs a besoin d’au moins un env_cubemap. Dans les longs couloirs, tu en places plusieurs, surtout aux transitions.
  • À hauteur des yeux. Le reflet doit correspondre à ce que voit un joueur. Place donc l’entité à peu près à hauteur de tête au-dessus du sol.
  • À l’écart des murs. Un env_cubemap à l’intérieur d’un brush ou collé à un mur capture une image inutilisable.
  • Attribuer les faces volontairement. Avec la propriété « Brush faces », tu définis quelles faces utilisent précisément cette cubemap. C’est utile pour les sols réfléchissants et le verre.
  • Ne pas en abuser. Chaque cubemap augmente la taille du BSP, et sur les maps HDR s’ajoutent encore les images du second mode. Beaucoup d’entités dans un petit espace n’apportent aucun gain visible.

L’intensité du reflet d’une face est déterminée par son matériau. Les bases de la lumière et du HDR sont traitées dans l’article sur l’éclairage dans le Source Engine.

Générer les cubemaps : LDR et HDR séparément

Deux conditions : le BSP provient de la compilation finale, et il se trouve dans le dossier garrysmod/maps sous forme de fichier ordinaire, accessible en écriture. Pour un BSP non accessible en écriture, le moteur a son propre message console (is not writable). Une map qui n’existe que dans une archive d’addon n’est pas non plus un fichier ordinaire de ce genre.

Si la map est compilée avec le HDR, il te faut deux passes :

  1. Lance le jeu et charge la map.
  2. Saisis mat_specular 0. Cela évite que des reflets existants et défectueux se retrouvent dans les nouvelles images.
  3. Saisis mat_hdr_level 0 et recharge la map, par exemple avec map <mapname>.
  4. Saisis buildcubemaps et attends la fin du processus. La vue saute brièvement d’une position de capture à l’autre.
  5. Saisis mat_hdr_level 2 et recharge encore la map. Pour la passe HDR, la Valve Developer Community recommande en plus building_cubemaps 1, qui garde la même exposition pour toutes les images.
  6. Saisis buildcubemaps une nouvelle fois.
  7. Remets mat_specular 1, recharge la map et vérifie les reflets.

Pour une map sans HDR, une seule passe suffit. Les étapes 5 et 6 sont alors inutiles.

Pièges connus

SymptômeCauseSolution
Rien n’a changé après la générationLa map n’a pas été rechargéeRecharger la map ou redémarrer le jeu
Les reflets sont corrects dans un mode, trop clairs ou vides dans l’autreLes cubemaps n’ont été générées que pour LDR ou que pour HDRLancer la passe manquante
Plus de reflets de cubemap sur les modèles, les props et les armes après le renommage du BSPPour eux, le moteur cherche les cubemaps dans le pakfile, dans un dossier qui porte le nom du fichier BSP ; les faces de brush gardent leurs refletsCompiler sous le nom définitif et générer sur ce fichier
Les faces en intérieur reflètent le cielCubemaps jamais générées, ou jetées par une nouvelle compilationRégénérer après chaque compilation finale
Le reflet montre les couleurs d’une autre pièceLa face utilise un env_cubemap situé derrière le murPlacer une entité distincte dans la pièce ou attribuer les faces
buildcubemaps tourne mais rien n’est conservéLe BSP est en lecture seule ou ne se trouve pas sous forme de fichier ordinaire dans garrysmod/mapsRetirer la protection en écriture et placer le BSP dans garrysmod/maps
Le substitut ou d’anciens reflets apparaissent dans les nouveaux refletsLes reflets étaient encore activés pendant la générationRégénérer avec mat_specular 0

À surveiller après le packing

Les cubemaps sont stockées sous forme de fichiers dans le pakfile du BSP, dans un dossier sous materials/maps/ qui porte le nom de la map. Trois règles en découlent.

Chaque nouvelle compilation les jette. VBSP réécrit le BSP à partir de zéro. Tu génères donc toujours les cubemaps à la fin, et de nouveau après chaque compilation finale.

Le nom doit être définitif. Arrête le nom de fichier définitif avant de générer les cubemaps. D’après la Valve Developer Community, renommer le BSP après coup casse les cubemaps sur les modèles, les props et les armes, car le moteur les cherche dans un dossier qui porte le nom du fichier BSP. Les faces de brush de la map ne sont pas touchées.

Vérifier après chaque modification du BSP. Ne génère les cubemaps qu’après la compilation finale et compresse le BSP tout à la fin, car, d’après la Valve Developer Community, buildcubemaps fait planter le jeu sur un BSP compressé. Que tu packes le contenu custom avant ou après les cubemaps compte moins que la vérification qui suit. Tout outil qui réécrit le pakfile peut modifier des entrées. Charge donc le fichier fini encore une fois en jeu et vérifie les reflets dans les deux modes.

Le Map Scanner liste les fichiers Lua et les assets intégrés au pakfile. En revanche, seul le jeu permet de voir si les reflets sont vraiment corrects. Un coup d’œil aux reflets fait donc partie de la vérification d’une map avant publication.

Questions fréquentes

Pourquoi les reflets de ma map sont-ils violets et noirs ?

Les matériaux réfléchissants ne trouvent pas de cubemap adaptée. Une cause typique, ce sont des cubemaps qu’un outil a retirées du pakfile, si bien que même le substitut reste introuvable. Un BSP renommé après la génération est un cas différent : d’après la Valve Developer Community, les modèles, les props et les armes perdent alors leurs reflets de cubemap, tandis que les faces de brush gardent les leurs. Régénère les cubemaps sous le nom définitif de la map, pour LDR et HDR.

Dois-je régénérer les cubemaps après chaque compilation ?

Oui. Chaque compilation produit un nouveau BSP sans cubemaps capturées. Tu peux t’en passer pendant le travail, mais avant une publication c’est obligatoire.

De combien d’entités env_cubemap une map a-t-elle besoin ?

D’assez pour que chaque pièce et chaque ambiance lumineuse nettement différente ait la sienne. Il n’y a pas de nombre fixe. Plus d’entités signifie un fichier plus lourd, donc un usage mesuré et réfléchi est payant.

Que puis-je faire en tant que joueur contre les reflets violets et noirs ?

Tu ne peux pas réparer les cubemaps de la map de quelqu’un d’autre. mat_specular 0 désactive les reflets, ce qui fait aussi disparaître le damier. La solution propre est une version corrigée de la map.