Struct: riferimento dei tipi struct
Tipi struct esposti dal modulo LCC4UnrealRuntime.
| Modulo | LCC4UnrealRuntime |
| Header | Core/LCCStructure.h |
#include "Core/LCCStructure.h"
Gli struct marcati BlueprintType possono essere scomposti e composti in Blueprint con i nodi Break / Make.
Prestazioni
FRenderInfo
Parametri di prestazione comuni. Usato da ULCCComponentBase::Performance.
La caratteristica di progettazione di questo struct è che ogni valore è accompagnato da una casella di abilitazione. Mentre la casella non è spuntata viene usato il valore predefinito interno del plugin, e il valore inserito si applica solo dopo averla spuntata. Il Setter corrispondente sul Component imposta automaticamente la casella a true.
| Campo | Tipo | Predefinito | Casella corrispondente | Descrizione |
|---|---|---|---|---|
MaxDistance | uint32 | 300 | bDistanceLimit | Distanza massima di rendering, in metri |
MaxSplatNum | uint32 | 3000 | bMaxSplatNumLimit | Numero massimo di splat per fotogramma, in unità di diecimila, limite superiore 10000 |
LevelFactor | float | 1 | bCanSetLevelFactor | Fattore di scala della distanza del LOD, da 0.01 a 20 |
PreloadDistance | uint32 | 200 | bPreloadDistanceLimit | Distanza di precaricamento. Il valore effettivo è MaxDistance + 35 |
StartLevel | uint32 | 0 | bCanSetStartLevel | Start Level, da 0 a 20 |
EndLevel | uint32 | 20 | bCanSetEndLevel | End Level, da 0 a 20 |
CollisionLoadMaxDistance | uint32 | 300 | bCollisionDistanceLimit | Distanza massima di caricamento delle collisioni, in metri |
bUseFullLoad | bool | true | bCanSetUseFullLoad | Interruttore del caricamento completo per le scene piccole. Riscritto in casella spuntata, valore false quando ULCC2Component viene costruito |
FullLoadSplatNum | uint32 | 1500 | bCanSetFullLoadNum | Soglia del caricamento completo, in unità di diecimila |
Metodi di supporto:
bool HasMaxDistanceLimit() const; // se esiste un limite di distanza
bool HasMaxNumLimit() const; // se esiste un limite di conteggio
bool NeedPreload() const; // se serve il precaricamento
uint32 GetMaxDistance() const; // distanza massima effettiva
uint32 GetMaxSplatNum() const; // conteggio massimo effettivo
float GetLevelFactor() const; // fattore di LOD effettivo
uint32 GetStartLevel() const; // Level iniziale effettivo
uint32 GetEndLevel() const; // Level finale effettivo
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const; // restituisce GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const; // se il conteggio indicato usa il caricamento completo
void Reset(); // reimposta solo i campi dei valori, non le caselle di abilitazione
Due trappole facili:
Reset()reimposta solo i campi dei valori (distanza, conteggio, Level, fattore) e non reimposta nessuna delle caselle di abilitazioneb*, nébUseFullLoadeFullLoadSplatNum.FRenderInfo::GetPreloadDistance()restituisceGetMaxDistance() + 35, mentre la funzione omonima sul component,ULCCComponentBase::GetPreloadDistance(), restituisce il valore grezzo del campo. I due risultati sono diversi.
I Getter restituiscono il valore effettivo: mentre la casella non è spuntata restituiscono il valore predefinito interno, non il valore inserito in precedenza. Questo si confonde facilmente, e leggere il campo direttamente può dare un risultato diverso dalla chiamata al Getter.
Note d'uso:
- Modificare tramite il Setter sul Component è il percorso più semplice e non richiede di gestire manualmente la casella.
- Quando si modificano direttamente i campi dello struct, ricordare di impostare anche la casella a
true, altrimenti nulla ha effetto.
// consigliato: usare il Setter, la casella viene gestita automaticamente
Component->SetMaxDistance(200);
// modificare il campo direttamente richiede di impostare la casella in autonomia
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;
FLCCRenderInfo
Parametri di prestazione specifici di LCC1. Usato da ULCCComponent::LCCPerformance.
| Campo | Tipo | Predefinito | Casella corrispondente | Descrizione |
|---|---|---|---|---|
SortFactor | float | 1 | bCanSetSortFactor | Fattore di scala della frequenza di ordinamento, da 0.2 a 5. Un valore più grande significa meno ordinamenti e prestazioni migliori |
bAddExtraPreNodes | bool | Deciso da una macro | bEnableExtraPreNodes | Aggiunge nodi di precaricamento extra, attenuando i buchi al bordo dello schermo durante le rotazioni rapide della vista |
Metodi di supporto:
float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();
Pagina correlata: ULCCComponent
Metainformazioni
FMetaInfoBase
Struct base delle metainformazioni, da cui ereditano sia FLCCMetaInfo sia FLCC2MetaInfo. Tipo di ritorno di ULCCComponentBase::GetMetaInfo.
| Campo | Tipo | Descrizione |
|---|---|---|
Name | FString | Nome dei dati |
Version | FString | Stringa della versione dei dati |
Description | FString | Descrizione |
Source | FString | Sorgente |
DataType | FString | Tipo di dati |
FileType | FString | Tipo di file, corrispondente a EFileType |
Offset | TArray<float> | Offset delle coordinate, 3 elementi |
Shift | TArray<float> | Quantità di traslazione |
Epsg | int32 | Numero del sistema di coordinate EPSG, maggiore di 0 significa che sono presenti informazioni di coordinate geografiche |
Scale | TArray<int> | Scala, 3 elementi |
GUID | FString | Identificatore univoco dei dati |
TotalLevel | int | Numero totale di Level |
TotalSplats | int | Numero totale di splat |
Splats | TArray<int> | Numero di splat di ogni Level |
Metodi di supporto:
bool IsValid() const; // se le metainformazioni sono valide
void Reset();
bool IsRTK() const; // se sono presenti informazioni geografiche RTK
FVector GetOffset() const; // offset come FVector, restituisce un vettore nullo con un avviso quando gli elementi sono meno di 3
FVector3f GetScale(); // nota: non è const e non verifica il numero di elementi
EFileType GetFileType() const; // enum del tipo di file
float GetVersion() const; // versione come float
uint32 GetLevel0SplatNum() const; // numero di splat del Level 0, in unità di diecimila
GetScale() e GetOffset() differiscono in robustezza: GetOffset() verifica il numero di elementi e restituisce un vettore nullo con un avviso quando sono meno di 3, mentre GetScale() indicizza direttamente i primi tre elementi e va fuori dai limiti quando Scale ha meno di 3 elementi.
IsRTK() decide in base a Epsg > 0 più un offset diverso da zero e guarda solo i dati. Non è equivalente a CanUseGeoPlace(), che richiede inoltre che bEnableGeoPlace sia abilitato e che il sistema di riferimento geografico sia creato.
Note d'uso:
- Leggerlo dopo il completamento del caricamento; i campi sono tutti a valori nulli mentre i dati non sono pronti.
TotalSplatsè la quantità totale dei dati.ULCCComponentBase::GetSplatNumber()restituisce esattamente questo campo, quindi i due sono lo stesso valore.
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 come testo:
[Get Meta Info]
Target = (LCC Component)
│ Return Value ──┐
▼ │
[Break FMetaInfoBase] ◀──┘
Name → [Print String]
Total Splats → [Print String]
Total Level → [Print String]
FLCCMetaInfo
Metainformazioni LCC1 complete, che eredita da FMetaInfoBase.
| Campo aggiuntivo | Tipo | Descrizione |
|---|---|---|
CellLengthX | float | Dimensione della griglia lungo X |
CellLengthY | float | Dimensione della griglia lungo Y |
Attributes | TArray<FBoundingBoxInfoWithName> | Bounding box di ogni attributo, indicizzato per nome |
IndexDataSize | int | Dimensione dei dati di indice |
Encoding | FString | Metodo di codifica |
BoundingBox | FBoundingBoxInfo | Bounding box complessivo |
La condizione di IsValid() è più stringente rispetto alla classe base: TotalLevel, TotalSplats, CellLengthX, CellLengthY e IndexDataSize devono essere tutti maggiori di 0.
Metodi del bounding box (tutti restituiscono FBox, solo C++):
FVector2f GetCellLength() const;
int32 GetXNum() const; // numero di celle lungo X
int32 GetYNum() const; // numero di celle lungo Y
FBox GetVisibleBoundingBox() const; // bounding box visibile
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const; // intervallo di valori delle armoniche sferiche
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;
FLCC2MetaInfo
Metainformazioni LCC2 complete, che eredita da FMetaInfoBase. Tipo di ritorno di ULCC2Component::GetMetaInfo2.
| Campo aggiuntivo | Tipo | Descrizione |
|---|---|---|
WorkPath | FString | Percorso della directory LCC2 |
SplatType | EDataSourceType | Formato della sorgente dei dati, SOG / SPZ / PLY |
SHBands | int32 | Banda di armoniche sferiche più alta in questo albero, 0 significa nessuna, valori 1/2/3 |
EnvName | int32 | Indice del file dell'ambiente, -1 significa nessuno |
Root | FTreeNode | Nodo radice dell'octree |
Files | TArray<FString> | Elenco dei file di dati splat |
MeshFiles | TArray<FString> | Elenco dei file di mesh |
BVHFiles | TArray<FString> | Elenco dei file BVH |
La condizione di IsValid() è che Files non sia vuoto.
Metodo di supporto:
FBox GetBounds() const; // bounding box del nodo radice, già convertito in centimetri
A proposito di SHBands: decide lo stride degli slot delle armoniche sferiche, quindi ogni sorgente di dati all'interno dello stesso buffer di armoniche sferiche deve concordare. Un albero che mescola numeri di bande diversi adotta il più ampio. I formati a file singolo (.sog / .spz / .ply) leggono il numero esatto di bande dall'header del decoder; LCC2 non ha un concetto di bande per file ed è FileType a deciderlo, con Portable senza armoniche sferiche e Quality con 3 bande.
Risultato dei test dei raggi
FLCCSplat
Risultato del colpo di un test dei raggi. Usato dalle funzioni di test dei raggi di ULCCComponent.
| Campo | Tipo | Descrizione |
|---|---|---|
Location | FVector | Coordinate nel mondo del punto colpito |
NodeVector | FLCCVector | Informazioni sul nodo del punto colpito |
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
// posizione del colpo
const FVector HitPos = Hit.Location;
// livello di dettaglio attualmente caricato in quel punto
const int32 Level = Hit.NodeVector.Level;
}
Pagina correlata: Test dei raggi di ULCCComponent
FLCCVector
Coordinate del nodo, che individuano un nodo nell'octree.
| Campo | Tipo | Descrizione |
|---|---|---|
X | int32 | Indice X del nodo |
Y | int32 | Indice Y del nodo |
Level | int32 | Level a cui appartiene il nodo |
Il costruttore parametrico e il costruttore di copia limitano i tre campi a valori non negativi, ma un'assegnazione diretta (scrivere i campi dopo la costruzione predefinita, oppure usare operator=) non applica alcun limite.
Metodi di supporto:
FString ToString() const; // il formato è "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);
L'uguaglianza confronta solo X, Y e Level, non le informazioni interne sulla camera e gli altri campi a runtime.
Level indica se i dati attualmente visibili siano fini o grossolani; un valore più piccolo è più fine.
Bounding box
FBoundingBoxInfo
Informazioni del bounding box.
| Campo | Tipo | Descrizione |
|---|---|---|
Min | TArray<float> | Coordinate del punto minimo |
Max | TArray<float> | Coordinate del punto massimo |
FBoundingBoxInfoWithName
Bounding box con nome, usato dall'elenco degli attributi nelle metainformazioni.
| Campo | Tipo | Descrizione |
|---|---|---|
Name | FString | Nome dell'attributo |
BoundingBoxInfo | FBoundingBoxInfo | Bounding box |
L'uguaglianza confronta solo Name.
Metainformazioni SOG
Questo gruppo di struct descrive le metainformazioni di un file .sog ed è prodotto dalle funzioni di analisi SOG di ULCCUtilLibrary.
FLCC2SogMeta
Struct principale delle metainformazioni SOG.
| Campo | Tipo | Descrizione |
|---|---|---|
Version | int32 | Versione del formato |
Count | int32 | Numero di splat |
bAntialias | bool | Se l'anti-aliasing è abilitato |
Instances | FLCC2SogInstances | Elenco dei file di istanza |
Means | FLCC2SogMeans | Dati di posizione, con minimo, massimo ed elenco dei file |
Scales | FLCC2SogScales | Dati di scala, con un codebook di 256 voci ed elenco dei file |
Quats | FLCC2SogQuats | Elenco dei file dei dati di rotazione |
Semantics | FLCC2SogSemantics | Elenco dei file dei dati semantici |
Sh0 | FLCC2SogSh0 | Armoniche sferiche di banda 0, con un codebook di 256 voci ed elenco dei file |
ShN | FLCC2SogShN | Armoniche sferiche di ordine superiore, con numero di bande, codebook, conteggio ed elenco dei file |
Metodo di supporto:
bool HasShN() const; // se sono presenti armoniche sferiche di ordine superiore, equivalente a ShN.Files non vuoto
Note d'uso:
- Leggerlo con
ParseSogMetaFromFilesenza caricare i dati di rendering, a costo molto basso. - Rivela il numero di punti e la situazione delle armoniche sferiche prima del caricamento, così la configurazione della qualità può essere decisa in anticipo.
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
Dati delle armoniche sferiche di ordine superiore.
| Campo | Tipo | Descrizione |
|---|---|---|
Bands | int32 | Bande di armoniche sferiche |
Count | int32 | Conteggio |
Files | TArray<FString> | Elenco dei file |
Codebook | TStaticArray<float, 256> | Codebook di quantizzazione, non visibile a Blueprint |
Metodo di supporto: bool HasShN() const.
FLCC2SogImageData
Dati immagine SOG.
| Campo | Tipo | Descrizione |
|---|---|---|
PixelData | TArray<uint8> | Dati dei pixel, formato RGBA, 4 byte per pixel |
Width | int32 | Larghezza |
Height | int32 | Altezza |
Altri sotto-struct
Gli struct seguenti contengono solo un elenco di file, alcuni con un codebook di quantizzazione:
| Struct | Campi |
|---|---|
FLCC2SogInstances | Files |
FLCC2SogSemantics | Files |
FLCC2SogQuats | Files |
FLCC2SogMeans | Mins, Maxs, Files |
FLCC2SogScales | Codebook (256 voci), Files |
FLCC2SogSh0 | Codebook (256 voci), Files |
Codebook è un TStaticArray<float, 256>, non è una UPROPERTY e non è visibile in Blueprint.
Nodi dell'octree
Questo gruppo di struct descrive l'octree di LCC2. Sono dati di basso livello che lo sviluppo ordinario non ha bisogno di toccare direttamente.
FTreeNode
Nodo dell'octree.
| Campo | Tipo | Descrizione |
|---|---|---|
Id | FString | Identificatore del nodo |
XMin / YMin / ZMin | double | Punto minimo dell'AABB |
XMax / YMax / ZMax | double | Punto massimo dell'AABB |
ChildNum | int32 | Numero di nodi figli |
Children | TArray<FTreeNode> | Array dei nodi figli, non è una UPROPERTY |
Data | FTreeNodeData | Dati del nodo |
Metodo di supporto:
void ClearIterative();
Raccoglie ogni nodo in ampiezza e pulisce in ordine inverso, evitando uno stack overflow dovuto alla distruzione ricorsiva in un albero molto profondo. Chiamarlo prima che un FTreeNode gestito manualmente esca dallo scope.
FTreeNodeData
Contenitore dei dati del nodo, che segnala con dei booleani la presenza di ciascun tipo di dati.
| Campo | Tipo | Descrizione |
|---|---|---|
bHas3DGS | bool | Se sono presenti dati 3DGS |
_3DGS | FTreeNodeData3DGS | Dati 3DGS |
bHasMesh | bool | Se sono presenti dati di mesh |
Mesh | FTreeNodeDataMesh | Dati di mesh |
bHasBVH | bool | Se sono presenti dati BVH |
BVH | FTreeNodeDataBVH | Dati BVH |
FTreeNodeData3DGS
| Campo | Tipo | Descrizione |
|---|---|---|
Name | int32 | Indice del file |
Start | int32 | Offset iniziale |
Count | int32 | Conteggio |
FTreeNodeDataMesh
| Campo | Tipo | Descrizione |
|---|---|---|
Name | int32 | Indice del file |
Vertex | int32 | Numero di vertici |
Face | int32 | Numero di facce |
FTreeNodeDataBVH
| Campo | Tipo | Descrizione |
|---|---|---|
Name | int32 | Indice del file |
Vedere anche
- ULCCComponentBase: uso di
FRenderInfoeFMetaInfoBase - ULCCComponent: uso di
FLCCSplateFLCCRenderInfo - ULCCUtilLibrary: le funzioni di analisi delle metainformazioni SOG
- Enum: i tipi enum usati in questi struct