Mapping et Hammer

Guide de la skybox 3D dans Hammer : mise en place avec sky_camera

Créer une skybox 3D dans Hammer : échelle 1/16 avec sky_camera, alignement propre sur la map principale, brouillard assorti et erreurs les plus courantes.

Une skybox 3D est une petite pièce fermée à l’intérieur de ta map, qui contient le décor lointain à l’échelle 1/16. Le moteur la rend depuis la position de l’entité sky_camera et affiche le résultat partout où la texture tools/toolsskybox est visible dans la map principale. La map paraît ainsi bien plus grande, sans que les montagnes, la skyline ou la mer existent en taille réelle.

Comment fonctionne la skybox 3D

Le moteur dessine d’abord le ciel 2D habituel, puis la skybox 3D, et enfin la map elle-même par-dessus. La caméra placée dans la skybox suit les déplacements du joueur, mais seulement sur un seizième de la distance : le décor se décale donc de façon crédible quand tu marches.

Deux règles en découlent :

  • La position de la sky_camera correspond à l’origine de la map principale, la coordonnée 0 0 0. Tout l’alignement en dépend.
  • Les joueurs n’entrent jamais dans la skybox. Tout ce qui doit être accessible a sa place dans la map principale.

La construire étape par étape

  1. Planifier : décide de ce qui n’est que du décor : chaînes de montagnes, rangées d’immeubles au loin, étendues d’eau, forêt.
  2. Construire une référence : recopie le contour approximatif de la map principale avec des brushes simples, par exemple les bords du sol et les murs extérieurs. Place aussi un petit brush repère exactement sur l’origine 0 0 0 et inclus-le dans la copie.
  3. Mettre à l’échelle : sélectionne toute la copie et redimensionne-la avec Tools → Transform (Ctrl+M) d’un facteur 0.0625. Cela correspond à 1/16.
  4. Déplacer : déplace la référence réduite vers un endroit libre, à l’écart de la map principale.
  5. Placer la caméra : pose la sky_camera exactement sur le brush repère. Laisse la valeur d’échelle de l’entité sur 16, sa valeur par défaut.
  6. Construire le décor : crée le paysage lointain autour de la référence miniature, par exemple avec des displacements, des brushes simples et quelques models.
  7. Fermer : entoure complètement la pièce de la skybox avec des brushes en tools/toolsskybox. Elle doit être étanche comme n’importe quelle autre pièce.
  8. Retirer la référence : supprime la copie miniature de la map principale ou range-la dans un VisGroup masqué. Les objets masqués ne sont pas compilés.
  9. Préparer la map principale : partout où le lointain doit être visible, les faces ont besoin de tools/toolsskybox. Avec tools/toolsnodraw, la skybox reste invisible.
  10. Tester : compile la map et vérifie les transitions en jeu. r_3dsky 0 et r_3dsky 1 désactivent et réactivent la skybox 3D pour comparer.

Vérifier l’échelle et l’alignement

Une unité dans la skybox vaut 16 unités dans la map principale. Une montagne censée paraître haute de 2048 unités en jeu mesure donc 128 unités dans la skybox. Cela a des conséquences :

  • Les détails fins sont impossibles. Travaille avec une grille fine et des formes grossières.
  • Un décalage d’une unité dans la skybox devient un décalage de 16 unités en jeu. Ne déplace le décor et la sky_camera qu’ensemble.
  • Les models ne sont pas réduits automatiquement. Utilise des models conçus pour les skyboxes, à la petite échelle. Un model normal apparaît seize fois trop grand.

Vérifie l’alignement là où la map principale et la skybox se rejoignent, par exemple le long d’une route ou d’un bord de terrain. Si la hauteur et la direction correspondent, la caméra est au bon endroit.

Accorder le brouillard et la lumière

La sky_camera possède ses propres réglages de brouillard. La map principale s’appuie en général plutôt sur un env_fog_controller. Si les deux ne correspondent pas, tu vois une démarcation nette à la transition.

  • Utilise la même couleur de brouillard dans les deux entités.
  • Pour les distances de début et de fin, pars des mêmes valeurs que dans le env_fog_controller et ajuste après un test en jeu.
  • Choisis une couleur de brouillard qui s’accorde avec l’horizon de la texture de ciel 2D, toujours présente derrière la skybox 3D.

Le brouillard masque aussi le faible niveau de détail du décor. Le soleil du light_environment éclaire également la pièce de la skybox, puisqu’elle utilise le même ciel. Les ombres y paraissent vite grossières à cause de l’échelle. L’article sur l’éclairage dans le Source Engine va plus loin.

Garder un œil sur les performances

D’après le code du Source SDK, la skybox 3D est rendue en plus de la map principale dès que du ciel peut être visible depuis la position du joueur, et pas seulement quand une face de ciel est à l’écran. Sur les maps ouvertes, c’est presque toujours le cas.

  • Garde une géométrie simple et une pièce aussi petite que le décor le permet.
  • Utilise peu de models, simples, et laisse de côté tout ce que personne ne distingue de loin.
  • D’après le code du Source SDK, la skybox 3D est dessinée en une seule passe, sans reflet ni réfraction propres : l’eau avec reflets en temps réel n’y fonctionne donc pas comme dans la map principale. Un matériau d’eau peu coûteux avec $forcecheap 1 est le choix sûr.

Tu trouveras d’autres pistes dans l’article sur l’optimisation des performances d’une map GMod.

Erreurs courantes

SymptômeCauseSolution
La skybox 3D n’est pas visiblePas de sky_camera, ou la map principale n’utilise pas tools/toolsskybox sur ses bordsPlacer l’entité, vérifier les textures, vérifier r_3dsky
Le décor flotte ou est décalé sur le côtéLa sky_camera n’est pas sur l’origine mise à l’échelle, ou le facteur est fauxRefaire l’alignement avec la référence et le repère
Leak après l’ajout de la skyboxLa pièce de la skybox n’est pas étancheFermer complètement la pièce avec des world brushes
Démarcation nette à l’horizonLe brouillard de la sky_camera et celui du env_fog_controller diffèrentAccorder la couleur et les distances
Les models au loin sont énormesModel normal au lieu d’une variante pour skyboxUtiliser un petit model
Paysage miniature visible dans la map principaleLa pièce de la skybox touche la map principale ou communique avec elleÉloigner la pièce et la fermer séparément

Si VBSP signale un leak après l’ajout de la skybox, le compile log nomme l’entité à partir de laquelle le leak a été suivi, par exemple la sky_camera elle-même. L’article corriger l’erreur de leak d’une map explique comment trouver l’ouverture. Le Map Scanner repère les causes premières, les erreurs en cascade et les correctifs adaptés dans les logs de VBSP, VVIS et VRAD.

Questions fréquentes

Quelle échelle utilise une skybox 3D ?

Par défaut, 1/16. La valeur 16 est enregistrée dans la sky_camera et ne devrait pas être modifiée, car les models de skybox existants sont faits pour cette échelle. Redimensionne ta référence dans Hammer d’un facteur 0.0625.

Où placer la pièce de la skybox ?

Dans un endroit libre, à l’écart de la map principale. La pièce ne doit pas toucher la map principale et doit être étanche à elle seule. Son emplacement dans l’éditeur n’a pas d’importance, seule compte la position de la sky_camera par rapport au décor.

Une skybox 3D coûte-t-elle beaucoup de performances ?

Cela dépend de son contenu. Un décor simple fait de displacements et de quelques models ne pèse presque rien. Beaucoup de models, des matériaux élaborés ou de grandes surfaces d’eau la rendent coûteuse.

Pourquoi est-ce que je ne vois pas la skybox 3D en jeu ?

Le plus souvent, la sky_camera manque, ou les faces de la map principale n’utilisent pas tools/toolsskybox. Vérifie aussi que r_3dsky est bien sur 1.