Structs: Referenz der Struct-Typen
Struct-Typen, die das Modul LCC4UnrealRuntime bereitstellt.
| Modul | LCC4UnrealRuntime |
| Header | Core/LCCStructure.h |
#include "Core/LCCStructure.h"
Structs mit der Auszeichnung BlueprintType lassen sich in Blueprint mit Break- / Make-Nodes auftrennen und zusammensetzen.
Leistung
FRenderInfo
Gemeinsame Leistungsparameter. Genutzt von ULCCComponentBase::Performance.
Das prägende Merkmal dieses Structs ist, dass jeder Wert ein Kontrollkästchen zum Aktivieren mitbringt. Solange das Kästchen aus ist, wird der im Plugin eingebaute Standardwert genutzt, und der eingetragene Wert gilt erst, sobald es an ist. Der passende Setter an der Component setzt das Kästchen automatisch auf true.
| Feld | Typ | Standard | Kontrollkästchen | Beschreibung |
|---|---|---|---|---|
MaxDistance | uint32 | 300 | bDistanceLimit | Maximale Renderdistanz in Metern |
MaxSplatNum | uint32 | 3000 | bMaxSplatNumLimit | Maximale Splat-Anzahl je Bild, in Einheiten von 10.000, Obergrenze 10000 |
LevelFactor | float | 1 | bCanSetLevelFactor | Skalierungsfaktor der LOD-Distanz, von 0.01 bis 20 |
PreloadDistance | uint32 | 200 | bPreloadDistanceLimit | Vorladedistanz. Der tatsächliche Wert ist MaxDistance + 35 |
StartLevel | uint32 | 0 | bCanSetStartLevel | Start Level, von 0 bis 20 |
EndLevel | uint32 | 20 | bCanSetEndLevel | End Level, von 0 bis 20 |
CollisionLoadMaxDistance | uint32 | 300 | bCollisionDistanceLimit | Maximale Distanz für das Laden der Kollision in Metern |
bUseFullLoad | bool | true | bCanSetUseFullLoad | Schalter für vollständiges Laden in kleinen Szenen. Beim Konstruieren von ULCC2Component auf „Kontrollkästchen aktiviert, Wert false“ umgeschrieben |
FullLoadSplatNum | uint32 | 1500 | bCanSetFullLoadNum | Schwellwert für vollständiges Laden, in Einheiten von 10.000 |
Hilfsmethoden:
bool HasMaxDistanceLimit() const; // ob eine Distanzgrenze vorhanden ist
bool HasMaxNumLimit() const; // ob eine Anzahlgrenze vorhanden ist
bool NeedPreload() const; // ob Vorladen nötig ist
uint32 GetMaxDistance() const; // wirksame maximale Distanz
uint32 GetMaxSplatNum() const; // wirksame maximale Anzahl
float GetLevelFactor() const; // wirksamer LOD-Faktor
uint32 GetStartLevel() const; // wirksames Start-Level
uint32 GetEndLevel() const; // wirksames End-Level
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const; // gibt GetMaxDistance() + 35 zurück
bool GetIfUseFullLoad(uint32 SplatNum) const; // ob die angegebene Anzahl vollständiges Laden nutzt
void Reset(); // setzt nur die Wertfelder zurück, nicht die Kontrollkästchen
Zwei leichte Fallgruben:
Reset()setzt nur die Wertfelder zurück (Distanz, Anzahl, Level, Faktor) und setzt keines derb*-Kontrollkästchen zurück, ebenso nichtbUseFullLoadundFullLoadSplatNum.FRenderInfo::GetPreloadDistance()gibtGetMaxDistance() + 35zurück, während die gleichnamige Funktion an der Component,ULCCComponentBase::GetPreloadDistance(), den rohen Feldwert zurückgibt. Die beiden Ergebnisse unterscheiden sich.
Die Getter geben den wirksamen Wert zurück: Solange das Kästchen aus ist, geben sie den eingebauten Standardwert zurück, nicht den früher eingetragenen Wert. Das ist leicht zu verwechseln, und das unmittelbare Lesen des Feldes kann vom Aufruf des Getters abweichen.
Hinweise zur Verwendung:
- Das Ändern über den Setter an der Component ist der einfachste Weg und erfordert kein Behandeln der Kontrollkästchen von Hand.
- Beim unmittelbaren Ändern der Struct-Felder daran denken, das Kontrollkästchen ebenfalls auf
truezu setzen, sonst wird nichts wirksam.
// empfohlen: den Setter nutzen, das Kontrollkästchen wird automatisch behandelt
Component->SetMaxDistance(200);
// beim unmittelbaren Ändern des Feldes das Kontrollkästchen selbst setzen
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;
FLCCRenderInfo
LCC1-spezifische Leistungsparameter. Genutzt von ULCCComponent::LCCPerformance.
| Feld | Typ | Standard | Kontrollkästchen | Beschreibung |
|---|---|---|---|---|
SortFactor | float | 1 | bCanSetSortFactor | Skalierungsfaktor der Sortierfrequenz, von 0.2 bis 5. Ein höherer Wert bedeutet weniger Sortiervorgänge und bessere Leistung |
bAddExtraPreNodes | bool | Von einem Makro entschieden | bEnableExtraPreNodes | Fügt zusätzliche Vorlade-Nodes hinzu und mildert Löcher am Bildschirmrand beim schnellen Drehen der Ansicht |
Hilfsmethoden:
float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();
Zugehörige Seite: ULCCComponent
Metadaten
FMetaInfoBase
Basis-Struct der Metadaten, von dem sowohl FLCCMetaInfo als auch FLCC2MetaInfo erben. Rückgabetyp von ULCCComponentBase::GetMetaInfo.
| Feld | Typ | Beschreibung |
|---|---|---|
Name | FString | Name der Daten |
Version | FString | Versionszeichenkette der Daten |
Description | FString | Beschreibung |
Source | FString | Quelle |
DataType | FString | Datentyp |
FileType | FString | Dateityp, entsprechend EFileType |
Offset | TArray<float> | Koordinatenversatz, 3 Elemente |
Shift | TArray<float> | Betrag der Verschiebung |
Epsg | int32 | EPSG-Nummer des Koordinatensystems, größer als 0 bedeutet, dass geografische Koordinateninformationen vorhanden sind |
Scale | TArray<int> | Skalierung, 3 Elemente |
GUID | FString | Eindeutiger Bezeichner der Daten |
TotalLevel | int | Gesamtanzahl der Levels |
TotalSplats | int | Gesamtanzahl der Splats |
Splats | TArray<int> | Splat-Anzahl je Level |
Hilfsmethoden:
bool IsValid() const; // ob die Metadaten gültig sind
void Reset();
bool IsRTK() const; // ob RTK-Geoinformationen vorhanden sind
FVector GetOffset() const; // Versatz als FVector, gibt bei weniger als 3 Elementen einen Nullvektor mit einer Warnung zurück
FVector3f GetScale(); // zu beachten: nicht const, und prüft die Anzahl der Elemente nicht
EFileType GetFileType() const; // Enum des Dateityps
float GetVersion() const; // Version als float
uint32 GetLevel0SplatNum() const; // Splat-Anzahl von Level 0, in Einheiten von 10.000
GetScale() und GetOffset() unterscheiden sich in ihrer Robustheit: GetOffset() prüft die Anzahl der Elemente und gibt bei weniger als 3 einen Nullvektor mit einer Warnung zurück, während GetScale() unmittelbar auf die ersten drei Elemente zugreift und über die Grenzen hinausläuft, wenn Scale weniger als 3 Elemente hat.
IsRTK() entscheidet anhand von Epsg > 0 plus einem Versatz ungleich null und betrachtet nur die Daten. Es ist nicht gleichwertig mit CanUseGeoPlace(), das zusätzlich erfordert, dass bEnableGeoPlace aktiviert und das Geo-Referenzierungssystem erzeugt ist.
Hinweise zur Verwendung:
- Nach Abschluss des Ladens lesen; solange die Daten nicht bereit sind, sind die Felder alle Nullwerte.
TotalSplatsist die Gesamtmenge der Daten.ULCCComponentBase::GetSplatNumber()gibt genau dieses Feld zurück, die beiden sind daher derselbe Wert.
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 als Text:
[Get Meta Info]
Target = (LCC Component)
│ Return Value ──┐
▼ │
[Break FMetaInfoBase] ◀──┘
Name → [Print String]
Total Splats → [Print String]
Total Level → [Print String]
FLCCMetaInfo
Vollständige LCC1-Metadaten, erben von FMetaInfoBase.
| Zusätzliches Feld | Typ | Beschreibung |
|---|---|---|
CellLengthX | float | Größe der Zelle entlang X |
CellLengthY | float | Größe der Zelle entlang Y |
Attributes | TArray<FBoundingBoxInfoWithName> | Bounding Box jedes Attributs, nach Namen indexiert |
IndexDataSize | int | Größe der Indexdaten |
Encoding | FString | Kodierungsverfahren |
BoundingBox | FBoundingBoxInfo | Gesamte Bounding Box |
Die Bedingung von IsValid() ist strenger als in der Basisklasse: TotalLevel, TotalSplats, CellLengthX, CellLengthY und IndexDataSize müssen alle größer als 0 sein.
Methoden der Bounding Box (alle geben FBox zurück, nur C++):
FVector2f GetCellLength() const;
int32 GetXNum() const; // Anzahl der Zellen entlang X
int32 GetYNum() const; // Anzahl der Zellen entlang Y
FBox GetVisibleBoundingBox() const; // sichtbare Bounding Box
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const; // Wertebereich der Kugelflächenfunktionen
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;
FLCC2MetaInfo
Vollständige LCC2-Metadaten, erben von FMetaInfoBase. Rückgabetyp von ULCC2Component::GetMetaInfo2.
| Zusätzliches Feld | Typ | Beschreibung |
|---|---|---|
WorkPath | FString | Pfad des LCC2-Verzeichnisses |
SplatType | EDataSourceType | Format der Datenquelle, SOG / SPZ / PLY |
SHBands | int32 | Höchstes Band der Kugelflächenfunktionen in diesem Baum, 0 bedeutet keines, Werte 1/2/3 |
EnvName | int32 | Index der Umgebungsdatei, -1 bedeutet keine |
Root | FTreeNode | Wurzelknoten des Octree |
Files | TArray<FString> | Liste der Splat-Datendateien |
MeshFiles | TArray<FString> | Liste der Mesh-Dateien |
BVHFiles | TArray<FString> | Liste der BVH-Dateien |
Die Bedingung von IsValid() ist, dass Files nicht leer ist.
Hilfsmethode:
FBox GetBounds() const; // Bounding Box des Wurzelknotens, bereits in Zentimeter umgerechnet
Zu SHBands: Es entscheidet über den Stride der Slots der Kugelflächenfunktionen, jede Datenquelle innerhalb desselben Buffers der Kugelflächenfunktionen muss daher übereinstimmen. Ein Baum, der unterschiedliche Bandanzahlen mischt, nimmt die größte. Einzeldateiformate (.sog / .spz / .ply) lesen die genaue Bandanzahl aus dem Header des Decoders; LCC2 hat kein Konzept einer Bandanzahl je Datei, und FileType entscheidet darüber, wobei Portable keine Kugelflächenfunktionen und Quality 3 Bänder hat.
Ergebnis des Strahlentests
FLCCSplat
Treffer-Ergebnis eines Strahlentests. Genutzt von den Funktionen für Strahlentests von ULCCComponent.
| Feld | Typ | Beschreibung |
|---|---|---|
Location | FVector | Weltkoordinaten des Trefferpunkts |
NodeVector | FLCCVector | Node-Information des Trefferpunkts |
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
// Position des Treffers
const FVector HitPos = Hit.Location;
// Detailstufe, die an dieser Stelle gerade geladen ist
const int32 Level = Hit.NodeVector.Level;
}
Zugehörige Seite: Strahlentests von ULCCComponent
FLCCVector
Node-Koordinaten, die einen Node im Octree verorten.
| Feld | Typ | Beschreibung |
|---|---|---|
X | int32 | X-Index des Nodes |
Y | int32 | Y-Index des Nodes |
Level | int32 | Level, zu dem der Node gehört |
Der parametrisierte Konstruktor und der Copy-Konstruktor klemmen die drei Felder auf nicht negative Werte, eine unmittelbare Zuweisung (das Schreiben der Felder nach dem Default-Konstruieren oder die Nutzung von operator=) klemmt jedoch nicht.
Hilfsmethoden:
FString ToString() const; // Format ist "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);
Die Gleichheit vergleicht nur X, Y und Level, nicht die internen Kamerainformationen und weitere Laufzeitfelder.
Level sagt, ob die gerade sichtbaren Daten feiner oder gröber sind; ein kleinerer Wert ist feiner.
Bounding Box
FBoundingBoxInfo
Informationen der Bounding Box.
| Feld | Typ | Beschreibung |
|---|---|---|
Min | TArray<float> | Koordinaten des Minimalpunkts |
Max | TArray<float> | Koordinaten des Maximalpunkts |
FBoundingBoxInfoWithName
Benannte Bounding Box, genutzt von der Attributliste in den Metadaten.
| Feld | Typ | Beschreibung |
|---|---|---|
Name | FString | Name des Attributs |
BoundingBoxInfo | FBoundingBoxInfo | Bounding Box |
Die Gleichheit vergleicht nur Name.
SOG-Metadaten
Diese Gruppe von Structs beschreibt die Metadaten einer .sog-Datei und wird von den SOG-Auswertefunktionen von ULCCUtilLibrary ausgegeben.
FLCC2SogMeta
Haupt-Struct der SOG-Metadaten.
| Feld | Typ | Beschreibung |
|---|---|---|
Version | int32 | Version des Formats |
Count | int32 | Splat-Anzahl |
bAntialias | bool | Ob Antialiasing aktiviert ist |
Instances | FLCC2SogInstances | Liste der Instanzdateien |
Means | FLCC2SogMeans | Positionsdaten, mit Minimum, Maximum und Dateiliste |
Scales | FLCC2SogScales | Skalierungsdaten, mit einem Codebook mit 256 Einträgen und Dateiliste |
Quats | FLCC2SogQuats | Dateiliste der Rotationsdaten |
Semantics | FLCC2SogSemantics | Dateiliste der semantischen Daten |
Sh0 | FLCC2SogSh0 | Kugelflächenfunktionen des Bandes 0, mit einem Codebook mit 256 Einträgen und Dateiliste |
ShN | FLCC2SogShN | Kugelflächenfunktionen höherer Ordnung, mit Bandanzahl, Codebook, Anzahl und Dateiliste |
Hilfsmethode:
bool HasShN() const; // ob Kugelflächenfunktionen höherer Ordnung vorhanden sind, gleichbedeutend damit, dass ShN.Files nicht leer ist
Hinweise zur Verwendung:
- Sie mit
ParseSogMetaFromFilelesen, ohne die Render-Daten zu laden, zu sehr geringen Kosten. - Sie zeigt die Punktzahl und die Lage bei den Kugelflächenfunktionen bereits vor dem Laden, sodass die Qualitätskonfiguration im Vorhinein entschieden werden kann.
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
Daten der Kugelflächenfunktionen höherer Ordnung.
| Feld | Typ | Beschreibung |
|---|---|---|
Bands | int32 | Bänder der Kugelflächenfunktionen |
Count | int32 | Anzahl |
Files | TArray<FString> | Dateiliste |
Codebook | TStaticArray<float, 256> | Codebook der Quantisierung, für Blueprint nicht sichtbar |
Hilfsmethode: bool HasShN() const.
FLCC2SogImageData
SOG-Bilddaten.
| Feld | Typ | Beschreibung |
|---|---|---|
PixelData | TArray<uint8> | Pixeldaten, Format RGBA, 4 Byte je Pixel |
Width | int32 | Breite |
Height | int32 | Höhe |
Weitere Unter-Structs
Die folgenden Structs enthalten nur eine Dateiliste, einige zusätzlich ein Codebook der Quantisierung:
| Struct | Felder |
|---|---|
FLCC2SogInstances | Files |
FLCC2SogSemantics | Files |
FLCC2SogQuats | Files |
FLCC2SogMeans | Mins, Maxs, Files |
FLCC2SogScales | Codebook (256 Einträge), Files |
FLCC2SogSh0 | Codebook (256 Einträge), Files |
Codebook ist ein TStaticArray<float, 256>, kein UPROPERTY, und in Blueprint nicht sichtbar.
Octree-Nodes
Diese Gruppe von Structs beschreibt den LCC2-Octree. Es sind Daten auf niedriger Ebene, die die reguläre Entwicklung nicht unmittelbar berühren muss.
FTreeNode
Octree-Node.
| Feld | Typ | Beschreibung |
|---|---|---|
Id | FString | Bezeichner des Nodes |
XMin / YMin / ZMin | double | Minimalpunkt der AABB |
XMax / YMax / ZMax | double | Maximalpunkt der AABB |
ChildNum | int32 | Anzahl der Kindknoten |
Children | TArray<FTreeNode> | Array der Kindknoten, kein UPROPERTY |
Data | FTreeNodeData | Daten des Nodes |
Hilfsmethode:
void ClearIterative();
Sie sammelt jeden Node in Breitensuche und räumt in umgekehrter Reihenfolge auf, was einen Stack-Überlauf durch rekursives Zerstören in einem sehr tiefen Baum vermeidet. Sie aufrufen, bevor ein von Hand gehaltenes FTreeNode den Gültigkeitsbereich verlässt.
FTreeNodeData
Container der Node-Daten, der mit booleschen Werten markiert, ob jede Art von Daten vorhanden ist.
| Feld | Typ | Beschreibung |
|---|---|---|
bHas3DGS | bool | Ob 3DGS-Daten vorhanden sind |
_3DGS | FTreeNodeData3DGS | 3DGS-Daten |
bHasMesh | bool | Ob Mesh-Daten vorhanden sind |
Mesh | FTreeNodeDataMesh | Mesh-Daten |
bHasBVH | bool | Ob BVH-Daten vorhanden sind |
BVH | FTreeNodeDataBVH | BVH-Daten |
FTreeNodeData3DGS
| Feld | Typ | Beschreibung |
|---|---|---|
Name | int32 | Index der Datei |
Start | int32 | Start-Offset |
Count | int32 | Anzahl |
FTreeNodeDataMesh
| Feld | Typ | Beschreibung |
|---|---|---|
Name | int32 | Index der Datei |
Vertex | int32 | Anzahl der Vertices |
Face | int32 | Anzahl der Faces |
FTreeNodeDataBVH
| Feld | Typ | Beschreibung |
|---|---|---|
Name | int32 | Index der Datei |
Siehe auch
- ULCCComponentBase: Verwendung von
FRenderInfoundFMetaInfoBase - ULCCComponent: Verwendung von
FLCCSplatundFLCCRenderInfo - ULCCUtilLibrary: die Funktionen zum Auswerten der SOG-Metadaten
- Enums: die in diesen Structs genutzten Enum-Typen