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

Structs : référence des types de structures

Types de structures exposés par le module LCC4UnrealRuntime.

ModuleLCC4UnrealRuntime
En-têteCore/LCCStructure.h
#include "Core/LCCStructure.h"

Les structures portant BlueprintType peuvent être décomposées et composées dans Blueprint avec les nodes Break et Make.

Performance

FRenderInfo

Paramètres de performance communs. Utilisés par ULCCComponentBase::Performance.

La particularité de cette structure est que chaque valeur est associée à un interrupteur d'activation. Lorsque l'interrupteur est désactivé, la valeur par défaut intégrée au plugin est utilisée ; votre valeur n'est prise en compte qu'une fois l'interrupteur activé. Les Setters correspondants du Component mettent automatiquement l'interrupteur à true.

ChampTypeDéfautInterrupteur associéDescription
MaxDistanceuint32300bDistanceLimitDistance de rendu maximale, en mètres
MaxSplatNumuint323000bMaxSplatNumLimitNombre maximal de splats par image, en dizaines de milliers, plafonné à 10000
LevelFactorfloat1bCanSetLevelFactorFacteur d'échelle des distances de LOD, de 0.01 à 20
PreloadDistanceuint32200bPreloadDistanceLimitDistance de préchargement. La valeur effective est MaxDistance + 35
StartLeveluint320bCanSetStartLevelLevel de départ, de 0 à 20
EndLeveluint3220bCanSetEndLevelLevel de fin, de 0 à 20
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimitDistance maximale de chargement de la collision, en mètres
bUseFullLoadbooltruebCanSetUseFullLoadInterrupteur de chargement complet pour les petites scènes. À la construction de ULCC2Component, il est réécrit en interrupteur activé avec la valeur false
FullLoadSplatNumuint321500bCanSetFullLoadNumSeuil de chargement complet, en dizaines de milliers

Méthodes auxiliaires :

bool HasMaxDistanceLimit() const;      // whether a distance limit is set
bool HasMaxNumLimit() const;           // whether a count limit is set
bool NeedPreload() const;              // whether preloading is needed
uint32 GetMaxDistance() const;         // effective max distance
uint32 GetMaxSplatNum() const;         // effective max count
float GetLevelFactor() const;          // effective LOD factor
uint32 GetStartLevel() const;          // effective start level
uint32 GetEndLevel() const;            // effective end level
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const;     // returns GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const;   // whether the given count uses full load
void Reset();                          // resets only the value fields, not the enable switches

Deux pièges fréquents :

  • Reset() ne réinitialise que les champs de valeur (distance, nombre, Level, facteur) et ne réinitialise aucun interrupteur b*, ni bUseFullLoad ni FullLoadSplatNum.
  • FRenderInfo::GetPreloadDistance() renvoie GetMaxDistance() + 35, alors que la fonction du même nom sur le Component, ULCCComponentBase::GetPreloadDistance(), renvoie la valeur brute du champ. Les deux résultats diffèrent.

Les Getters renvoient la valeur effective : lorsque l'interrupteur est désactivé, c'est la valeur par défaut intégrée qui est renvoyée, et non celle que vous avez saisie précédemment. Ce point prête à confusion, lire le champ directement et appeler le Getter peuvent donner des résultats différents.

Points d'utilisation :

  • Passer par les Setters du Component est le plus simple, il n'y a pas d'interrupteur à gérer à la main.
  • En modifiant directement les champs de la structure, penser à mettre également l'interrupteur à true, sans quoi la valeur reste sans effet.
// recommended: use the setter, the switch is handled automatically
Component->SetMaxDistance(200);

// when changing the field directly, the switch must be turned on manually
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;

FLCCRenderInfo

Paramètres de performance propres à LCC1. Utilisés par ULCCComponent::LCCPerformance.

ChampTypeDéfautInterrupteur associéDescription
SortFactorfloat1bCanSetSortFactorFacteur d'échelle de la fréquence de tri, de 0.2 à 5. Plus la valeur est élevée, moins il y a de tris et meilleure est la performance
bAddExtraPreNodesboolDéterminé par une macrobEnableExtraPreNodesAjoute des nœuds de préchargement supplémentaires, ce qui atténue les trous en bordure d'écran lors des rotations rapides du point de vue

Méthodes auxiliaires :

float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();

Page associée : ULCCComponent

Métadonnées

FMetaInfoBase

Classe de base des métadonnées, dont héritent FLCCMetaInfo et FLCC2MetaInfo. Type de retour de ULCCComponentBase::GetMetaInfo.

ChampTypeDescription
NameFStringNom des données
VersionFStringChaîne de version des données
DescriptionFStringDescription
SourceFStringOrigine
DataTypeFStringType de données
FileTypeFStringType de fichier, correspond à EFileType
OffsetTArray<float>Décalage des coordonnées, 3 éléments
ShiftTArray<float>Translation
Epsgint32Numéro de système de coordonnées EPSG, une valeur supérieure à 0 indique la présence d'informations géographiques
ScaleTArray<int>Échelle, 3 éléments
GUIDFStringIdentifiant unique des données
TotalLevelintNombre total de Levels
TotalSplatsintNombre total de splats
SplatsTArray<int>Nombre de splats de chaque Level

Méthodes auxiliaires :

bool IsValid() const;              // whether the metadata is valid
void Reset();
bool IsRTK() const;                // whether RTK geographic info is present
FVector GetOffset() const;         // offset as FVector; returns a zero vector with a warning when there are fewer than 3 elements
FVector3f GetScale();              // note: not const, and does not check the element count
EFileType GetFileType() const;     // file type enum
float GetVersion() const;          // version string as float
uint32 GetLevel0SplatNum() const;  // splat count of Level 0, in ten thousands

GetScale() et GetOffset() n'ont pas la même robustesse : GetOffset() vérifie le nombre d'éléments et renvoie un vecteur nul avec un avertissement s'il y en a moins de 3 ; GetScale() indexe directement les trois premiers éléments et dépasse les bornes lorsque Scale en compte moins de 3.

IsRTK() se fonde sur Epsg > 0 et un décalage non nul, en ne regardant que les données elles-mêmes. Ce n'est pas équivalent à CanUseGeoPlace(), qui exige en plus que bEnableGeoPlace soit activé et que le système de référence géographique soit créé.

Points d'utilisation :

  • Ne lire les métadonnées qu'après la fin du chargement ; tant qu'elles ne sont pas prêtes, tous les champs sont à zéro.
  • TotalSplats est le total des données. ULCCComponentBase::GetSplatNumber() renvoie précisément ce champ, il s'agit de la même valeur.
if (Component->CheckIfLoaded())
{
    const FMetaInfoBase Meta = Component->GetMetaInfo();

    UE_LOG(LogTemp, Log, TEXT("Name: %s"), *Meta.Name);
    UE_LOG(LogTemp, Log, TEXT("Levels: %d, total splats: %d"),
        Meta.TotalLevel, Meta.TotalSplats);
    UE_LOG(LogTemp, Log, TEXT("Level 0 splats: %u (ten thousand)"),
        Meta.GetLevel0SplatNum());
    UE_LOG(LogTemp, Log, TEXT("Has SH: %s"),
        Meta.GetFileType() == EFileType::Quality ? TEXT("yes") : TEXT("no"));

    if (Meta.IsRTK())
    {
        UE_LOG(LogTemp, Log, TEXT("EPSG: %d, offset: %s"),
            Meta.Epsg, *Meta.GetOffset().ToString());
    }
}

Blueprint sous forme de texte :

[Get Meta Info]
        Target = (LCC Component)
        │ Return Value ──┐
        ▼                │
[Break FMetaInfoBase] ◀──┘
        Name → [Print String]
        Total Splats → [Print String]
        Total Level → [Print String]

FLCCMetaInfo

Métadonnées LCC1 complètes, hérite de FMetaInfoBase.

Champ supplémentaireTypeDescription
CellLengthXfloatDimension de la grille en X
CellLengthYfloatDimension de la grille en Y
AttributesTArray<FBoundingBoxInfoWithName>Boîte englobante de chaque attribut, indexée par nom
IndexDataSizeintTaille des données d'index
EncodingFStringMéthode d'encodage
BoundingBoxFBoundingBoxInfoBoîte englobante globale

La condition de IsValid() est plus stricte que celle de la classe de base : TotalLevel, TotalSplats, CellLengthX, CellLengthY et IndexDataSize doivent tous être supérieurs à 0.

Méthodes liées aux boîtes englobantes (toutes renvoient un FBox, C++ uniquement) :

FVector2f GetCellLength() const;
int32 GetXNum() const;                    // grid count along X
int32 GetYNum() const;                    // grid count along Y
FBox GetVisibleBoundingBox() const;       // visible bounding box
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const;                   // value range of the spherical harmonics
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;

FLCC2MetaInfo

Métadonnées LCC2 complètes, hérite de FMetaInfoBase. Type de retour de ULCC2Component::GetMetaInfo2.

Champ supplémentaireTypeDescription
WorkPathFStringChemin du répertoire LCC2
SplatTypeEDataSourceTypeFormat de la source de données, SOG / SPZ / PLY
SHBandsint32Ordre d'harmoniques sphériques le plus élevé de cet arbre ; 0 signifie aucun, les valeurs possibles sont 1, 2 et 3
EnvNameint32Index du fichier d'environnement, -1 signifie aucun
RootFTreeNodeNœud racine de l'octree
FilesTArray<FString>Liste des fichiers de données de splats
MeshFilesTArray<FString>Liste des fichiers de maillage
BVHFilesTArray<FString>Liste des fichiers BVH

La condition de IsValid() est que Files ne soit pas vide.

Méthode auxiliaire :

FBox GetBounds() const;    // bounding box of the root node, already converted to centimeters

À propos de SHBands : il détermine le pas des emplacements d'harmoniques sphériques, toutes les sources de données d'un même buffer d'harmoniques doivent donc s'accorder. Lorsque des arbres d'ordres différents sont mélangés, c'est le plus large qui est retenu. Les formats à fichier unique (.sog / .spz / .ply) lisent l'ordre exact dans l'en-tête du décodeur ; LCC2 n'a pas de notion d'ordre par fichier, celui-ci est déterminé par FileType : Portable n'a pas d'harmoniques sphériques, Quality est d'ordre 3.

Résultat de test de rayon

FLCCSplat

Résultat d'impact d'un test de rayon. Utilisé par les fonctions de test de rayon de ULCCComponent.

ChampTypeDescription
LocationFVectorCoordonnées monde du point d'impact
NodeVectorFLCCVectorInformations du nœud auquel appartient le point d'impact
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
    // hit position
    const FVector HitPos = Hit.Location;
    // level of detail currently loaded at that spot
    const int32 Level = Hit.NodeVector.Level;
}

Page associée : Test de rayon avec ULCCComponent

FLCCVector

Coordonnées d'un nœud, qui situent celui-ci dans l'octree.

ChampTypeDescription
Xint32Index X du nœud
Yint32Index Y du nœud
Levelint32Level auquel se trouve le nœud

Le constructeur paramétré et le constructeur de copie bornent les trois champs à des valeurs non négatives, mais une affectation directe (écriture des champs après construction par défaut, ou usage de operator=) n'applique aucune borne.

Méthodes auxiliaires :

FString ToString() const;     // format is "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);

Le test d'égalité ne compare que X, Y et Level, pas les champs d'exécution internes comme les informations de caméra.

Level permet de savoir si ce qui est visible correspond à des données fines ou grossières : plus la valeur est faible, plus les données sont fines.

Boîte englobante

FBoundingBoxInfo

Informations de boîte englobante.

ChampTypeDescription
MinTArray<float>Coordonnées du point minimal
MaxTArray<float>Coordonnées du point maximal

FBoundingBoxInfoWithName

Boîte englobante nommée, utilisée par la liste des attributs des métadonnées.

ChampTypeDescription
NameFStringNom de l'attribut
BoundingBoxInfoFBoundingBoxInfoBoîte englobante

Le test d'égalité ne compare que Name.

Métadonnées SOG

Ce groupe de structures décrit les métadonnées d'un fichier .sog et est produit par les fonctions d'analyse SOG de ULCCUtilLibrary.

FLCC2SogMeta

Structure principale des métadonnées SOG.

ChampTypeDescription
Versionint32Version du format
Countint32Nombre de splats
bAntialiasboolActivation de l'anticrénelage
InstancesFLCC2SogInstancesListe des fichiers d'instances
MeansFLCC2SogMeansDonnées de position, avec valeur minimale, valeur maximale et liste de fichiers
ScalesFLCC2SogScalesDonnées d'échelle, avec un livre de codes de 256 entrées et une liste de fichiers
QuatsFLCC2SogQuatsListe des fichiers de données de rotation
SemanticsFLCC2SogSemanticsListe des fichiers de données sémantiques
Sh0FLCC2SogSh0Harmoniques sphériques d'ordre zéro, avec un livre de codes de 256 entrées et une liste de fichiers
ShNFLCC2SogShNHarmoniques sphériques d'ordre élevé, avec l'ordre, le livre de codes, le nombre et la liste de fichiers

Méthode auxiliaire :

bool HasShN() const;    // whether high-order SH is present, equivalent to ShN.Files being non-empty

Points d'utilisation :

  • Lire avec ParseSogMetaFromFile sans charger les données de rendu, le coût est très faible.
  • Cela permet de connaître avant le chargement le nombre de points et l'état des harmoniques sphériques, et de décider à l'avance de la configuration de qualité d'image.
FLCC2SogMeta Meta;
if (ULCCUtilLibrary::ParseSogMetaFromFile(Path, Meta))
{
    UE_LOG(LogTemp, Log, TEXT("Version: %d, count: %d, high-order SH: %s"),
        Meta.Version, Meta.Count, Meta.HasShN() ? TEXT("yes") : TEXT("no"));
}

FLCC2SogShN

Données d'harmoniques sphériques d'ordre élevé.

ChampTypeDescription
Bandsint32Ordre des harmoniques sphériques
Countint32Nombre
FilesTArray<FString>Liste de fichiers
CodebookTStaticArray<float, 256>Livre de codes de quantification, non visible depuis Blueprint

Méthode auxiliaire : bool HasShN() const.

FLCC2SogImageData

Données d'image SOG.

ChampTypeDescription
PixelDataTArray<uint8>Données de pixels, au format RGBA, 4 octets par pixel
Widthint32Largeur
Heightint32Hauteur

Autres sous-structures

Les structures suivantes ne contiennent que des listes de fichiers, certaines avec un livre de codes de quantification :

StructureChamps
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins, Maxs, Files
FLCC2SogScalesCodebook (256 entrées), Files
FLCC2SogSh0Codebook (256 entrées), Files

Codebook est un TStaticArray<float, 256>, ce n'est pas une UPROPERTY et il n'est pas visible depuis Blueprint.

Nœuds de l'octree

Ce groupe de structures décrit l'octree de LCC2. Ce sont des données de bas niveau, qu'un développement courant n'a pas besoin de manipuler directement.

FTreeNode

Nœud de l'octree.

ChampTypeDescription
IdFStringIdentifiant du nœud
XMin / YMin / ZMindoublePoint minimal de l'AABB
XMax / YMax / ZMaxdoublePoint maximal de l'AABB
ChildNumint32Nombre de nœuds enfants
ChildrenTArray<FTreeNode>Tableau des nœuds enfants, pas une UPROPERTY
DataFTreeNodeDataDonnées du nœud

Méthode auxiliaire :

void ClearIterative();

Collecte tous les nœuds en largeur d'abord puis les libère en ordre inverse, ce qui évite un débordement de pile dû à une destruction récursive lorsque l'arbre est très profond. Lorsqu'un FTreeNode est détenu manuellement, l'appeler avant qu'il ne sorte de sa portée.

FTreeNodeData

Conteneur des données d'un nœud, qui indique par des booléens la présence de chaque type de données.

ChampTypeDescription
bHas3DGSboolPrésence de données 3DGS
_3DGSFTreeNodeData3DGSDonnées 3DGS
bHasMeshboolPrésence de données de maillage
MeshFTreeNodeDataMeshDonnées de maillage
bHasBVHboolPrésence de données BVH
BVHFTreeNodeDataBVHDonnées BVH

FTreeNodeData3DGS

ChampTypeDescription
Nameint32Index du fichier
Startint32Décalage de départ
Countint32Nombre

FTreeNodeDataMesh

ChampTypeDescription
Nameint32Index du fichier
Vertexint32Nombre de sommets
Faceint32Nombre de faces

FTreeNodeDataBVH

ChampTypeDescription
Nameint32Index du fichier

Voir aussi

  • ULCCComponentBase : utilisation de FRenderInfo et FMetaInfoBase
  • ULCCComponent : utilisation de FLCCSplat et FLCCRenderInfo
  • ULCCUtilLibrary : les fonctions d'analyse des métadonnées SOG
  • Enums : les types énumérés utilisés dans ces structures
Précédent
Enums