ULCC2Component: Component der LCC2-Pipeline
Component, die der LCC2-Pipeline eigen ist und von ULCCComponentBase erbt. Sie ergänzt die Steuerung der Bänder der Kugelflächenfunktionen, ein System für Beleuchtungsnormalen und die Steuerung des Tiefenschwellwerts.
| Modul | LCC4UnrealRuntime |
| Header | LCC2Component.h |
| Basisklasse | ULCCComponentBase |
| Gehalten von | ALCC2Actor, ASogActor, ASpzActor, APlyActor |
#include "LCC2Component.h"
Die Instanz holen:
ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());
Diese Component bedient vier Datenformate auf einmal: das LCC2-Verzeichnis, .sog, .spz und .ply. Die letzten drei nutzen dieselbe Rendering-Pipeline erneut, indem virtuelle Metadaten aufgebaut werden, die erhaltene Component ist daher immer ULCC2Component.
Hinweis: Die Schnittstellen für mehrere Viewports an der Basisklasse (
SetPlayerLoadMode,SetPlayerRenderMode,SetSceneCaptureLoadMode,SetSceneCaptureRenderMode,ModifyPlayerTransform,CancelModifyPlayerTransform) gelten nicht für die LCC2-Pipeline; Aufrufe lösen keinen Fehler aus, liefern aber nicht das erwartete Ergebnis. Näheres unter ULCCComponent.
Eigenschaften
| Eigenschaft | Typ | Standard | Bereich | Beschreibung |
|---|---|---|---|---|
SHBands | int32 | 3 | 1~3 | Bänder der Kugelflächenfunktionen. Standard ist die in den Daten gespeicherte Anzahl der Bänder, die auch die Obergrenze ist |
LightingScale | float | 0.0 | 0~1 | Helligkeit der ursprünglichen 3DGS-Farbe, bevor die Szenenbeleuchtung angewendet wird |
AlphaThreshold | float | 0.5 | 0.01~0.99 | Schwellwert der akkumulierten Deckkraft für die Entscheidung der mittleren Tiefe, ein Eintrag im Bereich Advanced |
NormalMode | ELCC2NormalGenerationMode | Fixed | — | Modus der Normalenerzeugung, entscheidet, wie 3DGS auf das Szenenlicht reagiert |
FixedNormal | FVector | (0, 0, 1) | — | Weltnormale, die im Modus Fixed das gesamte 3DGS teilt |
NormalPole | FVector | (1, 0, 1) | — | Ausrichtung der Oberfläche im Modus Hemispherical |
NormalHemiSpread | float | 0.5 | 0~4 | Stärke der Shading-Variation im Modus Hemispherical |
Die Normalen-Eigenschaften tragen EditConditionHides, das Details-Panel zeigt daher nur die Einträge, die der aktuelle NormalMode nutzt.
Zwei weitere Unterschiede zur Basisklasse:
MetaInfo(vom TypFLCC2MetaInfo) ist ein private Member, auf der C++-Seite von außen nicht erreichbar und nur für Blueprint sichtbar (im Details-Panel nur lesbar). In C++ mit GetMetaInfo2 die vollständigen Felder lesen.- Das Konstruieren schreibt die Einstellung für vollständiges Laden von
Performanceauf „Kontrollkästchen aktiviert, Wertfalse“ um, das Gegenteil des Standardwerts vonFRenderInfo. Anders gesagt: LCC2 nutzt standardmäßig kein Rendering mit vollständigem Laden, und es muss bei Bedarf ausdrücklich aktiviert werden.
Kugelflächenfunktionen
SetSHBands / GetSHBands
UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);
UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;
Setzt, wie viele Bänder der Kugelflächenfunktionen an der Berechnung teilnehmen, von 1 bis 3. Gilt für jedes Format, das diese Component rendert, darunter LCC2, SOG, SPZ und PLY.
| Parameter | Typ | Beschreibung |
|---|---|---|
InSHBands | int32 | Anzahl der Bänder, 1 ist am günstigsten, 3 am vollständigsten. Werte über dem, was die Daten speichern, haben keine Wirkung |
Hinweise zur Verwendung:
- Der Standardwert kommt aus den geladenen Daten und ist auch die Obergrenze. 3 auf Daten zu setzen, die nur 2 Bänder speichern, bringt nichts.
- Verglichen mit dem vollständigen Abschalten der Kugelflächenfunktionen über
SetUseShcoef(false)ist das Senken der Anzahl der Bänder die feinere Abwägung. - Es erfordert, dass
bUseShcoefaktiviert ist und der Rendering-Modus 3DGS ist, sonst nimmt der Wert nicht an der Berechnung teil. - Zur Abwägung zwischen Qualität und Kosten siehe Bildeinstellungen - SH Bands.
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
// auf Geräten der Mittelklasse auf 2 Bänder senken
Comp->SetSHBands(2);
}
Konfiguration nach Qualitätsstufe:
void ConfigureSH(ULCC2Component* Comp, EQualityTier Tier)
{
if (!Comp || !Comp->CanSetShcoef())
{
return; // die Daten selbst haben keine Kugelflächenfunktionen, nichts zu tun
}
switch (Tier)
{
case EQualityTier::High:
Comp->SetUseShcoef(true);
Comp->SetSHBands(3);
break;
case EQualityTier::Medium:
Comp->SetUseShcoef(true);
Comp->SetSHBands(2);
break;
case EQualityTier::Low:
Comp->SetUseShcoef(false); // vollständig abschalten
break;
}
}
Beleuchtung
LightingScale
UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (UIMin = "0.0", UIMax = "1.0", ClampMin = "0.0", ClampMax = "1.0"))
float LightingScale = 0.0f;
Helligkeit der Grundfarbe von 3DGS, bevor die Szenenbeleuchtung angewendet wird, von 0 bis 1, Standard 0. 0 bedeutet vollständig von der Szenenbeleuchtung getrieben, 1 bedeutet, dass die ursprüngliche Helligkeit vollständig erhalten bleibt.
Zur Wirkung des Werts und zum Abstimmen siehe Normalen und Beleuchtung - LCC2 Lighting Scale.
Hinweise zur Verwendung:
- Nur sinnvoll, solange
LightModeaufLitsteht; unterUnlithat sie keine Wirkung. - Es ist eine
BlueprintReadWrite-Eigenschaft, die direkt zugewiesen wird, ohne Setter-Funktion. - Mit
Interpausgezeichnet, sie lässt sich daher im Sequencer per Keyframe für einen Tag-Nacht-Wechsel animieren.
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f; // 30 % der ursprünglichen Helligkeit behalten, der Rest aus dem Szenenlicht
NormalMode
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;
Steuert, wie die 3DGS-Oberfläche auf die Szenenbeleuchtung reagiert. 3DGS-Daten selbst haben keine geometrischen Normalen, und die ersten drei Modi bauen Normalen durch Annäherung auf; nur ProxyMesh liefert echte Normalen.
Zum Vergleich der vier Modi, ihren Anwendungsfällen und zum Abstimmen siehe Normalen und Beleuchtung; zu den Definitionen der Werte siehe Enums.
// Modus Fixed, Normale zeigt nach oben
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);
// Modus Hemispherical, Richtung des Lichtverlaufs und Kontrast anpassen
Comp->NormalMode = ELCC2NormalGenerationMode::Hemispherical;
Comp->NormalPole = FVector(1.0, 0.0, 1.0);
Comp->NormalHemiSpread = 1.2f;
FixedNormal
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Fixed", EditConditionHides))
FVector FixedNormal = FVector(0.0, 0.0, 1.0);
Nur Modus Fixed. Normale im Weltraum, die das gesamte 3DGS teilt, standardmäßig nach oben zeigend. Eine Normalisierung ist nicht erforderlich.
Hinweise zur Verwendung:
- Eine von allem geteilte Normale bedeutet, dass die Helligkeit von allem ein einziger Wert ist, nämlich
dot(normal, light direction). - Licht, das von hinter der Normalen eintrifft, dunkelt alles ab, möglicherweise bis Schwarz. In einer Außenszene mit nach oben zeigender Normale und Lichtquelle darüber ist das meist unproblematisch.
- Ist das Hauptmotiv der Szene eine Wand, ist es sinnvoller, die Normale auf die Ausrichtung der Wand zu setzen.
NormalPole
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);
Nur Modus Hemispherical. Die Richtung, in die die Oberfläche als zeigend behandelt wird; sie entscheidet, wie sich die Shading-Grenze über das 3DGS bewegt, während das gerichtete Licht rotiert. Eine Normalisierung ist nicht erforderlich.
Zum Abstimmen: zuerst das gerichtete Licht platzieren, dann diesen Vektor anpassen und beobachten, ob die Richtung der Shading-Grenze den Erwartungen entspricht.
NormalHemiSpread
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (UIMin = "0.0", UIMax = "4.0", ClampMin = "0.0",
EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
float NormalHemiSpread = 0.5f;
Nur Modus Hemispherical. Stärke der Shading-Variation über die Oberfläche, von 0 bis 4, Standard 0.5.
Ein kleinerer Wert macht das Shading flacher und gleichmäßiger; ein größerer Wert macht den Kontrast zwischen beleuchteten und beschatteten Bereichen stärker.
AlphaThreshold
UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids", AdvancedDisplay,
meta = (UIMin = "0.01", UIMax = "0.99", ClampMin = "0.01", ClampMax = "0.99"))
float AlphaThreshold = 0.5f;
Schwellwert der akkumulierten Deckkraft für die Entscheidung der mittleren Tiefe, von 0.01 bis 0.99, Standard 0.5. Ein Eintrag im Bereich Advanced.
Die Deckkraft akkumuliert von nah nach fern, und erreicht der akkumulierte Wert diesen Schwellwert, wird die aktuelle Tiefe als repräsentative Tiefe dieses Pixels festgehalten. Ein kleinerer Wert verschiebt die Tiefe zur Kameraseite, ein größerer zur fernen Seite.
Er beeinflusst die Occlusion zwischen 3DGS und traditionellen Meshes, das Werfen von Schatten und die Nachbearbeitung. Der Standardwert passt für die meisten Fälle; zur Beschreibung der Werte siehe Bildeinstellungen - Tiefenschwellwert.
GetEffectiveNormalGenerationMode
UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;
Gibt den Normalen-Modus zurück, der nach der Lizenzprüfung tatsächlich wirksam ist.
Rückgabewert: der ursprüngliche Wert von NormalMode bei vorhandener Lizenz; Fixed, wenn das lizenzbeschränkte ProxyMesh ohne Lizenz gewählt ist.
Hinweise zur Verwendung:
- Die gespeicherte Eigenschaft
NormalModewird nicht verändert; nur das Rendering folgt dem herabgestuften Modus. Das Lesen vonNormalModeund das Lesen dieser Funktion können daher voneinander abweichen. - Sie für Meldungen in der Benutzeroberfläche nutzen. Hat der Nutzer
ProxyMeshgewählt, läuft aber tatsächlichFixed, sollte die Oberfläche das mitteilen.
const ELCC2NormalGenerationMode Requested = Comp->NormalMode;
const ELCC2NormalGenerationMode Effective = Comp->GetEffectiveNormalGenerationMode();
if (Requested != Effective)
{
UE_LOG(LogTemp, Warning,
TEXT("ProxyMesh mode requires a license, fell back to Fixed"));
}
Blueprint als Text:
[Get Effective Normal Generation Mode]
Target = (LCC2 Component)
│ Return Value ──┐
▼ │
[Equal (Enum)] ◀─────────┘
A = (Return Value)
B = Proxy Mesh
│
▼
[Branch]
│ False
▼
[Print String] In String = "ProxyMesh requires a license, fell back to Fixed"
Weitere Methoden
GetMetaInfo2
FLCC2MetaInfo GetMetaInfo2();
Gibt die vollständigen LCC2-Metadaten zurück. Nur C++.
Verglichen mit GetMetaInfo() der Basisklasse ergänzt sie den Arbeitspfad, den Typ der Datenquelle, die Bänder der Kugelflächenfunktionen, den Wurzelknoten des Octree, die Dateiliste und mehr. Zu den Feldern siehe Structs.
GetLccVersion
virtual ELCCVersion GetLccVersion() const override;
Gibt immer ELCCVersion::LCC2 zurück.
Siehe auch
- Normalen und Beleuchtung: vollständige Beschreibung der Normalen-Modi und der Lighting Scale
- Bildeinstellungen: Werte für SH Bands, Tiefenschwellwert und weitere Parameter
- ULCCComponentBase: gemeinsame Schnittstellen für Rendering und Leistung
- ALCC2ProxyMesh: der begleitende Actor des Normalen-Modus
ProxyMesh - SOG- / SPZ- / PLY-Actors: diese drei Formate nutzen ebenfalls diese Component
- Enums: Werte der Normalen-Modi