Limites des maps Source : brushes, entités et taille expliqués
Limites des maps Source : espace de coordonnées, brushes, entités, displacements et lightmaps, erreurs MAX_MAP typiques et comment rester en dessous.
Une map Source est limitée dans plusieurs directions : dans l’espace de coordonnées (±16384 unités par axe), dans le nombre de brushes, d’entités brush, de faces, de displacements et d’overlays et, à l’exécution, dans le nombre d’entités. Garry’s Mod a relevé plusieurs de ces limites bien au-dessus des valeurs par défaut du Source SDK 2013. Si tu dépasses une limite, le compilateur s’arrête avec un message comme MAX_MAP_BRUSHES, ou le jeu plante au chargement ou en cours de partie. Les principales parades : des props à la place des brushes et des entités regroupées.
Les limites les plus importantes en un coup d’œil
| Limite | Garry’s Mod | Source SDK 2013 | Ce qui compte |
|---|---|---|---|
| Espace de coordonnées | ±16384 unités par axe | ±16384 unités par axe | toute la map, skybox 3D comprise |
| Brushes | 65535 | 8192 | chaque brush, y compris les func_detail et les brushes à l’intérieur d’entités |
| Entités brush | 4096 | 1024 | chaque entité faite de brushes, comme func_door, func_brush ou les triggers ; le monde lui-même occupe une place |
| Planes, faces, vertices | 65536 chacun | 65536 chacun | la géométrie compilée |
| Displacements | 16384 | 2048 | chaque face de displacement |
| Overlays | 8192 | 512 | chaque info_overlay |
| Données de lightmap | aucun maximum dans le tableau d’utilisation | 16 Mo dans le header, aucun maximum dans le tableau d’utilisation | toutes les lightmaps réunies |
| Edicts à l’exécution | 8192 | 2048 | les entités synchronisées en réseau pendant la partie |
Pour les limites de compilation, la colonne Garry’s Mod indique ce que les outils de compilation de GMod affichent comme maximum dans leur tableau d’utilisation (version de septembre 2026). Le tableau ne donne aucun maximum pour les displacements, 16384 est donc le chiffre du wiki de la Valve Developer Community, confirmé par une compilation de test. La limite d’edicts est elle aussi celle que ce wiki indique pour GMod. La colonne SDK contient les valeurs par défaut du code source du Source SDK 2013, que citent la plupart des anciennes listes. Les compilateurs communautaires s’en écartent encore. Le tableau dans le log de ton propre compilateur, décrit plus bas, fait toujours foi.
Ce que signifie l’espace de coordonnées
La grille de Hammer s’arrête à 16384 unités dans chaque direction. Une map peut donc mesurer au maximum 32768 unités de long, de large et de haut. À environ 1,9 centimètre par unité, ça fait un peu plus de 600 mètres de côté. Aucune géométrie ne peut être créée au-delà.
En pratique, c’est rarement ce mur-là que tu touches en premier. Les maps très grandes et ouvertes échouent plus tôt à cause du calcul de visibilité et du framerate. Les vastes paysages se simulent mieux avec une skybox 3D, construite à l’échelle 1:16 et qui prend donc peu de place.
Comment tu remarques que tu atteins une limite
- Erreurs de compilation : VBSP ou VRAD s’arrêtent et nomment la limite concernée, par exemple
MAX_MAP_BRUSHESouMAX_MAP_PLANES. Lire un compile log montre comment trouver ces messages. - Le tableau d’utilisation : À la fin du log de VRAD se trouve un tableau qui indique, pour chaque section de données du BSP, la quantité utilisée et la quantité maximale, ainsi que le taux de remplissage en pourcentage. Quand une valeur approche de son maximum, le compilateur marque la ligne avec
VERY FULL!. Les sections sans maximum fixe, commedispinfoset les données d’éclairage, y affichent un 0 et ne sont jamais marquées. Regarde ce tableau avant chaque sortie. - Crash en jeu : Si tous les edicts sont utilisés à l’exécution, le jeu se ferme avec un message comme
ED_Alloc: no free edicts. Souvent, ça n’arrive que sur un serveur plein, quand beaucoup de joueurs font apparaître des props. - Hammer refuse : Les objets ne peuvent pas être déplacés au-delà du bord de la grille.
Si tu n’arrives pas à interpréter un message, colle le log dans le Map Scanner. Il détecte les causes racines et les conséquences dans les logs de VBSP, VVIS et VRAD. Les messages connus figurent aussi dans la base d’erreurs.
Parades pour la géométrie
- Des props plutôt que des brushes. Rambardes, tuyaux, meubles, arches et autres détails à nombreuses faces ont leur place dans des modèles. Un
prop_staticne compte ni comme brush ni comme entité à l’exécution, car il est inscrit de façon permanente dans le BSP. - Simplifie le brushwork. Mieux vaut quelques grands brushes que beaucoup de petits. Les restes découpés par l’outil Carve font grimper sans raison le nombre de brushes et de faces.
- Comprends bien
func_detail. Il réduit les visleafs et les portals et raccourcit ainsi VVIS. Il ne soulage pas la limite de brushes, car un brush de détail reste un brush. Plus de détails dans Optimiser les performances d’une map GMod. - Utilise les displacements avec parcimonie. Préfère quelques grandes faces à beaucoup de petites et ne monte pas la résolution plus que nécessaire. Le terrain lointain passe dans la skybox 3D ou dans un modèle.
- Soulage les lightmaps. Augmente le lightmap scale sur les grandes faces qui n’ont pas besoin d’ombres nettes. Les outils n’indiquent aucun maximum fixe pour les données d’éclairage, mais elles alourdissent le BSP.
Parades pour les entités
- Regroupe des brushes en une seule entité. Dix vitres sous forme de dix entités
func_brushoccupent dix emplacements. Si tu les sélectionnes toutes et que tu les lies ensemble à une seule entité, elles n’en occupent plus qu’un. Si elles n’ont besoin d’aucune fonction d’entité, elles deviennent desfunc_detailet n’en occupent aucun. - Privilégie les props statiques. Tout ce qui ne bouge jamais devient un
prop_staticplutôt qu’unprop_dynamicou unprop_physics. - Laisse les lumières sans nom. Un
lightsans nom est intégré aux lightmaps et n’existe plus en tant qu’entité en jeu. Ne nomme que les lumières que tu veux vraiment allumer ou éteindre. - Compte les effets. Sprites, cordes, particules et sources sonores sont inoffensifs à l’unité, mais pèsent en grand nombre. Certaines entités créent des entités auxiliaires supplémentaires en jeu.
- Prévois une réserve. Sur un serveur s’ajoutent les joueurs, les armes, les véhicules et les props que les joueurs font apparaître. Une map proche de la limite quand elle est vide ne tournera pas de façon fiable en exploitation.
Questions fréquentes
Quelle taille maximale peut avoir une map GMod ?
L’espace de coordonnées va de -16384 à +16384 unités sur chaque axe, soit 32768 unités de côté. Ça correspond à un peu plus de 600 mètres. Les mondes plus grands ne paraissent plus grands que grâce à une skybox 3D.
Un func_detail compte-t-il comme un brush ?
Oui. Un func_detail compte dans la limite de brushes, mais pas dans celle des entités brush, ni comme entité à l’exécution. Son intérêt réside dans le calcul de visibilité.
Que signifie VERY FULL! dans le compile log ?
Le marqueur apparaît dans le tableau d’utilisation à la fin du log et indique qu’une section de données du BSP est presque pleine. La map fonctionne encore, mais n’a quasiment plus de marge pour du contenu supplémentaire. Réduis précisément la section nommée dans cette ligne.
Puis-je relever les limites ?
Pas avec des réglages dans la map. Les limites sont définies dans les outils de compilation et dans le moteur. Garry’s Mod en a relevé plusieurs au fil de ses mises à jour, par exemple la limite d’overlays à 8192 en mars 2024. La seule approche fiable est de construire la map de façon à rester en dessous avec une réserve.