XGRIDSDocumentazione
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • PortalCam

    • Panoramica del prodotto
    • Operazioni di base
    • Uso della LCC Scan App
    • Manutenzione e cura
    • FAQ
  • Serie Lixel K

    • Lixel K1

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Fusione delle mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
    • Lixel K2

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione
      • Flusso di scansione
      • Acquisire una nuvola di punti con coordinate assolute
      • Fusione mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
  • Serie Lixel L

    • Lixel L2 Pro

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Punto di misura
      • Appendice
      • FAQ
  • Lixel Studio

    • Versione e copyright
    • Installazione e attivazione
    • Interfaccia del software
    • Operazioni sui file
    • Elaborazione del progetto
    • Strumenti
    • Disegno 2D
    • Applicazioni
    • Impostazioni
    • Connessione del dispositivo
  • Lixel CyberColor

    • LCC Studio

      • Introduzione
      • Versione e aggiornamenti
      • Download e installazione
      • Panoramica dell'interfaccia e navigazione
      • Operazioni preliminari alla ricostruzione
      • Prima della ricostruzione
      • Ricostruzione del modello
      • Ricostruzione modello singolo
      • Fusione delle mappe
      • Fusione aria-terra
      • Ricostruzione aerea
      • I miei modelli
      • Altre funzioni
      • Impostazioni e account
      • Convertitore
      • Ricostruzione video
      • Domande Frequenti / FAQ
    • LCC Scene Editor

      • Versione e aggiornamenti
      • Account e accesso
      • Panoramica del prodotto e home page
      • Interfaccia dell'editor
      • Modalità di navigazione
      • File
      • Impostazioni
      • Modifica
      • Finestra
      • Barra degli strumenti globale
      • Asset e proprietà
      • Barra degli strumenti sinistra
      • Punti di vista
      • Portale
      • Skybox
      • Annotazioni
      • Misurazione
      • Flythrough
      • Rapporto scena
      • 3D Layout
      • Mini-mappa
      • Modalità Anteprima (Viewer)
      • Aiuto
      • Domande frequenti (FAQ)
      • Punto di spawn
    • LCC Model Editor

      • Versione e aggiornamenti
      • Guida utente
      • Panoramica e interfaccia
      • Operazioni sui file
      • Selettori
      • Modifica dei modelli
      • Misurazione
      • Correzione colore
      • Gestione degli asset
      • Impostazioni e Aiuto
      • Domande frequenti
    • Capture Guide

      • Panoramica
      • Panoramica dei dispositivi di acquisizione
      • Principi generali di acquisizione
      • Acquisizione di scene interne
      • Acquisizione di scene esterne
      • Acquisizione su larga scala (map fusion)
      • Acquisizione per aerial-ground map fusion
      • Acquisizione di oggetti
      • Acquisizione di persone
      • Acquisizione per ricostruzione da video
      • HD Enhancement
      • Control points (Lixel P1)
      • FAQ e risoluzione dei problemi
    • Cronologia versioni
  • Plugin e SDK

    • Unreal

      • Introduzione
      • Avvio rapido - Windows
      • Avvio rapido - Linux
      • Avvio rapido - Quest3
      • Edizioni e licenze
      • Rendering
      • Impostazioni visive
      • Normali e illuminazione
      • Modifica della scena
      • Parametri di prestazione
      • Guida alle prestazioni
      • Integrazione con plugin di terze parti e del motore
      • Proxy Mesh
      • Animazione di caricamento
      • Collisioni
      • Supporto del Navigation System
      • Supporto di Single Layer Water
      • Localizzazione
      • FAQ
      • Risoluzione dei problemi
      • Log e diagnostica
      • Contattaci
      • Riferimento API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ULCCUtilLibrary
        • Enum
        • Struct
      • Registro delle modifiche

        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1

Struct: riferimento dei tipi struct

Tipi struct esposti dal modulo LCC4UnrealRuntime.

ModuloLCC4UnrealRuntime
HeaderCore/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.

CampoTipoPredefinitoCasella corrispondenteDescrizione
MaxDistanceuint32300bDistanceLimitDistanza massima di rendering, in metri
MaxSplatNumuint323000bMaxSplatNumLimitNumero massimo di splat per fotogramma, in unità di diecimila, limite superiore 10000
LevelFactorfloat1bCanSetLevelFactorFattore di scala della distanza del LOD, da 0.01 a 20
PreloadDistanceuint32200bPreloadDistanceLimitDistanza di precaricamento. Il valore effettivo è MaxDistance + 35
StartLeveluint320bCanSetStartLevelStart Level, da 0 a 20
EndLeveluint3220bCanSetEndLevelEnd Level, da 0 a 20
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimitDistanza massima di caricamento delle collisioni, in metri
bUseFullLoadbooltruebCanSetUseFullLoadInterruttore del caricamento completo per le scene piccole. Riscritto in casella spuntata, valore false quando ULCC2Component viene costruito
FullLoadSplatNumuint321500bCanSetFullLoadNumSoglia 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 abilitazione b*, né bUseFullLoad e FullLoadSplatNum.
  • FRenderInfo::GetPreloadDistance() restituisce GetMaxDistance() + 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.

CampoTipoPredefinitoCasella corrispondenteDescrizione
SortFactorfloat1bCanSetSortFactorFattore di scala della frequenza di ordinamento, da 0.2 a 5. Un valore più grande significa meno ordinamenti e prestazioni migliori
bAddExtraPreNodesboolDeciso da una macrobEnableExtraPreNodesAggiunge 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.

CampoTipoDescrizione
NameFStringNome dei dati
VersionFStringStringa della versione dei dati
DescriptionFStringDescrizione
SourceFStringSorgente
DataTypeFStringTipo di dati
FileTypeFStringTipo di file, corrispondente a EFileType
OffsetTArray<float>Offset delle coordinate, 3 elementi
ShiftTArray<float>Quantità di traslazione
Epsgint32Numero del sistema di coordinate EPSG, maggiore di 0 significa che sono presenti informazioni di coordinate geografiche
ScaleTArray<int>Scala, 3 elementi
GUIDFStringIdentificatore univoco dei dati
TotalLevelintNumero totale di Level
TotalSplatsintNumero totale di splat
SplatsTArray<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 aggiuntivoTipoDescrizione
CellLengthXfloatDimensione della griglia lungo X
CellLengthYfloatDimensione della griglia lungo Y
AttributesTArray<FBoundingBoxInfoWithName>Bounding box di ogni attributo, indicizzato per nome
IndexDataSizeintDimensione dei dati di indice
EncodingFStringMetodo di codifica
BoundingBoxFBoundingBoxInfoBounding 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 aggiuntivoTipoDescrizione
WorkPathFStringPercorso della directory LCC2
SplatTypeEDataSourceTypeFormato della sorgente dei dati, SOG / SPZ / PLY
SHBandsint32Banda di armoniche sferiche più alta in questo albero, 0 significa nessuna, valori 1/2/3
EnvNameint32Indice del file dell'ambiente, -1 significa nessuno
RootFTreeNodeNodo radice dell'octree
FilesTArray<FString>Elenco dei file di dati splat
MeshFilesTArray<FString>Elenco dei file di mesh
BVHFilesTArray<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.

CampoTipoDescrizione
LocationFVectorCoordinate nel mondo del punto colpito
NodeVectorFLCCVectorInformazioni 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.

CampoTipoDescrizione
Xint32Indice X del nodo
Yint32Indice Y del nodo
Levelint32Level 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.

CampoTipoDescrizione
MinTArray<float>Coordinate del punto minimo
MaxTArray<float>Coordinate del punto massimo

FBoundingBoxInfoWithName

Bounding box con nome, usato dall'elenco degli attributi nelle metainformazioni.

CampoTipoDescrizione
NameFStringNome dell'attributo
BoundingBoxInfoFBoundingBoxInfoBounding 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.

CampoTipoDescrizione
Versionint32Versione del formato
Countint32Numero di splat
bAntialiasboolSe l'anti-aliasing è abilitato
InstancesFLCC2SogInstancesElenco dei file di istanza
MeansFLCC2SogMeansDati di posizione, con minimo, massimo ed elenco dei file
ScalesFLCC2SogScalesDati di scala, con un codebook di 256 voci ed elenco dei file
QuatsFLCC2SogQuatsElenco dei file dei dati di rotazione
SemanticsFLCC2SogSemanticsElenco dei file dei dati semantici
Sh0FLCC2SogSh0Armoniche sferiche di banda 0, con un codebook di 256 voci ed elenco dei file
ShNFLCC2SogShNArmoniche 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 ParseSogMetaFromFile senza 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.

CampoTipoDescrizione
Bandsint32Bande di armoniche sferiche
Countint32Conteggio
FilesTArray<FString>Elenco dei file
CodebookTStaticArray<float, 256>Codebook di quantizzazione, non visibile a Blueprint

Metodo di supporto: bool HasShN() const.

FLCC2SogImageData

Dati immagine SOG.

CampoTipoDescrizione
PixelDataTArray<uint8>Dati dei pixel, formato RGBA, 4 byte per pixel
Widthint32Larghezza
Heightint32Altezza

Altri sotto-struct

Gli struct seguenti contengono solo un elenco di file, alcuni con un codebook di quantizzazione:

StructCampi
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins, Maxs, Files
FLCC2SogScalesCodebook (256 voci), Files
FLCC2SogSh0Codebook (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.

CampoTipoDescrizione
IdFStringIdentificatore del nodo
XMin / YMin / ZMindoublePunto minimo dell'AABB
XMax / YMax / ZMaxdoublePunto massimo dell'AABB
ChildNumint32Numero di nodi figli
ChildrenTArray<FTreeNode>Array dei nodi figli, non è una UPROPERTY
DataFTreeNodeDataDati 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.

CampoTipoDescrizione
bHas3DGSboolSe sono presenti dati 3DGS
_3DGSFTreeNodeData3DGSDati 3DGS
bHasMeshboolSe sono presenti dati di mesh
MeshFTreeNodeDataMeshDati di mesh
bHasBVHboolSe sono presenti dati BVH
BVHFTreeNodeDataBVHDati BVH

FTreeNodeData3DGS

CampoTipoDescrizione
Nameint32Indice del file
Startint32Offset iniziale
Countint32Conteggio

FTreeNodeDataMesh

CampoTipoDescrizione
Nameint32Indice del file
Vertexint32Numero di vertici
Faceint32Numero di facce

FTreeNodeDataBVH

CampoTipoDescrizione
Nameint32Indice del file

Vedere anche

  • ULCCComponentBase: uso di FRenderInfo e FMetaInfoBase
  • ULCCComponent: uso di FLCCSplat e FLCCRenderInfo
  • ULCCUtilLibrary: le funzioni di analisi delle metainformazioni SOG
  • Enum: i tipi enum usati in questi struct
Precedente
Enum