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

Marcher dans une scène 3DGS : prise en charge de la collision

LCC4Unreal prend en charge le chargement dynamique des données de collision : un personnage peut se déplacer et interagir librement dans le monde 3DGS.

Prérequis

La collision dépend des fichiers de collision fournis avec les données, et les exigences diffèrent selon le format :

FormatDonnées de collisionPrise en charge
.lcccollision.lci dans le répertoire de données, collision.bin dans les versions antérieuresPrise en charge
.lcc2Fichiers .ply dans data/mesh/ du répertoire de donnéesPrise en charge
.sog / .spz / .plyAucuneNon prise en charge

Le plugin recherche dans l'ordre collision.lci → collision.bin → data/mesh/*.ply ; en l'absence des trois, il émet un avertissement et désactive la collision. Après le chargement des données, HaveValidCollisionData() permet de vérifier si les données courantes contiennent des données de collision utilisables.

Note : collision.lci doit être exporté avec LCC Studio v1.6.1 ou une version ultérieure ; les données exportées avec des versions antérieures utilisent collision.bin.

Solutions de remplacement pour les formats à fichier unique

.sog, .spz et .ply sont des formats à fichier unique : ils ne transportent pas de données de collision et le plugin ne peut pas en générer. Quand une collision est nécessaire, construisez-la vous-même dans la scène :

  • Blocking Volume : composez le sol, les murs et les autres zones à bloquer avec les volumes de blocage du moteur ; adapté aux formes régulières, c'est la solution la moins coûteuse
  • Maillage approximatif : placez un maillage épousant la forme du 3DGS et activez sa collision ; adapté aux scènes de forme complexe. Ce maillage peut réutiliser le maillage proxy, en passant simplement son préréglage de collision en mode bloquant

Ces deux méthodes sont indépendantes du mécanisme de chargement de collision de LCC : elles ne sont pas soumises à CollisionLoadMaxDistance et ne sont pas échangées dynamiquement au fil des déplacements de la caméra.

Mécanisme de chargement

Comme les données de rendu, les données de collision sont stockées par blocs spatiaux. Le plugin ne charge pas toute la collision d'un coup : il ne charge que les blocs situés dans une certaine distance autour de la caméra et les échange dynamiquement au fil des déplacements de la caméra.

Camera position changes
      │
      ▼
Compute the set of collision blocks to load within range
      │
      ▼
Compare with the previous set ── Same ──▶ Skip, do nothing
      │ Different
      ▼
Load the new blocks → Hand them to the physics system for baking → Generate collision bodies

Quelques points d'implémentation :

  • La portée de chargement est contrôlée par Max Load Collision Distance(m) ; les zones au-delà de cette distance n'ont pas de collision
  • Le premier chargement est synchrone, pour éviter qu'un personnage traverse le sol et tombe avant que la collision soit prête ; les mises à jour suivantes sont asynchrones et ne bloquent pas le thread principal
  • Une limitation de fréquence est appliquée : la collision n'est pas reconstruite à chaque image lors des déplacements continus de la caméra
  • Quand l'ensemble des blocs visibles n'a pas changé, le traitement est ignoré : un petit déplacement sur place ne déclenche pas de reconstruction
  • Le calcul se fait uniquement selon la caméra principale : les SceneCapture ne participent pas au chargement de la collision

Avantages

  • L'occupation mémoire ne dépend que de la portée de chargement, pas du volume total de données, donc les grandes scènes peuvent aussi avoir de la collision
  • Le nombre de corps de collision que le système physique doit traiter reste toujours maîtrisé et ne ralentit pas les calculs physiques quand la taille de la scène augmente

Coûts et contournements

ProblèmeCauseContournement
Le personnage traverse le sol et tombe au démarrage du jeuLa collision n'est pas encore construiteSurélevez le PlayerStart, ou n'activez le déplacement du personnage qu'une fois la collision prête
Saccade quand le personnage entre dans la zone de la scène 3DGS depuis le lointainLe personnage apparaît en dehors de la portée de chargement de la collision, et l'entrée déclenche un premier chargement synchronePlacez le point d'apparition du personnage dans la portée de chargement de la collision, ou chargez toute la collision d'un coup
Pas de collision au loin, les tests de rayon n'atteignent rienLes zones au-delà de la portée de chargement ne génèrent pas de corps de collisionAugmentez Max Load Collision Distance(m), ou utilisez une méthode de détection qui ne dépend pas de la collision
Absence de collision pendant un court instant après une téléportation ou un déplacement rapideLes blocs de collision de la nouvelle zone sont encore en chargementChargez toute la collision d'un coup
Saccades pendant les déplacements, temps Update Collision élevéLes blocs de collision sont échangés et rebakés fréquemmentRéduisez la portée de chargement, ou vérifiez si la collision est réellement nécessaire
Le maillage de navigation est reconstruit à répétition avec la navigationLes changements de collision déclenchent la mise à jour du NavMeshAugmentez la portée de chargement pour que la zone cible soit chargée d'un coup, et utilisez un bake Static ; voir Prise en charge du système de navigation

Charger toute la collision d'un coup

La plupart des coûts ci-dessus viennent des échanges dynamiques à l'exécution. Si la taille de la scène est limitée et que la mémoire a de la marge, augmentez Max Load Collision Distance(m) jusqu'à couvrir toute la scène pour que la collision soit entièrement construite au chargement des données.

Il n'y a alors plus d'échange de blocs de collision à l'exécution, et les problèmes du tableau précédent (chute à travers le sol, absence de collision après téléportation, saccades en déplacement, reconstruction répétée de la navigation) disparaissent. C'est particulièrement recommandé avec le système de navigation.

Le coût est un temps de chargement plus long au démarrage et une occupation mémoire fixée à la taille de la collision de toute la scène. Pour juger de la faisabilité : consultez Collision Data Usage dans stat xgrids et vérifiez que l'occupation mémoire après chargement complet reste acceptable.

Activation

LCCComponent->SetLCCCollisionEnable(true);

Ou cochez bEnableCollision dans le panneau Details.

Activation de la collision LCC dans le panneau Details

Activation de la collision LCC dans le panneau Details

Démonstration de la collision dynamique LCC

Collision dynamique d'un personnage dans une scène LCC

Vérification

Dans les réglages du mode d'affichage, choisissez la collision joueur ou la collision de visibilité pour observer si la collision est bien activée

Affichage des corps de collision dans le mode d'affichage

Vérification des corps de collision avec le mode collision joueur ou collision de visibilité

Propriétés associées

PropriétéDescription
bEnableCollisionActive la collision
CollisionLoadMaxDistanceDistance de chargement maximale des données de collision (300 mètres par défaut)
Propriétés d'activation de la collision et de distance de chargement maximale

Configuration de l'état d'activation de la collision et de la distance de chargement maximale

Points de vigilance

  • Une fois la collision activée, le LineTrace du moteur UE permet des tests de rayon basés sur les corps de collision, avec une portée de détection également limitée par la portée de chargement
  • La mémoire occupée par les données de collision est visible dans Collision Data Usage de stat xgrids, et le temps de mise à jour dans Update Collision ; pour la signification des paramètres, voir Paramètres de performance
Précédent
Animation de chargement
Suivant
Prise en charge du système de navigation