ULCC2Component: Component della pipeline LCC2
Component specifico della pipeline LCC2, che eredita da ULCCComponentBase. Aggiunge il controllo delle bande di armoniche sferiche, un sistema di normali per l'illuminazione e il controllo della soglia di profondità.
| Modulo | LCC4UnrealRuntime |
| Header | LCC2Component.h |
| Classe padre | ULCCComponentBase |
| Contenuto in | ALCC2Actor, ASogActor, ASpzActor, APlyActor |
#include "LCC2Component.h"
Ottenere l'istanza:
ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());
Questo component serve contemporaneamente quattro formati di dati: la directory LCC2, .sog, .spz e .ply. Gli ultimi tre riutilizzano la stessa pipeline di rendering costruendo metainformazioni virtuali, quindi il Component ottenuto è sempre ULCC2Component.
Nota: le interfacce per più viewport della classe base (
SetPlayerLoadMode,SetPlayerRenderMode,SetSceneCaptureLoadMode,SetSceneCaptureRenderMode,ModifyPlayerTransform,CancelModifyPlayerTransform) non si applicano alla pipeline LCC2; le chiamate non generano errori ma non producono il risultato previsto. Per i dettagli vedere ULCCComponent.
Proprietà
| Proprietà | Tipo | Predefinito | Intervallo | Descrizione |
|---|---|---|---|---|
SHBands | int32 | 3 | 1~3 | Bande di armoniche sferiche. Il valore predefinito è il numero di bande memorizzato nei dati, che è anche il limite superiore |
LightingScale | float | 0.0 | 0~1 | Luminosità del colore 3DGS originale prima dell'applicazione dell'illuminazione della scena |
AlphaThreshold | float | 0.5 | 0.01~0.99 | Soglia di opacità accumulata per la decisione della profondità mediana, voce avanzata |
NormalMode | ELCC2NormalGenerationMode | Fixed | — | Modalità di generazione delle normali, che decide come il 3DGS risponde alla luce della scena |
FixedNormal | FVector | (0, 0, 1) | — | Normale nel mondo condivisa da tutto il 3DGS in modalità Fixed |
NormalPole | FVector | (1, 0, 1) | — | Orientamento della superficie in modalità Hemispherical |
NormalHemiSpread | float | 0.5 | 0~4 | Intensità della variazione di resa in modalità Hemispherical |
Le proprietà delle normali hanno EditConditionHides, quindi il pannello Details mostra solo le voci usate dalla NormalMode corrente.
Altre due differenze rispetto alla classe base:
MetaInfo(di tipoFLCC2MetaInfo) è un membro private, non accessibile dall'esterno sul lato C++ e visibile solo a Blueprint (in sola lettura nel pannello Details). In C++ usare GetMetaInfo2 per leggere i campi completi.- La costruzione riscrive l'impostazione del caricamento completo di
Performancein «casella spuntata, valorefalse», l'opposto del valore predefinito diFRenderInfo. In altre parole, LCC2 non usa il rendering a caricamento completo per impostazione predefinita e va abilitato esplicitamente quando serve.
Armoniche sferiche
SetSHBands / GetSHBands
UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);
UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;
Imposta quante bande di armoniche sferiche partecipano al calcolo, da 1 a 3. Si applica a ogni formato renderizzato da questo component, inclusi LCC2, SOG, SPZ e PLY.
| Parametro | Tipo | Descrizione |
|---|---|---|
InSHBands | int32 | Numero di bande, 1 è il più economico, 3 il più completo. I valori oltre quanto memorizzato nei dati non hanno effetto |
Note d'uso:
- Il valore predefinito proviene dai dati caricati ed è anche il limite superiore. Impostare 3 su dati che memorizzano solo 2 bande non aggiunge nulla.
- Rispetto alla disattivazione completa delle armoniche sferiche con
SetUseShcoef(false), ridurre il numero di bande è un compromesso più fine. - Richiede che
bUseShcoefsia abilitato e che la modalità di rendering sia 3DGS, altrimenti il valore non partecipa al calcolo. - Per il compromesso tra qualità e costo vedere Impostazioni visive - SH Bands.
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
// scendere a 2 bande sui dispositivi di fascia media
Comp->SetSHBands(2);
}
Configurazione per livello di qualità:
void ConfigureSH(ULCC2Component* Comp, EQualityTier Tier)
{
if (!Comp || !Comp->CanSetShcoef())
{
return; // i dati stessi non hanno armoniche sferiche, non c'è nulla da fare
}
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); // disattivarle completamente
break;
}
}
Illuminazione
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;
Luminosità del colore di base del 3DGS prima dell'applicazione dell'illuminazione della scena, da 0 a 1, predefinito 0. 0 significa completamente guidato dall'illuminazione della scena, 1 significa che la luminosità originale viene mantenuta interamente.
Per l'effetto del valore e come regolarlo, vedere Normali e illuminazione - LCC2 Lighting Scale.
Note d'uso:
- Ha senso solo mentre
LightModeèLit; non ha effetto sottoUnlit. - È una proprietà
BlueprintReadWrite, assegnata direttamente, senza funzione Setter. - È marcata
Interp, quindi può essere animata con keyframe in Sequencer per i cambi giorno-notte.
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f; // mantiene il 30% della luminosità originale, il resto dalla luce della scena
NormalMode
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;
Controlla come la superficie del 3DGS risponde all'illuminazione della scena. I dati 3DGS stessi non hanno normali geometriche, e le prime tre modalità costruiscono le normali per approssimazione; solo ProxyMesh fornisce normali reali.
Per un confronto tra le quattro modalità, i loro casi d'uso e come regolarle, vedere Normali e illuminazione; per le definizioni dei valori vedere Enum.
// modalità Fixed, normale rivolta verso l'alto
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);
// modalità Hemispherical, regolando la direzione in cui la luce scorre e il contrasto
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);
Solo modalità Fixed. Normale in spazio mondo condivisa da tutto il 3DGS, rivolta verso l'alto per impostazione predefinita. La normalizzazione non è necessaria.
Note d'uso:
- Una normale condivisa da tutto significa che la luminosità di tutto è un unico valore, pari a
dot(normal, light direction). - La luce che arriva da dietro la normale scurisce tutto, eventualmente fino al nero. In una scena esterna con la normale rivolta verso l'alto e la sorgente luminosa in alto, di norma va bene.
- Quando il soggetto principale della scena è un muro, impostare la normale sull'orientamento del muro è più sensato.
NormalPole
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);
Solo modalità Hemispherical. La direzione verso cui la superficie viene considerata rivolta, che decide come il confine della resa si sposta sul 3DGS mentre la luce direzionale ruota. La normalizzazione non è necessaria.
Come regolarlo: posizionare prima la luce direzionale, poi regolare questo vettore e osservare se la direzione del confine della resa corrisponda alle attese.
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;
Solo modalità Hemispherical. Intensità della variazione di resa sulla superficie, da 0 a 4, predefinito 0.5.
Un valore più piccolo rende la resa più piatta e uniforme; un valore più grande rende più forte il contrasto tra le zone illuminate e quelle in ombra.
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;
Soglia di opacità accumulata per la decisione della profondità mediana, da 0.01 a 0.99, predefinito 0.5. Voce avanzata.
L'opacità si accumula dal vicino al lontano, e quando il valore accumulato raggiunge questa soglia la profondità corrente viene registrata come profondità rappresentativa di quel pixel. Un valore più piccolo sposta la profondità verso il lato della camera, un valore più grande verso il lato lontano.
Influisce sull'occlusione tra 3DGS e mesh tradizionali, sulla proiezione delle ombre e sulla post-elaborazione. Il valore predefinito è adatto alla maggior parte dei casi; per una descrizione dei valori vedere Impostazioni visive - Depth Threshold.
GetEffectiveNormalGenerationMode
UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;
Restituisce la modalità delle normali effettivamente attiva dopo la validazione della licenza.
Valore di ritorno: il valore originale di NormalMode in presenza di licenza; Fixed quando è selezionato ProxyMesh, soggetto a licenza, senza licenza.
Note d'uso:
- La proprietà
NormalModememorizzata non viene modificata; solo il rendering segue la modalità declassata. LeggereNormalModee leggere questa funzione può quindi dare risultati diversi. - Usarla per i messaggi dell'interfaccia. Quando l'utente ha selezionato
ProxyMeshma èFixeda essere effettivamente in uso, l'interfaccia dovrebbe segnalarlo.
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 come testo:
[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"
Altri metodi
GetMetaInfo2
FLCC2MetaInfo GetMetaInfo2();
Restituisce le metainformazioni LCC2 complete. Solo C++.
Rispetto a GetMetaInfo() della classe base, aggiunge il percorso di lavoro, il tipo di sorgente dei dati, le bande di armoniche sferiche, il nodo radice dell'octree, l'elenco dei file e altro. Per i campi vedere Struct.
GetLccVersion
virtual ELCCVersion GetLccVersion() const override;
Restituisce sempre ELCCVersion::LCC2.
Vedere anche
- Normali e illuminazione: descrizione completa delle modalità delle normali e della scala di illuminazione
- Impostazioni visive: valori per bande SH, soglia di profondità e altri parametri
- ULCCComponentBase: interfacce comuni di rendering e prestazioni
- ALCC2ProxyMesh: l'Actor complementare della modalità delle normali
ProxyMesh - Actor SOG / SPZ / PLY: anche questi tre formati usano questo component
- Enum: valori della modalità delle normali