Skybox custom, brouillard et color correction pour les maps GMod
Régler le ciel, le brouillard et le rendu d’une map : skybox 2D et textures de ciel custom, env_fog_controller avec Far Z, color_correction et exposition HDR.
Le ciel d’une map se définit par deux choses : des faces avec le matériau tools/toolsskybox et le nom du ciel sous Map > Map Properties. Le brouillard vient d’un env_fog_controller, l’ambiance colorée d’un color_correction avec un fichier .raw, et l’exposition HDR est bornée par un env_tonemap_controller. La couleur du brouillard, la lumière du soleil et la color correction doivent s’accorder avec l’image du ciel.
Comment fonctionne la skybox 2D
Les faces en tools/toolsskybox sont des fenêtres sur le ciel. Le moteur y dessine un cube de six images qui entoure toujours la caméra et paraît donc infiniment lointain. Le choix de ces images dépend du champ « SkyBox Texture Name » (skyname) des Map Properties. La valeur par défaut est sky_day01_01.
Tu ne saisis que le nom de base, sans skybox/ et sans extension. Le moteur ajoute un suffixe pour chaque côté du cube et cherche le matériau sous materials/skybox/ :
| Suffixe | Côté | Exemple |
|---|---|---|
up | haut | materials/skybox/sky_day01_01up.vmt |
dn | bas | materials/skybox/sky_day01_01dn.vmt |
lf, rt | gauche, droite | sky_day01_01lf.vmt, sky_day01_01rt.vmt |
ft, bk | avant, arrière | sky_day01_01ft.vmt, sky_day01_01bk.vmt |
La plupart des ciels de Half-Life 2 existent aussi sous forme d’ensemble pour le HDR, avec _hdr devant le suffixe, par exemple sky_day01_01_hdrup. En jeu, sv_skyname affiche le nom actuel. Un décor lointain fait de géométrie se construit avec la skybox 3D, qui est dessinée devant cette image.
Utiliser un ciel d’origine ou ajouter le tien
GMod fournit les ciels de Half-Life 2 (sky_day01_01 à sky_day03_06, sky_borealis01, sky_wasteland02) et un ciel réglable : avec le nom de ciel painted et l’entité env_skypaint, tu règles directement les couleurs du ciel. Pour ces ciels, tu n’as rien à packer.
Un ciel custom se compose de six fichiers VTF et de six fichiers VMT dans materials/skybox/. Le VMT d’un ciel d’origine est le meilleur modèle :
"UnlitGeneric"
{
"$basetexture" "skybox/mymap_skyup"
"$nofog" "1"
"$ignorez" "1"
}
$nofogexclut le ciel du brouillard,$ignorezle dessine sans test de profondeur pour qu’il reste derrière toute la géométrie.- Les textures de ciel d’origine portent les flags VTF Clamp S, Clamp T, No Mipmap et No LOD. Sans clamp, des coutures peuvent apparaître aux arêtes du cube.
- L’ensemble HDR de ces modèles utilise le shader
skyavec$hdrcompressedtexture. Teste spécifiquement un ciel custom sans ensemble HDR dans une map HDR.
Les douze fichiers ont tous leur place dans le BSP, voir Packer du contenu custom dans un BSP. La création des fichiers VTF et VMT est expliquée dans Créer des textures custom avec VTF et VMT.
Accorder la lumière au ciel
Le ciel n’est qu’une image, la lumière vient du light_environment. Pitch et Yaw doivent correspondre à la position du soleil dans l’image, « Brightness and Color » porte la couleur de la lumière du soleil et « Ambient Color and Brightness » la couleur du ciel. Pour les ciels de Valve, la Valve Developer Community tient une Sky List avec des valeurs tirées des maps officielles. Les entités elles-mêmes sont expliquées dans le guide de l’éclairage du Source Engine.
Le brouillard avec env_fog_controller
| Keyvalue | Défaut | Effet |
|---|---|---|
Fog Enable (fogenable) | No | Active le brouillard, sans quoi une nouvelle entité n’affiche rien |
Fog Start (fogstart) | 500 | Distance à laquelle le brouillard commence |
Fog End (fogend) | 2000 | Distance à laquelle la densité maximale est atteinte |
Fog Max Density (fogmaxdensity) | 1 | Densité maximale, de 0 à 1 |
Primary Fog Color (fogcolor) | 255 255 255 | Couleur du brouillard |
Far Z Clip Plane (farz) | -1 | Distance au-delà de laquelle plus rien n’est dessiné. -1 signifie désactivé |
Le brouillard seul ne fait gagner aucune performance, il ne fait que teinter les surfaces éloignées. Le gain vient de Far Z : ce qui se trouve au-delà n’est pas dessiné, et VVIS lit la valeur dans le env_fog_controller et s’en sert pour limiter la visibilité dès la compilation. D’après le FGD, Far Z devrait être supérieur à Fog End, et Fog Max Density devrait valoir 1, sinon le vide situé derrière devient visible. D’autres leviers sont présentés dans Optimiser les performances d’une map GMod.
Comme le ciel est exclu du brouillard, les bâtiments entièrement noyés dans le brouillard s’en détachent sous forme d’aplats d’une seule couleur. Choisis donc une couleur de brouillard qui s’accorde avec l’horizon.
La skybox 3D a son propre brouillard dans la sky_camera, avec les mêmes champs pour la couleur, le début, la fin et la densité. Le moteur convertit lui-même le début et la fin à l’échelle de la skybox, tu saisis donc les mêmes nombres que dans le env_fog_controller. S’il y a plusieurs controllers, le FGD donne la priorité à celui qui porte le flag « Master ». Dans GMod, c’est un fog_volume qui active un brouillard différent selon la zone.
L’ambiance colorée avec color_correction
Une color correction est une table de correspondance qui remplace chaque couleur de l’image finale par une autre. Elle prend la forme d’un fichier .raw d’environ 96 Ko et se crée en jeu :
- Place un
color_correctiondans la map et laisse « Lookup Table Filename » vide pour l’instant. - Charge la map, active
sv_cheats 1et saisiscolorcorrectionui. - Crée des filtres dans la fenêtre de l’outil et règle-les. Reste à portée de l’entité pendant ce temps.
- Enregistre le résultat en
.rawet place le fichier sousmaterials/colorcorrection/. - Saisis le chemin dans l’entité, recompile et packe le fichier dans le BSP.
Le nom de fichier (filename) est relatif au dossier du jeu et inclut l’extension, par exemple materials/colorcorrection/mymap.raw. La whitelist de gmad n’autorise les fichiers .raw que sous materials/colorcorrection/.
« Lookup Falloff Start Distance » vaut 0 par défaut et « Lookup Falloff End Distance » 200. La correction ne s’applique alors que dans un rayon de 200 unités autour de l’entité et s’estompe vers l’extérieur. Pour toute la map, saisis -1 dans les deux champs. « Maximum Weight » règle l’intensité, et Enable et Disable te permettent de basculer d’une ambiance à l’autre.
L’exposition HDR avec env_tonemap_controller
Dans une map HDR, le moteur ajuste l’exposition en continu : il assombrit les scènes claires et éclaircit les scènes sombres. Le env_tonemap_controller fixe des limites à cet ajustement. Dans le FGD de GMod, il n’a pas de keyvalues pour cela, tu le pilotes par des inputs, le plus simplement depuis un logic_auto :
My Output Target Entity Target Input Parameter
OnMapSpawn tonemap SetAutoExposureMin 0.8
OnMapSpawn tonemap SetAutoExposureMax 1.6
OnMapSpawn tonemap SetBloomScale 0.5
Les nombres sont des valeurs d’exemple. SetAutoExposureMin limite l’assombrissement d’une scène claire, SetAutoExposureMax l’éclaircissement d’une scène sombre. Dans le Source SDK, les valeurs initiales sont 0.5 et 2. SetBloomScale règle le halo autour des surfaces claires. SetTonemapRate est censé régler la vitesse de l’ajustement, mais d’après la Valve Developer Community, il n’avait d’effet qu’en solo dans les branches du moteur antérieures à CS:GO. Vérifie-le donc sur un serveur. Les inputs SetTonemapScale et BlendTonemapScale sont mis en commentaire dans le FGD de GMod, avec la remarque qu’ils n’ont jamais fonctionné. La structure des outputs est présentée dans Inputs et outputs dans Hammer.
Problèmes typiques
| Symptôme | Cause | Solution |
|---|---|---|
| Le ciel est noir ou affiche un damier rose et noir | Nom mal orthographié, fichiers non packés ou mauvais suffixes | Chercher Unable to load sky dans la console, vérifier sv_skyname, packer |
| Le ciel ne s’accorde pas avec la skybox 3D | Le brouillard de la sky_camera diffère de celui du env_fog_controller | Aligner la couleur, le début, la fin et la densité |
| La géométrie est visiblement coupée au loin | Far Z inférieur à Fog End, densité inférieure à 1 ou brouillard désactivé | Far Z au-dessus de Fog End, densité à 1, « Fog Enable » sur Yes |
| La color correction n’agit qu’à un seul endroit | Le falloff est encore à 0 et 200 | Mettre les deux valeurs à -1 |
| La color correction manque chez les joueurs | .raw non packé, chemin sans extension, ou désactivée par le joueur | Vérifier le chemin, packer, faire un contre-test avec mat_colorcorrection 0 et 1 |
La color correction et le HDR sont des options graphiques, et un serveur peut bloquer la color correction via sv_allow_color_correction. La map doit donc rester lisible sans l’un ni l’autre. Pour voir si les matériaux du ciel et le .raw sont dans le pakfile, passe par le Map Scanner, qui liste les fichiers intégrés.
Questions fréquentes
Une map peut-elle avoir plusieurs ciels ?
Non. Le nom du ciel est une propriété de la map entière et s’applique partout où tools/toolsskybox est visible. Des ambiances différentes selon la zone s’obtiennent avec le brouillard, la color correction et la lumière.
Quelle taille pour les textures de ciel ?
Le ciel par défaut sky_day01_01 utilise 512 × 512 pixels pour le dessus et 512 × 256 pour les côtés. Des textures plus grandes sont plus nettes, mais avec six côtés, elles comptent six fois dans la taille du fichier de la map.
Pourquoi ma map a-t-elle un autre aspect chez les autres joueurs ?
Le plus souvent à cause des options graphiques. Avec le HDR, ce sont les lightmaps HDR, le tonemapping et le ciel HDR qui s’appliquent, sans HDR la version LDR. Si la color correction est désactivée, ton ambiance colorée disparaît. Teste les deux variantes avant de publier.