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

Actor SOG / SPZ / PLY: caricamento di 3DGS a file singolo

Gli Actor ASogActor, ASpzActor e APlyActor corrispondono rispettivamente ai formati .sog, .spz e .ply e caricano un singolo file 3DGS senza una struttura di directory LCC. Tutti e tre ereditano da ALCCActorBase.

ModuloLCC4UnrealRuntime
HeaderSogActor.h, SpzActor.h, PlyActor.h
Classe padreALCCActorBase
Component internoULCC2Component
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

Tutti e tre riutilizzano internamente l'intera pipeline di rendering LCC2 costruendo un FLCC2MetaInfo virtuale. In altre parole, le funzionalità LCC2 sono disponibili allo stesso modo per questi tre formati, incluso il controllo delle bande di armoniche sferiche, le modalità delle normali per l'illuminazione, il taglio e il sezionamento e la regolazione del colore. Per lo stesso motivo si ereditano anche i limiti della pipeline LCC2, per esempio l'assenza di effetto delle interfacce per più viewport.

Formati supportati

ActorEstensioneCaso d'uso
ASogActor.sogFormato compresso, dimensioni ridotte, caricamento rapido
ASpzActor.spzFormato compresso
APlyActor.plyFormato comune di scambio per nuvole di punti / 3DGS, output nativo della maggior parte degli strumenti di training

Per l'ambito di supporto di ogni formato vedere Introduzione - Formati supportati.

Confronto con i formati a directory LCC

.sog / .spz / .plyDirectory LCC / LCC2
Organizzazione dei fileUn solo fileFile di metainformazioni più diversi chunk di dati
Level di LODAssentiPresenti, caricati in streaming in base alla distanza
Scala adeguataScene piccole e medieScene grandi
Dati di collisioneAssentiPossibili
Facilità di distribuzioneAlta, un solo fileRichiede di mantenere la directory intatta

Come scegliere: usare questi tre formati quando i dati sono piccoli, quando serve verificare rapidamente il risultato o quando serve la distribuzione a file singolo. Le scene grandi si affidano al LOD per controllare le prestazioni e richiedono il formato a directory LCC / LCC2.

Metodi

Le interfacce pubbliche di tutti e tre gli Actor sono ereditate da ALCCActorBase; solo i metodi seguenti sono sovrascritti.

SelectFile

// ASogActor
virtual void SelectFile() override;   // la finestra di dialogo elenca solo .sog

// ASpzActor
virtual void SelectFile() override;   // la finestra di dialogo elenca solo .spz

// APlyActor
virtual void SelectFile() override;   // la finestra di dialogo elenca solo .ply

Apre la finestra di dialogo dei file, ciascuno filtrando la propria estensione. Compare come pulsante Load nel pannello Details.

Solo nell'editor; a runtime in una build pacchettizzata usare Load.

Load (sovrascritto solo da APlyActor)

// APlyActor
virtual void Load(const FString& String) const override;

Carica un file .ply. Un percorso la cui estensione non è .ply viene rifiutato subito e non viene tentata alcuna analisi.

ASogActor e ASpzActor non sovrascrivono Load e usano l'implementazione della classe base.

Esempi

Caricare un singolo file .sog

#include "SogActor.h"
#include "LCC2Component.h"

void AMyLoader::LoadSogFile()
{
    ASogActor* SogActor = GetWorld()->SpawnActor<ASogActor>(
        ASogActor::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator);
    if (!SogActor)
    {
        return;
    }

    SogActor->Load(TEXT("D:/Data/scene.sog"));

    // internamente è un ULCC2Component, quindi tutte le funzionalità LCC2 sono disponibili
    ULCC2Component* Comp = Cast<ULCC2Component>(SogActor->GetLCCComponent());
    if (Comp)
    {
        Comp->SetSHBands(2);
        Comp->SetSplatScale(0.9f);
    }
}

Scegliere l'Actor automaticamente in base all'estensione

Ogni formato ha il proprio Actor dedicato e un progetto reale di norma deve smistare in base all'estensione.

Non affidarsi a DetermineFileFormat per questo: riconosce solo .lcc, .splats, .las e .ply, e restituisce None per .lcc2, .sog e .spz. Verificare direttamente l'estensione è più affidabile:

#include "Tools/LCCUtilLibrary.h"
#include "LCCActor.h"
#include "LCC2Actor.h"
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

ALCCActorBase* AMyLoader::LoadAnyFormat(const FString& Path)
{
    if (!ULCCUtilLibrary::CheckPathValid(Path))
    {
        UE_LOG(LogTemp, Error, TEXT("Path does not exist: %s"), *Path);
        return nullptr;
    }

    const FString Ext = FPaths::GetExtension(Path).ToLower();

    UClass* ActorClass = nullptr;
    if (Ext == TEXT("lcc"))       ActorClass = ALCCActor::StaticClass();
    else if (Ext == TEXT("lcc2")) ActorClass = ALCC2Actor::StaticClass();
    else if (Ext == TEXT("sog"))  ActorClass = ASogActor::StaticClass();
    else if (Ext == TEXT("spz"))  ActorClass = ASpzActor::StaticClass();
    else if (Ext == TEXT("ply"))  ActorClass = APlyActor::StaticClass();

    if (!ActorClass)
    {
        UE_LOG(LogTemp, Error, TEXT("Unsupported format: %s"), *Path);
        return nullptr;
    }

    ALCCActorBase* Actor = GetWorld()->SpawnActor<ALCCActorBase>(
        ActorClass, FVector::ZeroVector, FRotator::ZeroRotator);
    if (Actor)
    {
        Actor->Load(Path);
    }
    return Actor;
}

Blueprint non ha un nodo che accetta direttamente l'estensione, quindi usare una verifica sulla stringa:

[Custom Event: LoadAnyFormat]
        Path (String)
        │
        ▼
[Check Path Valid]
        Path = Path
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Ends With]
        Source String = Path
        In Suffix = ".sog"
        Search Case = Ignore Case
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Spawn Actor from Class]
        Class = SogActor
        │ Return Value ──┐
        ▼                │
[Load] ◀─────────────────┘
        Target = (Return Value)
        String = Path

(il ramo False continua a verificare ".spz", ".ply", ".lcc2", ".lcc" con Ends With)

Note

  • Questi tre formati non hanno Level di LOD. Il caricamento costruisce un albero a un solo livello e un solo nodo (numero totale di Level pari a 1, nodo radice senza figli), quindi i parametri di LOD come StartLevel, EndLevel e LevelFactor vengono comunque letti ma non hanno Level tra cui scegliere e non producono alcun effetto. Le prestazioni si controllano principalmente con MaxSplatNum e SplatScale.
  • Questi tre formati non contengono dati di collisione; per le alternative vedere Collisioni - Alternative per i formati a file singolo.
  • Un file grande viene caricato interamente in una volta e l'uso della memoria video resta costante e non cambia con la vista. Per il limite di caricamento e come viene calcolato, vedere Rendering - Limiti di caricamento dei formati a file singolo.
  • Passano per la pipeline di rendering LCC2, quindi le interfacce per più viewport della classe base non si applicano.
  • Tutti e tre impostano bUseMipFilter sul Component a false alla costruzione (il valore predefinito della classe base è true) e impostano la rotazione dell'Actor a (0, 0, 90).
  • .ply ha diversi sottoformati e il plugin supporta la variante che contiene le proprietà 3DGS. Il caricamento di un normale .ply con una mesh geometrica fallisce.

Vedere anche

  • ALCCActorBase: tutte le interfacce ereditate
  • ULCC2Component: il component usato internamente da questi tre Actor
  • ULCCUtilLibrary: rilevamento del formato e validazione dei percorsi
Precedente
ULCC2Component
Successivo
ALCC2ProxyMesh