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 :
- Lance le jeu et charge la map.
- Saisis
mat_specular 0. Cela évite que des reflets existants et défectueux se retrouvent dans les nouvelles images. - Saisis
mat_hdr_level 0et recharge la map, par exemple avecmap <mapname>. - Saisis
buildcubemapset attends la fin du processus. La vue saute brièvement d’une position de capture à l’autre. - Saisis
mat_hdr_level 2et recharge encore la map. Pour la passe HDR, la Valve Developer Community recommande en plusbuilding_cubemaps 1, qui garde la même exposition pour toutes les images. - Saisis
buildcubemapsune nouvelle fois. - 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ôme | Cause | Solution |
|---|---|---|
| Rien n’a changé après la génération | La map n’a pas été rechargée | Recharger la map ou redémarrer le jeu |
| Les reflets sont corrects dans un mode, trop clairs ou vides dans l’autre | Les cubemaps n’ont été générées que pour LDR ou que pour HDR | Lancer la passe manquante |
| Plus de reflets de cubemap sur les modèles, les props et les armes après le renommage du BSP | Pour 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 reflets | Compiler sous le nom définitif et générer sur ce fichier |
| Les faces en intérieur reflètent le ciel | Cubemaps jamais générées, ou jetées par une nouvelle compilation | Régénérer après chaque compilation finale |
| Le reflet montre les couleurs d’une autre pièce | La face utilise un env_cubemap situé derrière le mur | Placer 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/maps | Retirer la protection en écriture et placer le BSP dans garrysmod/maps |
| Le substitut ou d’anciens reflets apparaissent dans les nouveaux reflets | Les reflets étaient encore activés pendant la génération | Ré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.