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

    • PortalCam P1

      • 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 L3

      • Produktübersicht
      • Grundlegende Bedienung
      • Aktivierung und Verbindung
      • Scan-Workflow
      • Punktwolke mit absoluten Koordinaten erfassen
      • Anhang
  • Zubehör

    • Stick Light

      • Installationsanleitung
      • Grundlegende Bedienung
      • Häufige Fragen
  • Lixel Studio

    • Version und Copyright
    • Installation und Aktivierung
    • Softwareoberfläche
    • Dateioperationen
    • Projektverarbeitung
    • Werkzeuge
    • 2D-Zeichnung
    • Anwendungen
    • Einstellungen
    • Geräteverbindung
    • Häufige Fragen
  • 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
    • Best Practices

      • Zusammenführen mehrerer großer 3DGS-Modelle
    • Versionsgeschichte
  • Plugin & SDK

    • Unreal

      • Einführung
      • Schnellstart - Windows
      • Schnellstart - Linux
      • Schnellstart - Quest3
      • Editionen und Lizenzierung
      • Rendering
      • Tiled-Rasterisierung (experimentell)
      • 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
      • Bewährte Vorgehensweisen

        • 3DGS mit einem LixelStudio-Mesh neu beleuchten
      • API-Referenz

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

        • v3.4.0
        • 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
    • Unity

      • Einführung in das Unity SDK
      • Technische Funktionen
      • Anforderungen an die Entwicklungsumgebung
      • PC-Schnellstartanleitung
      • Leitfaden zur Optimierung der Projekteinstellungen
      • Pico 4 Ultra-Entwicklungsanleitung
      • Pico 4 Ultra-PC-Streaming-Anleitung
      • Quest 3-Entwicklungsanleitung
      • Quest 3-PC-Streaming-Anleitung
      • OpenXR-Entwicklungsanleitung
      • Pico 4 Ultra-Business-Streaming-Anleitung
      • Glossar
      • FAQ
      • Kontakt
      • Funktionsentwicklungsleitfaden

        • Entwicklungsanleitung für gemischtes Multi-Szenen-Rendering
        • Entwicklungsanleitung für Schattenempfang
        • Entwicklungsanleitung für Echtzeitbeleuchtung
        • Entwicklungsanleitung für Multi-Kamera-Rendering
        • Entwicklungsanleitung für hochauflösendes Bild-Rendering
        • Entwicklungsanleitung zur Kompatibilität der Datenformate LCC und LCC2
        • Entwicklungsanleitung für Ladeeffekte
        • Entwicklungsanleitung für das Umschalten des Mip-Rendering-Modus
        • Entwicklungsanleitung für Kanten- und Eckensnapping
        • Entwicklungsanleitung für projizierte Decals
        • Entwicklungsanleitung für projizierte Video-Decals
        • Entwicklungsanleitung für Hervorhebung
        • Entwicklungsanleitung für Echtzeit-Clipping
        • Entwicklungsanleitung für Farbanpassung
        • Entwicklungsanleitung für das Abrufen von Szenen-Mesh-Daten
        • Entwicklungsanleitung für den Editor-Modus
        • Konfigurationsanleitung für Render-Leistungsparameter
        • Entwicklungsanleitung zum gemeinsamen Paketieren von Anwendung und Daten
        • Entwicklungsanleitung für das Kollisionssystem
        • Anleitung zu macOS-Berechtigungsproblemen in der Entwicklung
        • Entwicklungsanleitung für Kompilierung und Paketierung auf iOS-Geräten
      • API-Referenz

        • LCCManager
        • Renderer
        • Datentypen
      • Changelog

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • Einführung
      • Leitfaden zur Rendering-Leistungsoptimierung
      • Grafikkonfiguration
      • Häufige Fragen
      • API-Referenz

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • Änderungsprotokoll

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

Entwicklungsanleitung zum gemeinsamen Paketieren von Anwendung und Daten

Das LCC Unity SDK unterstützt die Trennung der Anwendung von den Daten. In der tatsächlichen Anwendungsentwicklung müssen Sie die Anwendung jedoch manchmal zusammen mit den 3DGS-Szenendaten paketieren und veröffentlichen. Dieses Dokument stellt die Ansätze zum gemeinsamen Paketieren für PC und Android vor.

Dynamisches Datenladen zur PC-Laufzeit

Das SDK lädt Daten zur Laufzeit über die Methode Load(); der angegebene Pfad muss ein absoluter Pfad sein, z. B. G:\Data\xxx.lcc2.

Um Anwendung und Daten gemeinsam zu verteilen, können Sie den Ausführungspfad der Anwendung mit dem relativen Pfad der LCC-Szenendaten zu einem absoluten Pfad verketten, wie folgt:

  1. Den Ausführungspfad der Anwendung über Application.dataPath von Unity beziehen.
  2. Den relativen Datenpfad mit dem Ausführungspfad zum absoluten Pfad der 3DGS-Szenendaten verketten.

Das Codebeispiel ist wie folgt:

using UnityEngine;
using LCCCore;
using XGrids.LCC;

public class LCCRenderer : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;
    private LCCCore.Renderer m_renderer;

    void Start()
    {
        m_renderer = m_manager.GetRender(this.transform);

#if !UNITY_EDITOR
        string _dataPath = Application.dataPath;
        string _dataPath2 = _dataPath + "/data/meta.lcc2";   // Den relativen Pfad der LCC-Datei verketten
        m_FilePath = _dataPath2.Replace('/', '\\');
#endif

        m_renderer.Load(m_FilePath, onLoadProgress, onLoadCallback);
    }
}

Hinweis:

  • Die obige Pfadverkettung ist mit #if !UNITY_EDITOR umschlossen: Im Editor-Zustand von Unity wird direkt der im Inspektor angegebene m_FilePath (lokale Entwicklungsdaten) verwendet; nur im veröffentlichten Laufzeitzustand wird der relative Pfad unter dem Ausführungsverzeichnis der Anwendung verkettet.
  • In einem PC-Build zeigt Application.dataPath auf den Ordner <AppName>_Data im Anwendungsverzeichnis; daher muss der relative Datenpfad mit dem Speicherort übereinstimmen, an den die Daten später kopiert werden.
  • Windows-Pfade verwenden Backslashes \; das Beispiel verwendet Replace('/', '\\'), um sie zu konvertieren.

LCC-Szenendaten in ein angegebenes Verzeichnis kopieren

Nach dem normalen Erstellen des Unity-Projekts und dem Kompilieren/Veröffentlichen der Anwendung ist die erzeugte Anwendungsverzeichnisstruktur unten dargestellt.

Nach Unity-Build und Veröffentlichung erzeugte Anwendungsverzeichnisstruktur

Nach Unity-Build und Veröffentlichung erzeugte Anwendungsverzeichnisstruktur

Entsprechend dem relativen LCC-Pfad data/meta.lcc2 im Code müssen Sie die LCC-Szenendaten an die entsprechende Stelle im erzeugten Verzeichnis der Anwendung kopieren, wie unten dargestellt.

Die LCC-Szenendaten entsprechend dem relativen Pfad in das Anwendungsverzeichnis kopieren

Die LCC-Szenendaten entsprechend dem relativen Pfad in das Anwendungsverzeichnis kopieren

Das gesamte Verzeichnis paketieren

Paketieren Sie das gesamte Anwendungsverzeichnis (Zip-Komprimierung) und verteilen Sie es an die Benutzer, die es benötigen. Nachdem der Benutzer es entpackt und den Viewer ausführt, können die Szenendaten im angegebenen Verzeichnis geladen werden.

Android-Paketierungsworkflow

Android verwendet denselben Ansatz wie der PC, aber der Datenpfad benötigt eine kleine Änderung: Verwenden Sie Application.persistentDataPath als Daten-Stammverzeichnis.

Ändern Sie das Rendering-Skript so, dass der Datenpfad mit persistentDataPath verkettet wird. Beachten Sie, dass der Plattformtyp separat über SetPlatformType() (vor GetRender()) gesetzt wird und Load() nur den Pfad und Callbacks erhält:

void Start()
{
    // Der Plattformtyp muss vor GetRender() gesetzt werden
    m_manager.SetPlatformType(PlatformType.Pico);

    m_renderer = m_manager.GetRender(this.transform);
    m_renderer.Load(
        $"{Application.persistentDataPath}/LccData/meta.lcc2",
        onLoadProgress,
        onLoadCallback);
}

Paketierungs- und Bereitstellungsschritte:

  1. Den Code speichern und das Mobilgerät über ein USB-3.0-Kabel mit dem Computer verbinden, auf dem sich das Unity-Projekt befindet.
  2. In der Unity-Menüleiste Datei → Build-Einstellungen → Build wählen, um die APK zu erhalten.
  3. Die APK auf das Mobilgerät kopieren und installieren.
  4. Nach der Installation die App zunächst einmal öffnen, damit das System das Verzeichnis für den entsprechenden Paketnamen erstellt, und die App dann schließen.
  5. Unter dem Verzeichnis für den entsprechenden Paketnamen einen Ordner LccData erstellen und die LCC-Daten in diesen Ordner kopieren (der Pfad ist im Allgemeinen Android-Gerätespeicher → Android → data → App-BundleID → Files; das konkrete Verzeichnis entnehmen Sie dem Android-Installationspfad der App).
  6. Die App erneut öffnen, und der LCC-Inhalt wird auf dem Telefon oder VR-Gerät angezeigt.
Einen LccData-Ordner unter dem Android-App-Paketnamen-Verzeichnis erstellen und die Daten hineinkopieren

Einen LccData-Ordner unter dem Android-App-Paketnamen-Verzeichnis erstellen und die LCC-Daten hineinkopieren

Hinweise

  • iOS unterstützt nicht den obigen Ansatz des dynamischen Ladens aus einem lokalen Verzeichnis. iOS erlaubt einer Anwendung nicht, alle Dateien unter einem angegebenen Ordner zu lesen; sie kann nur eine einzelne angegebene Datei lesen.
  • Auf Mobil und VR wird empfohlen, die Daten auf einem Server abzulegen und die Daten zur Laufzeit vom Server zu beziehen, statt die Daten direkt in das APK-Anwendungspaket zu paketieren – Letzteres macht das Anwendungspaket sehr groß und aufgebläht.