XGRIDSDocumentation
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Lixel CyberColor

    • LCC Studio

      • Prise en main
      • Version et mises à jour
      • Téléchargement et installation
      • Aperçu de l’interface et navigation
      • Avant la reconstruction
      • Reconstruction du modèle
      • Reconstruction d’un modèle unique
      • Fusion cartographique
      • Fusion aérienne-terrestre
      • Reconstruction aérienne
      • Mes modèles
      • Autres fonctionnalités
      • Paramètres et compte
      • Convertisseur
      • Reconstruction vidéo
      • Questions fréquentes
    • LCC Scene Editor

      • Version et mises à jour
      • Compte et connexion
      • Présentation du produit et accueil
      • Interface de l’éditeur
      • Modes de navigation de scène
      • Fichier
      • Paramètres
      • Opérations d’édition
      • Fenêtre
      • Barre d’outils globale
      • Ressources et propriétés
      • Barre d’outils gauche
      • Points de vue
      • Portail
      • Skybox
      • Annotations
      • Mesure
      • Parcours
      • Rapport de scène
      • 3D Layout
      • Mini-carte
      • Mode Prévisualisation, Viewer
      • Aide
      • FAQ
      • Point d’apparition
    • LCC Model Editor

      • Version et mises à jour
      • Guide de l’utilisateur
      • Aperçu et interface
      • Opérations sur les fichiers
      • Sélecteurs
      • Modification des modèles
      • Mesure
      • Réglage des couleurs
      • Gestion des ressources
      • Paramètres et aide
      • Questions fréquentes
  • Plugin & SDK

    • Unreal

      • Introduction
      • Démarrage rapide - Windows
      • Démarrage rapide - Linux
      • Démarrage rapide - Quest3
      • Éditions et licences
      • Rendu
      • Rastérisation Tiled (expérimental)
      • Réglages visuels
      • Normales et éclairage
      • Édition de scène
      • Paramètres de performance
      • Guide d'optimisation des performances
      • Intégration avec les plugins tiers et moteur
      • Maillage proxy
      • Animation de chargement
      • Collision
      • Prise en charge du système de navigation
      • Prise en charge de l'eau à couche unique
      • Localisation
      • Questions fréquentes
      • Dépannage
      • Journaux et diagnostics
      • Nous contacter
      • Bonnes pratiques

        • Rééclairer un 3DGS avec un maillage LixelStudio
      • Référence API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actors SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Journal des modifications

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1

Générer un maillage de navigation dans une scène 3DGS

Navigation System Support

Portée

Ce document concerne les scènes qui construisent la navigation à partir des données de collision LCC : il ne s'applique donc qu'à ALCCActor et ALCC2Actor, car seuls les formats .lcc et .lcc2 embarquent des données de collision. Voir Collision.

.sog, .spz et .ply ne contiennent pas de données de collision : les zones praticables doivent être construites vous-même avec un Blocking Volume ou un maillage approximatif. Ces géométries sont des objets UE standards et la configuration de la navigation suit le flux officiel d'Unreal Engine, sans les particularités décrites ici.

Vue d'ensemble

Le Navigation System d'Unreal Engine fournit les zones praticables aux personnages IA via le NavMesh. La génération du NavMesh dépend de la présence, dans la scène, de géométries pouvant influer sur la navigation et disposant d'une collision valide.

La collision LCC est chargée dynamiquement par blocs : seuls les blocs de collision situés dans une certaine distance autour de la caméra sont chargés, et ils sont échangés au fil des déplacements de la caméra (mécanisme détaillé dans Collision : mécanisme de chargement). Ce point détermine directement la stratégie de configuration de la navigation :

  • L'échange des blocs de collision à l'exécution déclenche la reconstruction du NavMesh et provoque des saccades
  • Il faut donc faire en sorte que la collision de la zone cible soit entièrement chargée d'un coup, puis construire la navigation en mode Static

Pour les scènes LCC, il est recommandé de régler Runtime Generation sur Static. Dynamic réagit en continu aux changements de collision et reconstruit le NavMesh ; associé à une collision chargée par blocs, il déclenche des reconstructions fréquentes, ce qui engendre un coût CPU et des saccades nettes dans les grandes scènes.

Prérequis

ConditionDescription
Les données contiennent un fichier de collision.lcc nécessite collision.lci (collision.bin dans les anciennes versions) ; .lcc2 nécessite les fichiers .ply dans data/mesh/. Voir Collision : prérequis
La collision est activéebEnableCollision = true sur l'Actor
Les données de collision sont chargéesEn choisissant la collision joueur ou la collision de visibilité dans le mode d'affichage, les corps de collision chargés sont visibles
L'Actor peut influer sur la navigationCanEverAffectNavigation = true sur l'Actor
La portée de chargement de la collision est suffisanteMax Load Collision Distance(m) couvre la zone cible pour laquelle la navigation doit être construite, 300 mètres par défaut
Les limites de construction du NavMesh sont suffisantesUn NavMeshBoundsVolume est placé dans la scène et couvre la zone cible d'activité de l'IA

La distance de chargement de la collision et le NavMeshBoundsVolume contrôlent deux portées différentes : la première détermine quelles zones disposent de données de collision, le second détermine dans quelles limites le moteur construit le NavMesh. Pour qu'un NavMesh utilisable soit généré sur la zone cible, les deux doivent couvrir cette zone.

Étapes

1. Activer et vérifier la collision LCC

Sélectionnez un ALCCActor ou un ALCC2Actor et activez Enable Collision (bEnableCollision) dans le panneau Details, ou activez-la par code :

LCCComponent->SetLCCCollisionEnable(true);

Confirmez en même temps que CanEverAffectNavigation = true sur l'Actor, afin que sa collision puisse participer à la construction de la navigation.

Après le chargement des données LCC, choisissez la collision joueur ou la collision de visibilité dans le mode d'affichage et vérifiez que des corps de collision sont bien apparus dans la zone cible. La collision utilise un bake physique asynchrone : quelques secondes d'attente peuvent encore être nécessaires après le début du rendu de l'image 3DGS.

Vérification du chargement des corps de collision LCC dans le mode d'affichage d'Unreal Engine

Avec le mode collision joueur ou collision de visibilité, confirmez que les corps de collision LCC de la zone de navigation cible sont chargés

2. Configurer la portée de chargement de la collision

La collision LCC n'est chargée que dans la portée indiquée par Max Load Collision Distance(m), 300 mètres par défaut.

Avec la navigation, augmentez cette valeur pour couvrir toute la zone d'activité de l'IA et charger la collision d'un coup. Sinon, les blocs de collision sont échangés en continu à l'exécution au fil des déplacements de la caméra, ce qui déclenche des reconstructions répétées du NavMesh et des saccades marquées. Quand la portée est suffisamment grande, il n'y a plus de changement de collision à l'exécution et la navigation n'est plus reconstruite.

Le coût est un temps de chargement plus long au démarrage et une occupation mémoire accrue. Collision Data Usage dans stat xgrids permet de vérifier que la mémoire après chargement complet reste acceptable ; voir Collision : charger toute la collision d'un coup.

Ne passez pas Runtime Generation en Dynamic pour compenser une distance de collision insuffisante. Dynamic n'étend pas la portée de chargement de la collision, et les zones au-delà de cette distance n'ont toujours pas de collision utilisable pour la construction de la navigation.

3. Placer et ajuster le NavMeshBoundsVolume

Placez un NavMeshBoundsVolume dans la scène, puis déplacez-le et redimensionnez-le pour qu'il couvre l'intégralité de la zone où l'IA doit évoluer.

Placement et mise à l'échelle d'un NavMeshBoundsVolume dans une scène LCC

Placez et redimensionnez le NavMeshBoundsVolume pour que les limites de construction de la navigation couvrent toute la zone d'activité de l'IA

Vérifiez de nouveau que les deux portées satisfont simultanément aux exigences :

  • Max Load Collision Distance(m) : détermine la présence d'une collision LCC chargée dans la zone cible ;
  • NavMeshBoundsVolume : détermine dans quelles limites Unreal Engine construit le NavMesh.

Augmenter une seule des deux portées ne suffit pas à résoudre le défaut de couverture de l'autre.

4. Configurer le Navigation System

RéglageValeur recommandéeDescription
Runtime GenerationStaticRéglage à privilégier. La navigation n'est générée qu'à la construction dans l'éditeur, ce qui évite le coût des reconstructions continues à l'exécution
Cell SizeValeur par défautPlus la valeur est petite, plus le NavMesh est précis, mais plus le temps de construction, la mémoire et le coût à l'exécution augmentent

Quand utiliser Dynamic

N'envisagez Dynamic que si le NavMesh doit réellement être reconstruit automatiquement à l'exécution en fonction des changements de géométrie, par exemple dans une scène interactive où les zones praticables changent à l'exécution.

Utiliser Dynamic avec la collision LCC demande une prudence particulière : la collision étant elle-même chargée dynamiquement par blocs, chaque échange de bloc est interprété comme un changement de géométrie et déclenche une reconstruction de la navigation, ce qui peut générer un coût CPU et des saccades continus dans les grandes scènes. Si Dynamic est vraiment nécessaire, augmentez en même temps la portée de chargement de la collision pour couvrir toute la zone d'activité et éviter tout changement de collision à l'exécution.

N'activez pas Dynamic dans le seul but d'augmenter la distance de collision ou la couverture de la navigation.

5. Attendre que la collision soit prête et construire le NavMesh Static

Avec le mode Static recommandé, procédez dans cet ordre :

  1. Chargez les données LCC et confirmez que l'image 3DGS s'affiche ;
  2. Attendez la fin du bake asynchrone de la collision ;
  3. Avec le mode collision joueur ou collision de visibilité, confirmez que la collision de la zone cible est chargée ;
  4. Confirmez que Collision Load Max Distance et le NavMeshBoundsVolume couvrent tous deux la zone cible ;
  5. Exécutez Build → Build Paths dans le menu principal d'Unreal Engine ;
  6. Attendez la fin de la construction de la navigation ;
  7. Sauvegardez le niveau et les données de navigation.

Vérification et dépannage

Appuyez sur P pour afficher le NavMesh dans le viewport :

  • Zones vertes : un NavMesh praticable a été généré ;
  • Absence de zone verte : aucun NavMesh n'a été généré à cet endroit, procédez au dépannage dans l'ordre ci-dessous.
Affichage des zones praticables vertes du NavMesh dans une scène LCC avec la touche P

Vérification du NavMesh avec la touche P ; une couverture verte indique que des données de navigation praticables ont été générées sur la zone

Si aucun NavMesh vert n'apparaît à l'emplacement visé, vérifiez dans l'ordre :

  1. Les données contiennent-elles une collision : confirmez qu'il s'agit bien de .lcc ou .lcc2 et que le fichier de collision correspondant est présent dans le répertoire de données ; les formats à fichier unique n'ont pas de collision et ne peuvent pas suivre ce flux ;
  2. La collision est-elle activée et chargée : confirmez bEnableCollision = true et CanEverAffectNavigation = true, et vérifiez la présence du corps de collision à l'emplacement visé en mode collision joueur ou collision de visibilité ;
  3. La portée de chargement de la collision est-elle suffisante : si l'emplacement visé est hors de la portée de chargement, augmentez Max Load Collision Distance(m) et attendez que la collision soit de nouveau prête ;
  4. Le NavMeshBoundsVolume couvre-t-il l'emplacement visé : déplacez ou redimensionnez le Volume pour que les limites de construction de la navigation couvrent entièrement la zone cible ;
  5. Le NavMesh Static a-t-il été reconstruit : une fois la collision et les portées vérifiées, exécutez Build → Build Paths, attendez la fin, puis sauvegardez le niveau et les données de navigation ;
  6. Appuyez de nouveau sur P pour contrôler la couverture verte.

Si tout ce qui précède est correct et que la génération échoue toujours, examinez les erreurs liées à Navigation, Recast et à la collision dans l'Output Log, et confirmez que le niveau courant a bien été sauvegardé.

Précédent
Collision
Suivant
Prise en charge de l'eau à couche unique