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

OpenXR-Entwicklungsanleitung

OpenXR ist ein offener, lizenzgebührenfreier XR-Schnittstellenstandard (VR/AR/MR), der von der Khronos Group definiert und gepflegt wird. Sein Kernziel besteht darin, Entwicklern „einmal schreiben, überall ausführen“ zu ermöglichen und so das Fragmentierungsproblem zu lösen, dass verschiedene Geräte jeweils über einen eigenen API-Satz verfügen. Das LCC Unity SDK unterstützt nun den OpenXR-Standard und kann daher 3DGS-Daten auf OpenXR-kompatiblen Geräten rendern, ohne dass ein SDK eines bestimmten VR-Geräteherstellers erforderlich ist.

Versionsanforderungen

Die in dieser Anleitung verwendeten Software- und Plugin-Versionen sind nachfolgend aufgeführt. Es wird empfohlen, mit denselben Versionen zu entwickeln; andere, nicht getestete Versionen können Kompatibilitätsprobleme aufweisen:

Software / PluginVersion
Unityv6000.0.69f1
LCC Unity SDKv2.3.0 und neuer

Hinweis:

  1. OpenXR ist ein Standard, und verschiedene VR-Gerätehersteller unterstützen möglicherweise alle seine Funktionen oder nur einen Teil davon; prüfen Sie daher vor der Verwendung den Unterstützungsstatus des jeweiligen Geräts.
  2. Der OpenXR-Standard definiert gemeinsame technische Spezifikationen, aber gerätespezifische Funktionen erfordern weiterhin ein Hersteller-SDK oder eine Hersteller-OpenXR-Erweiterung, wie ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) und andere Technologien, die die Zwischenbild-Glätte verbessern.
  3. Diese Anleitung demonstriert hauptsächlich die OpenXR-Entwicklung auf echten VR-Geräten; das LCC Unity SDK unterstützt keine OpenXR-Desktop-Anwendungsentwicklung (mit Ausnahme von PCVR).

Entwicklungsworkflow

Schritt 1: Ein URP-Projekt erstellen

Wählen Sie in der Projektvorlage den Typ Universal 3D (URP-Render-Pipeline), wie unten dargestellt:

Ein Universal-3D-Projekt erstellen

Ein Universal-3D-Projekt erstellen

Schritt 2: Die Plattform wechseln

Wählen Sie nach der Projekterstellung im Unity-Menü Datei → Build-Profile, um das Build-Fenster zu öffnen, und wechseln Sie die Plattform auf Android, wie unten dargestellt:

Die Plattform in den Build-Profilen auf Android wechseln

Die Plattform in den Build-Profilen auf Android wechseln

Schritt 3: Unity OpenXR importieren

Öffnen Sie das UPM-Fenster über das Unity-Menü Fenster → Paket-Manager, wählen Sie in der linken Liste Unity-Registry, geben Sie OpenXR in das Suchfeld ein, wählen Sie aus den Suchergebnissen OpenXR Plugin und installieren Sie es, wie unten dargestellt:

Das OpenXR Plugin aus der Unity-Registry installieren

Das OpenXR Plugin aus der Unity-Registry installieren

Schritt 4: XR Interaction Toolkit importieren

Wählen Sie in der linken Liste Unity-Registry, geben Sie XR in das Suchfeld ein, wählen Sie aus den Suchergebnissen XR Interaction Toolkit und installieren Sie es, wie unten dargestellt:

XR Interaction Toolkit aus der Unity-Registry installieren

XR Interaction Toolkit aus der Unity-Registry installieren

Schritt 5: Das LCC Unity SDK importieren

Öffnen Sie das UPM-Fenster über das Unity-Menü Fenster → Paket-Manager, klicken Sie links auf +, wählen Sie im Dropdown-Menü Paket von Datenträger installieren, suchen Sie das LCC Unity SDK und wählen Sie die Datei package.json zum Import, wie unten dargestellt:

Das LCC Unity SDK über „Paket von Datenträger installieren“ importieren

Das LCC Unity SDK über „Paket von Datenträger installieren“ importieren

Schritt 6: Die Unity-Umgebung einrichten

XR-Plug-in-Verwaltung konfigurieren (Android-Plattform)

Wählen Sie in der Unity-Menüleiste Datei → Projekteinstellungen, wählen Sie links XR-Plug-in-Verwaltung, aktivieren Sie im Tab der Plattform Android die Option OpenXR und aktivieren Sie XR beim Start initialisieren, wie unten dargestellt:

Auf der Android-Plattform OpenXR und „XR beim Start initialisieren“ aktivieren

Auf der Android-Plattform OpenXR und „XR beim Start initialisieren“ aktivieren

XR-Plug-in-Verwaltung konfigurieren (Desktop-Plattform)

Da das LCC Unity SDK die OpenXR-Desktop-Entwicklung nicht unterstützt, aktivieren Sie unter der Plattform Desktop weder OpenXR noch XR beim Start initialisieren, wie unten dargestellt:

Auf der Desktop-Plattform OpenXR und „XR beim Start initialisieren“ nicht aktivieren

Auf der Desktop-Plattform OpenXR und „XR beim Start initialisieren“ nicht aktivieren

Hinweis: Für Desktop-PCVR siehe PCVR-Streaming.

OpenXR-Render-Modus und Interaktionskonfiguration konfigurieren

Wählen Sie unter XR-Plug-in-Verwaltung den Eintrag OpenXR und setzen Sie den Render-Modus der Plattform Android auf Single Pass Instanced oder Multi-View. Da OpenXR das Festlegen von Interaktionsprofilen erfordert, wählen Sie üblicherweise Oculus Touch Controller Profile oder ein Profil mit ähnlichen Geräteleistungsmerkmalen, wie unten dargestellt:

Den OpenXR-Render-Modus und die Interaktionsprofile festlegen

Den OpenXR-Render-Modus und die Interaktionsprofile festlegen

Projektvalidierung

Wählen Sie unter XR-Plug-in-Verwaltung den Eintrag Projektvalidierung und klicken Sie auf Alle korrigieren, um die erforderlichen Einstellungen abzuschließen (Sie können dies auch vorerst unbehandelt lassen und später manuell erstellen), wie unten dargestellt:

In der Projektvalidierung auf „Alle korrigieren“ klicken

In der Projektvalidierung auf „Alle korrigieren“ klicken

Player konfigurieren (Desktop-Plattform)

Wählen Sie links in Projekteinstellungen den Eintrag Player, wechseln Sie zur Plattform Desktop, klappen Sie den Abschnitt Weitere Einstellungen auf, deaktivieren Sie Automatische Grafik-API, setzen Sie Grafik-APIs auf Direct3D12, Vulkan, Direct3D11 und entfernen Sie die übrigen Grafik-APIs; setzen Sie Farbraum auf Gamma, wie unten dargestellt:

Die Grafik-APIs und den Gamma-Farbraum auf der Desktop-Plattform festlegen

Die Grafik-APIs und den Gamma-Farbraum auf der Desktop-Plattform festlegen

Hinweis: Einige VR-Geräte unterstützen den Gamma-Farbraum nicht; in diesem Fall können Sie nur den Linear-Farbraum wählen, und im Linear-Farbraum gerenderte LCC-Szenen erscheinen leicht ausgewaschen.

Player konfigurieren (Android-Plattform)

Wählen Sie links in Projekteinstellungen den Eintrag Player, wechseln Sie zur Plattform Android, klappen Sie den Abschnitt Weitere Einstellungen auf, deaktivieren Sie Automatische Grafik-API, setzen Sie Grafik-APIs auf Vulkan und entfernen Sie die übrigen Grafik-APIs; setzen Sie Farbraum auf Gamma, wie unten dargestellt:

Die Grafik-API auf Vulkan und den Gamma-Farbraum auf der Android-Plattform festlegen

Die Grafik-API auf Vulkan und den Gamma-Farbraum auf der Android-Plattform festlegen

Skripting-Backend und Eingabe der Android-Plattform festlegen

Scrollen Sie im Tab Weitere Einstellungen der Plattform Android weiter nach unten und setzen Sie Mindest-API-Level = Android 12L (API Level 32) oder neuer, Skripting-Backend = IL2CPP, Zielarchitektur = ARM64, Aktive Eingabeverarbeitung = Input System-Paket (Neu) oder Beides, wie unten dargestellt:

Mindest-API-Level, Skripting-Backend, Zielarchitektur und Aktive Eingabeverarbeitung festlegen

Mindest-API-Level, Skripting-Backend, Zielarchitektur und Aktive Eingabeverarbeitung festlegen

Grafik und Qualität prüfen

Wählen Sie links in Projekteinstellungen den Eintrag Grafik und prüfen Sie das von der Standard-Render-Pipeline der Plattform Mobil verwendete Render-Asset, in diesem Beispiel Mobile_RPAsset, wie unten dargestellt:

Das Render-Asset der Standard-Render-Pipeline auf der Mobil-Plattform prüfen

Das Render-Asset der Standard-Render-Pipeline auf der Mobil-Plattform prüfen

Wählen Sie links in Projekteinstellungen den Eintrag Qualität, prüfen Sie das von der Standard-Render-Pipeline der Plattform Mobil verwendete Render-Asset (in diesem Beispiel Mobile_RPAsset), setzen Sie Fester DPI-Faktor für Auflösungsskalierung = 0,7 und VSync-Anzahl = Nicht synchronisieren, wie unten dargestellt:

Den DPI-Faktor und VSync in den Qualitätseinstellungen festlegen

Den DPI-Faktor und VSync in den Qualitätseinstellungen festlegen

Das Render-Asset konfigurieren

Suchen Sie das von der Standard-Render-Pipeline der Plattform Mobil verwendete Render-Asset (in diesem Beispiel Mobile_RPAsset), wählen Sie das Asset aus und deaktivieren Sie im Eigenschaftenfenster (Inspektor): Tiefentextur, Opake Textur, HDR; setzen Sie Kantenglättung (MSAA) = Deaktiviert, Render-Skalierung = 0,7, Hochskalierungsfilter = Automatisch, wie unten dargestellt:

Tiefentextur/Opake Textur, HDR, MSAA deaktivieren und die Render-Skalierung im Render-Asset festlegen

Tiefentextur/Opake Textur, HDR, MSAA deaktivieren und Render-Skalierung = 0,7 im Render-Asset festlegen

Suchen Sie den zu diesem Render-Asset passenden Renderer, in diesem Beispiel Mobile_Renderer (Universal Renderer Data), und legen Sie dessen zugehörige Eigenschaften im Eigenschaftenfenster (Inspektor) fest, wie unten dargestellt:

Die Eigenschaften von Mobile_Renderer (Universal Renderer Data) konfigurieren

Die Eigenschaften von Mobile_Renderer (Universal Renderer Data) konfigurieren

Schritt 7: Die Szene erstellen

Erstellen Sie eine brandneue Szene in Unity, löschen Sie die Hauptkamera und das Richtungslicht, klicken Sie mit der rechten Maustaste in einen leeren Bereich des Hierarchiefensters (Hierarchie) und wählen Sie im Popup-Menü XR → XR Origin (VR), um die erforderlichen XR-Objekte zu erstellen.

Schritt 8: Die Szene konfigurieren

Wählen Sie das GameObject XR Origin (VR) im Hierarchiefenster (Hierarchie) aus und setzen Sie in der Komponente XR Origin des Eigenschaftenfensters (Inspektor) den Tracking-Ursprungsmodus auf Boden; weitere zugehörige Eigenschaften sind wie unten dargestellt:

Den Tracking-Ursprungsmodus von XR Origin auf Boden setzen

Den Tracking-Ursprungsmodus von XR Origin auf Boden setzen

Wählen Sie das GameObject Hauptkamera unter XR Origin (VR) im Hierarchiefenster (Hierarchie) aus und legen Sie die Eigenschaften der Komponente Camera im Eigenschaftenfenster (Inspektor) fest: Clipping-Ebenen Nah = 0,3, Fern = 5000; Kantenglättung = Keine Kantenglättung; Opake Textur = Aus, Tiefentextur = Aus; Hintergrundtyp = Einfarbig, Hintergrund = Schwarz; HDR = Aus, MSAA = Aus; weitere Eigenschaften sind wie unten dargestellt:

Die Eigenschaften der Camera-Komponente der Hauptkamera unter XR Origin (VR) festlegen

Die Eigenschaften der Camera-Komponente der Hauptkamera unter XR Origin (VR) festlegen

Schritt 9: Code zum Laden der Szene schreiben

Klicken Sie im Hierarchiefenster (Hierarchie) mit der rechten Maustaste auf Leeres GameObject erstellen, um ein leeres Objekt zu erstellen, benennen Sie es LCCManager, normalisieren Sie dessen Transform und hängen Sie das Skript LCCManager über Komponente hinzufügen an, wie unten dargestellt:

Ein leeres Objekt LCCManager erstellen und das Skript LCCManager anhängen

Ein leeres Objekt LCCManager erstellen und das Skript LCCManager anhängen

Klicken Sie im Hierarchiefenster (Hierarchie) mit der rechten Maustaste auf Leeres GameObject erstellen, um ein weiteres leeres Objekt zu erstellen, benennen Sie es LCCRenderer und setzen Sie dessen Transform Rotation.x = -90, Scale.x = -1, wie unten dargestellt:

Ein leeres Objekt LCCRenderer erstellen und die Transform für die Koordinatensystem-Ausrichtung festlegen

Ein leeres Objekt LCCRenderer erstellen und Rotation.x = -90 sowie Scale.x = -1 festlegen, um die Koordinatensysteme auszurichten

Rotation.x = -90 und Scale.x = -1 sind die Ausrichtungstransformation vom LCC-Daten-Koordinatensystem (Z-up, rechtshändig) zum Unity-Koordinatensystem (Y-up, linkshändig); siehe „LCC-Daten-Koordinatensystem“ in Einführung in das Unity SDK.

An diesem Punkt ist die GameObject-Struktur im Hierarchiefenster (Hierarchie) wie unten dargestellt:

Die Struktur des Hierarchiefensters

Die Struktur des Hierarchiefensters

Schreiben Sie ein C#-Skript namens LCCRenderer.cs mit folgendem Code:

using LCCCore;
using UnityEngine;
using UnityEngine.XR;

public class LCCRenderer : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;

    private LCCCore.Renderer m_renderer;

    void Start()
    {
#if UNITY_EDITOR
        m_manager.SetPlatformType(PlatformType.PC);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load(m_FilePath, onProgress, onLoaded);
#else
        m_manager.SetPlatformType(PlatformType.OpenXR);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load($"{Application.persistentDataPath}/LccData/meta.lcc2", onProgress, onLoaded);
#endif
    }

    private void onProgress(float v)
    {
        Debug.Log("Fortschritt:" + v);
    }

    private void onLoaded()
    {
        m_manager.SetStartLod(2);
        m_renderer.SetEnvironment(false);
        Debug.Log("Daten geladen");
    }
}

Hängen Sie das Skript im Hierarchiefenster (Hierarchie) an das GameObject LCCRenderer an, ziehen Sie anschließend im Eigenschaftenfenster (Inspektor) das GameObject LCCManager auf die Eigenschaft Manager des Skripts und tragen Sie abschließend den LCC-Dateipfad ein.

Um das Debuggen im Unity-Editor und das direkte Builden auf ein Android-Gerät zu erleichtern, verwendet der Code Kompilierungsmakros zur Unterscheidung der Laufzeitumgebung: Im Unity-Editor wird direkt die durch m_FilePath angegebene Adresse verwendet; auf einem Android-Gerät wird die On-Device-Datenquelle genutzt. Die On-Device-Daten werden wie folgt abgelegt:

  1. Führen Sie die gebaute App einmal auf dem VR-Gerät aus.
  2. Nachdem die App installiert ist, öffnen Sie deren Datenverzeichnis (im Allgemeinen Gerätespeicher → Android → data → App-BundleID → Files; das konkrete Verzeichnis entnehmen Sie dem Android-App-Installationspfad) und erstellen Sie unter dem Unterverzeichnis Files einen Ordner LccData.
  3. Kopieren Sie alle LCC-Datenquellen in den Ordner LccData.

Hinweis: In der Praxis wird empfohlen, die Datenquelle der App auf einem Server abzulegen, anstatt sie direkt in die App zu verpacken.

Optimierungspraktiken

Das Befolgen der obigen Schritte ermöglicht das normale Rendern der LCC-Daten auf dem VR-Gerät, aber es gibt zwei Hauptprobleme:

2D-App-Fensterdarstellung

Apps, die ohne ein Gerätehersteller-SDK nach dem OpenXR-Standard entwickelt wurden, werden auf VR-Geräten nicht unbedingt als 3D-Apps erkannt; typischerweise behandelt das VR-Gerätesystem sie als 2D-Apps, sodass ein 2D-App-Fenster angezeigt wird. Es gibt zwei Ansätze, um dieses Problem zu lösen:

  • Ein Gerätehersteller-SDK oder eine Gerätehersteller-OpenXR-Erweiterung einführen; die Software des Geräteherstellers übernimmt dann die Behandlung der damit verbundenen Probleme.
  • AndroidManifest.xml anpassen.

Die konkreten Schritte zum Anpassen des Manifests sind: Wählen Sie links in Projekteinstellungen den Eintrag Player, wechseln Sie zur Plattform Android, klappen Sie den Abschnitt Veröffentlichungseinstellungen auf und aktivieren Sie Benutzerdefiniertes Hauptmanifest, wodurch eine benutzerdefinierte Manifestdatei generiert wird, wie unten dargestellt:

„Benutzerdefiniertes Hauptmanifest“ aktivieren, um eine benutzerdefinierte Manifestdatei zu generieren

„Benutzerdefiniertes Hauptmanifest“ aktivieren, um eine benutzerdefinierte Manifestdatei zu generieren

Suchen Sie die Datei AndroidManifest.xml und fügen Sie den VR-Marker hinzu, damit das VR-Gerät sie als immersive 3D-App erkennt und die gestartete App als 3D-Raum angezeigt wird. Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application>

        <!--Wird verwendet, wenn Application Entry auf GameActivity gesetzt ist, andernfalls diesen Activity-Block entfernen-->
        <activity android:name="com.unity3d.player.UnityPlayerGameActivity"
                  android:theme="@style/BaseUnityGameActivityTheme"
                  android:resizeableActivity="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
            <meta-data android:name="android.app.lib_name" android:value="game" />
        </activity>
    </application>
</manifest>

Ruckeln bei einer Rendering-Bildrate unter 90 FPS

Der OpenXR-Standard selbst definiert keine Frame-Interpolation, Glättung oder verwandte Inhalte; wenn die Bildrate 90 FPS nicht erreichen kann, entsteht beim Drehen des Kopfes oder Bewegen ein spürbares Ruckelgefühl. Um eine bessere Erfahrung zu bieten, insbesondere um die Flüssigkeit bei begrenzter Hardwareleistung zu verbessern, stellen Gerätehersteller in der Regel Techniken wie Tweening, Frame-Interpolation und Glättung bereit, etwa ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) usw.

Wenn das Gerät OpenXR unterstützt, stellen Gerätehersteller in der Regel eine OpenXR-Erweiterung oder ein SDK bereit, das OpenXR direkt unterstützt; in diesem Fall ist es am besten, das Gerätehersteller-SDK für eine flüssigere Erfahrung einzuführen.

Weiterführende Referenz

  • Zur Projekteinrichtung und Leistungsoptimierung siehe die Kapitel Leitfaden zur Optimierung der Projekteinstellungen und Leitfaden zu den Rendering-Leistungsparametern.
  • Die On-Screen-Rendering-Fähigkeit des VR-Geräts für 3DGS beträgt etwa 700.000 Gauß-Primitive; beim Rendern großer Szenen wird empfohlen, StartLOD auf 2 zu setzen und die Anzeige der Umgebungsdaten zu deaktivieren; große Szenen laufen über PC-Streaming flüssiger.