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

    • Produktübersicht
    • Grundlegende Bedienung
    • LCC Scan App verwenden
    • Wartung und Pflege
    • FAQ
  • Lixel K-Serie

    • Lixel K1

      • Produktübersicht
      • Grundlegende Bedienung
      • Geräteaktivierung und -verbindung
      • Scan-Workflow
      • Punktwolke mit absoluten Koordinaten erfassen
      • Kartenfusion
      • Empfehlungen zur Routenplanung für typische Szenen
      • Hinweise
      • FAQ
    • Lixel K2

      • Produktübersicht
      • Grundlegende Bedienung
      • Aktivierung und Verbindung
      • Scan-Workflow
      • Punktwolke mit absoluten Koordinaten erfassen
      • Kartenfusion
      • Empfehlungen zur Routenplanung für typische Szenen
      • Hinweise
      • FAQ
  • Lixel L-Serie

    • Lixel L2 Pro

      • Produktübersicht
      • Grundlegende Bedienung
      • Geräteaktivierung und -verbindung
      • Scan-Workflow
      • Punktwolke mit absoluten Koordinaten erfassen
      • Messpunkt
      • Anhang
      • FAQ
  • Lixel Studio

    • Version und Copyright
    • Installation und Aktivierung
    • Softwareoberfläche
    • Dateioperationen
    • Projektverarbeitung
    • Werkzeuge
    • 2D-Zeichnung
    • Anwendungen
    • Einstellungen
    • Geräteverbindung
  • Lixel CyberColor

    • LCC Studio

      • Erste Schritte
      • Version und Updates
      • Download und Installation
      • Oberfläche und Navigation
      • Vor der Rekonstruktion
      • Modellrekonstruktion
      • Einzelmodell-Rekonstruktion
      • Kartenfusion
      • Boden-Luft-Fusion
      • Luftbild-Rekonstruktion
      • Meine Modelle
      • Weitere Funktionen
      • Einstellungen und Konto
      • Converter
      • Videorekonstruktion
      • Häufige Fragen / FAQ
    • LCC Scene Editor

      • Version und Updates
      • Konto und Anmeldung
      • Produktübersicht und Startseite
      • Editor-Oberfläche
      • Navigationsmodi
      • Datei
      • Einstellungen
      • Bearbeiten
      • Fenster
      • Globale Symbolleiste
      • Assets und Eigenschaften
      • Linke Symbolleiste
      • Ansichtspunkte
      • Portal
      • Skybox
      • Markierungen
      • Messung
      • Flythrough
      • Szenenbericht
      • 3D-Layout
      • Minikarte
      • Vorschaumodus (Viewer)
      • Hilfe
      • Häufige Fragen (FAQ)
      • Spawn-Point
    • LCC Model Editor

      • Version und Updates
      • Benutzerhandbuch
      • Übersicht und Oberfläche
      • Dateioperationen
      • Selektoren
      • Modelle bearbeiten
      • Messung
      • Farbkorrektur
      • Asset-Verwaltung
      • Einstellungen und Hilfe
      • Häufige Fragen
    • Capture Guide

      • Überblick
      • Überblick über die Aufnahmegeräte
      • Allgemeine Aufnahmeprinzipien
      • Aufnahme von Innenszenen
      • Aufnahme von Außenszenen
      • Großflächige Aufnahme (Map Fusion)
      • Aerial-Ground Map Fusion – Aufnahme
      • Objektaufnahme
      • Personenaufnahme
      • Video-Rekonstruktionsaufnahme
      • HD Enhancement
      • Kontrollpunkte (Lixel P1)
      • FAQ und Fehlerbehebung
    • Versionsgeschichte
  • Plugin & SDK

    • Unreal

      • Einführung
      • Schnellstart - Windows
      • Schnellstart - Linux
      • Schnellstart - Quest3
      • Editionen und Lizenzierung
      • Rendering
      • Bildeinstellungen
      • Normalen und Beleuchtung
      • Szenenbearbeitung
      • Leistungsparameter
      • Leitfaden zur Leistung
      • Integration von Drittanbieter- und Engine-Plugins
      • Proxy Mesh
      • Ladeanimation
      • Kollision
      • Unterstützung des Navigation System
      • Unterstützung von Single Layer Water
      • Lokalisierung
      • FAQ
      • Fehlerbehebung
      • Logs und Diagnose
      • Kontakt
      • API-Referenz

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG- / SPZ- / PLY-Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Änderungsprotokoll

        • 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

SOG- / SPZ- / PLY-Actors: Laden einzelner 3DGS-Dateien

Die Actors ASogActor, ASpzActor und APlyActor entsprechen jeweils den Formaten .sog, .spz und .ply und laden eine einzelne 3DGS-Datei ohne LCC-Verzeichnisstruktur. Alle drei erben von ALCCActorBase.

ModulLCC4UnrealRuntime
HeaderSogActor.h, SpzActor.h, PlyActor.h
BasisklasseALCCActorBase
Interne ComponentULCC2Component
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

Alle drei nutzen intern die vollständige LCC2-Rendering-Pipeline erneut, indem sie ein virtuelles FLCC2MetaInfo aufbauen. Anders gesagt: Die LCC2-Fähigkeiten stehen diesen drei Formaten genauso zur Verfügung, darunter die Steuerung der Bänder der Kugelflächenfunktionen, die Modi der Beleuchtungsnormalen, Clipping und Schnittebenen sowie die Farbanpassung. Aus dem gleichen Grund werden auch die Einschränkungen der LCC2-Pipeline geerbt, etwa dass die Schnittstellen für mehrere Viewports keine Wirkung haben.

Unterstützte Formate

ActorErweiterungAnwendungsfall
ASogActor.sogKomprimiertes Format, geringe Größe, schnell zu laden
ASpzActor.spzKomprimiertes Format
APlyActor.plyVerbreitetes Austauschformat für Punktwolken und 3DGS, die native Ausgabe der meisten Trainingswerkzeuge

Zum Umfang der Unterstützung jedes Formats siehe Einführung - Unterstützte Formate.

Vergleich mit den LCC-Verzeichnisformaten

.sog / .spz / .plyLCC- / LCC2-Verzeichnis
Organisation der DateienEine DateiMetadatendatei plus mehrere Daten-Chunks
LOD-LevelsKeineVorhanden, distanzabhängig nachgeströmt
Passende GrößenordnungKleine und mittlere SzenenGroße Szenen
KollisionsdatenKeineMöglich
Einfachheit der WeitergabeHoch, eine einzige DateiErfordert, das Verzeichnis vollständig zu halten

Zur Wahl: diese drei Formate nutzen, wenn die Daten klein sind, wenn das Ergebnis schnell geprüft werden soll oder wenn die Weitergabe als einzelne Datei gebraucht wird. Große Szenen stützen sich auf LOD, um die Leistung zu steuern, und erfordern das LCC- / LCC2-Verzeichnisformat.

Methoden

Die öffentlichen Schnittstellen aller drei Actors werden von ALCCActorBase geerbt; nur die untenstehenden Methoden werden überschrieben.

SelectFile

// ASogActor
virtual void SelectFile() override;   // der Dialog listet nur .sog

// ASpzActor
virtual void SelectFile() override;   // der Dialog listet nur .spz

// APlyActor
virtual void SelectFile() override;   // der Dialog listet nur .ply

Öffnet den Dateidialog, jeder filtert seine eigene Erweiterung. Wird im Details-Panel als Schaltfläche Load angezeigt.

Nur im Editor; in einer paketierten Laufzeit Load nutzen.

Load (nur von APlyActor überschrieben)

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

Lädt eine .ply-Datei. Ein Pfad, dessen Erweiterung nicht .ply ist, wird unmittelbar abgewiesen und es wird kein Parsen versucht.

ASogActor und ASpzActor überschreiben Load nicht und nutzen die Implementierung der Basisklasse.

Beispiele

Eine einzelne .sog-Datei laden

#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"));

    // intern eine ULCC2Component, alle LCC2-Fähigkeiten stehen daher zur Verfügung
    ULCC2Component* Comp = Cast<ULCC2Component>(SogActor->GetLCCComponent());
    if (Comp)
    {
        Comp->SetSHBands(2);
        Comp->SetSplatScale(0.9f);
    }
}

Den Actor automatisch anhand der Erweiterung wählen

Jedes Format hat seinen eigenen Actor, und ein echtes Projekt muss meist anhand der Erweiterung verteilen.

Sich dafür nicht auf DetermineFileFormat stützen: Es erkennt nur .lcc, .splats, .las und .ply und gibt für .lcc2, .sog und .spz None zurück. Die Erweiterung direkt zu prüfen ist verlässlicher:

#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 hat keinen Node, der die Erweiterung direkt annimmt, daher eine Zeichenkettenprüfung nutzen:

[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

(der Zweig False prüft mit Ends With weiter ".spz", ".ply", ".lcc2", ".lcc")

Hinweise

  • Diese drei Formate haben keine LOD-Levels. Das Laden baut einen Baum mit einem Level und einem Node auf (Gesamtanzahl der Levels 1, Wurzelknoten ohne Kinder), LOD-Parameter wie StartLevel, EndLevel und LevelFactor werden daher weiter gelesen, haben aber keine Levels zur Auswahl und keine Wirkung. Die Leistung wird vor allem über MaxSplatNum und SplatScale gesteuert.
  • Diese drei Formate bringen keine Kollisionsdaten mit; zu Alternativen siehe Kollision - Alternativen für Einzeldateiformate.
  • Eine große Datei wird in einem Durchgang vollständig geladen, und der Grafikspeicherbedarf bleibt konstant und ändert sich nicht mit der Ansicht. Zur Ladegrenze und ihrer Berechnung siehe Rendering - Ladegrenzen von Einzeldateiformaten.
  • Sie laufen durch die LCC2-Rendering-Pipeline, die Schnittstellen für mehrere Viewports an der Basisklasse gelten daher nicht.
  • Alle drei setzen bUseMipFilter an der Component beim Konstruieren auf false (der Standardwert der Basisklasse ist true) und setzen die Rotation des Actors auf (0, 0, 90).
  • .ply hat mehrere Unterformate, und das Plugin unterstützt die Variante, die 3DGS-Eigenschaften mitbringt. Das Laden eines regulären Geometrie-Mesh im Format .ply schlägt fehl.

Siehe auch

  • ALCCActorBase: alle geerbten Schnittstellen
  • ULCC2Component: die Component, die diese drei Actors intern nutzen
  • ULCCUtilLibrary: Formaterkennung und Pfadprüfung
Zurück
ULCC2Component
Weiter
ALCC2ProxyMesh