Structs : référence des types de structures
Types de structures exposés par le module LCC4UnrealRuntime.
| Module | LCC4UnrealRuntime |
| En-tête | Core/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.
| Champ | Type | Défaut | Interrupteur associé | Description |
|---|---|---|---|---|
MaxDistance | uint32 | 300 | bDistanceLimit | Distance de rendu maximale, en mètres |
MaxSplatNum | uint32 | 3000 | bMaxSplatNumLimit | Nombre maximal de splats par image, en dizaines de milliers, plafonné à 10000 |
LevelFactor | float | 1 | bCanSetLevelFactor | Facteur d'échelle des distances de LOD, de 0.01 à 20 |
PreloadDistance | uint32 | 200 | bPreloadDistanceLimit | Distance de préchargement. La valeur effective est MaxDistance + 35 |
StartLevel | uint32 | 0 | bCanSetStartLevel | Level de départ, de 0 à 20 |
EndLevel | uint32 | 20 | bCanSetEndLevel | Level de fin, de 0 à 20 |
CollisionLoadMaxDistance | uint32 | 300 | bCollisionDistanceLimit | Distance maximale de chargement de la collision, en mètres |
bUseFullLoad | bool | true | bCanSetUseFullLoad | Interrupteur de chargement complet pour les petites scènes. À la construction de ULCC2Component, il est réécrit en interrupteur activé avec la valeur false |
FullLoadSplatNum | uint32 | 1500 | bCanSetFullLoadNum | Seuil 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 interrupteurb*, nibUseFullLoadniFullLoadSplatNum.FRenderInfo::GetPreloadDistance()renvoieGetMaxDistance() + 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.
| Champ | Type | Défaut | Interrupteur associé | Description |
|---|---|---|---|---|
SortFactor | float | 1 | bCanSetSortFactor | Facteur 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 |
bAddExtraPreNodes | bool | Déterminé par une macro | bEnableExtraPreNodes | Ajoute 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.
| Champ | Type | Description |
|---|---|---|
Name | FString | Nom des données |
Version | FString | Chaîne de version des données |
Description | FString | Description |
Source | FString | Origine |
DataType | FString | Type de données |
FileType | FString | Type de fichier, correspond à EFileType |
Offset | TArray<float> | Décalage des coordonnées, 3 éléments |
Shift | TArray<float> | Translation |
Epsg | int32 | Numéro de système de coordonnées EPSG, une valeur supérieure à 0 indique la présence d'informations géographiques |
Scale | TArray<int> | Échelle, 3 éléments |
GUID | FString | Identifiant unique des données |
TotalLevel | int | Nombre total de Levels |
TotalSplats | int | Nombre total de splats |
Splats | TArray<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.
TotalSplatsest 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émentaire | Type | Description |
|---|---|---|
CellLengthX | float | Dimension de la grille en X |
CellLengthY | float | Dimension de la grille en Y |
Attributes | TArray<FBoundingBoxInfoWithName> | Boîte englobante de chaque attribut, indexée par nom |
IndexDataSize | int | Taille des données d'index |
Encoding | FString | Méthode d'encodage |
BoundingBox | FBoundingBoxInfo | Boî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émentaire | Type | Description |
|---|---|---|
WorkPath | FString | Chemin du répertoire LCC2 |
SplatType | EDataSourceType | Format de la source de données, SOG / SPZ / PLY |
SHBands | int32 | Ordre d'harmoniques sphériques le plus élevé de cet arbre ; 0 signifie aucun, les valeurs possibles sont 1, 2 et 3 |
EnvName | int32 | Index du fichier d'environnement, -1 signifie aucun |
Root | FTreeNode | Nœud racine de l'octree |
Files | TArray<FString> | Liste des fichiers de données de splats |
MeshFiles | TArray<FString> | Liste des fichiers de maillage |
BVHFiles | TArray<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.
| Champ | Type | Description |
|---|---|---|
Location | FVector | Coordonnées monde du point d'impact |
NodeVector | FLCCVector | Informations 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.
| Champ | Type | Description |
|---|---|---|
X | int32 | Index X du nœud |
Y | int32 | Index Y du nœud |
Level | int32 | Level 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.
| Champ | Type | Description |
|---|---|---|
Min | TArray<float> | Coordonnées du point minimal |
Max | TArray<float> | Coordonnées du point maximal |
FBoundingBoxInfoWithName
Boîte englobante nommée, utilisée par la liste des attributs des métadonnées.
| Champ | Type | Description |
|---|---|---|
Name | FString | Nom de l'attribut |
BoundingBoxInfo | FBoundingBoxInfo | Boî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.
| Champ | Type | Description |
|---|---|---|
Version | int32 | Version du format |
Count | int32 | Nombre de splats |
bAntialias | bool | Activation de l'anticrénelage |
Instances | FLCC2SogInstances | Liste des fichiers d'instances |
Means | FLCC2SogMeans | Données de position, avec valeur minimale, valeur maximale et liste de fichiers |
Scales | FLCC2SogScales | Données d'échelle, avec un livre de codes de 256 entrées et une liste de fichiers |
Quats | FLCC2SogQuats | Liste des fichiers de données de rotation |
Semantics | FLCC2SogSemantics | Liste des fichiers de données sémantiques |
Sh0 | FLCC2SogSh0 | Harmoniques sphériques d'ordre zéro, avec un livre de codes de 256 entrées et une liste de fichiers |
ShN | FLCC2SogShN | Harmoniques 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
ParseSogMetaFromFilesans 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é.
| Champ | Type | Description |
|---|---|---|
Bands | int32 | Ordre des harmoniques sphériques |
Count | int32 | Nombre |
Files | TArray<FString> | Liste de fichiers |
Codebook | TStaticArray<float, 256> | Livre de codes de quantification, non visible depuis Blueprint |
Méthode auxiliaire : bool HasShN() const.
FLCC2SogImageData
Données d'image SOG.
| Champ | Type | Description |
|---|---|---|
PixelData | TArray<uint8> | Données de pixels, au format RGBA, 4 octets par pixel |
Width | int32 | Largeur |
Height | int32 | Hauteur |
Autres sous-structures
Les structures suivantes ne contiennent que des listes de fichiers, certaines avec un livre de codes de quantification :
| Structure | Champs |
|---|---|
FLCC2SogInstances | Files |
FLCC2SogSemantics | Files |
FLCC2SogQuats | Files |
FLCC2SogMeans | Mins, Maxs, Files |
FLCC2SogScales | Codebook (256 entrées), Files |
FLCC2SogSh0 | Codebook (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.
| Champ | Type | Description |
|---|---|---|
Id | FString | Identifiant du nœud |
XMin / YMin / ZMin | double | Point minimal de l'AABB |
XMax / YMax / ZMax | double | Point maximal de l'AABB |
ChildNum | int32 | Nombre de nœuds enfants |
Children | TArray<FTreeNode> | Tableau des nœuds enfants, pas une UPROPERTY |
Data | FTreeNodeData | Donné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.
| Champ | Type | Description |
|---|---|---|
bHas3DGS | bool | Présence de données 3DGS |
_3DGS | FTreeNodeData3DGS | Données 3DGS |
bHasMesh | bool | Présence de données de maillage |
Mesh | FTreeNodeDataMesh | Données de maillage |
bHasBVH | bool | Présence de données BVH |
BVH | FTreeNodeDataBVH | Données BVH |
FTreeNodeData3DGS
| Champ | Type | Description |
|---|---|---|
Name | int32 | Index du fichier |
Start | int32 | Décalage de départ |
Count | int32 | Nombre |
FTreeNodeDataMesh
| Champ | Type | Description |
|---|---|---|
Name | int32 | Index du fichier |
Vertex | int32 | Nombre de sommets |
Face | int32 | Nombre de faces |
FTreeNodeDataBVH
| Champ | Type | Description |
|---|---|---|
Name | int32 | Index du fichier |
Voir aussi
- ULCCComponentBase : utilisation de
FRenderInfoetFMetaInfoBase - ULCCComponent : utilisation de
FLCCSplatetFLCCRenderInfo - ULCCUtilLibrary : les fonctions d'analyse des métadonnées SOG
- Enums : les types énumérés utilisés dans ces structures