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 für Schattenempfang

Das LCC Unity SDK unterstützt das dynamische Werfen von Schatten durch Mesh-Objekte auf 3DGS-Oberflächen für bessere Beleuchtungseffekte. Im Folgenden werden die vollständigen Schritte zur Implementierung dynamischer Schatten beschrieben.

Schritt 1: Szene und GameObjects erstellen

Erstellen Sie eine brandneue Szene in Unity. Unity erstellt standardmäßig Hauptkamera und Richtungslicht.

Hauptkamera einrichten

Wählen Sie die Hauptkamera im Fenster Hierarchie aus und legen Sie deren Eigenschaften im Fenster Inspektor wie unten dargestellt fest.

Die Eigenschaften der Hauptkamera festlegen

Die Eigenschaften der Hauptkamera festlegen

LCCManager erstellen

Klicken Sie mit der rechten Maustaste in einen leeren Bereich des Fensters Hierarchie, wählen Sie im Popup-Menü Leeres GameObject erstellen, um ein leeres GameObject zu erstellen, benennen Sie es LCCManager, normalisieren Sie dessen Transform und fügen Sie über Komponente hinzufügen das Skript LCCManager hinzu.

Das GameObject LCCManager erstellen und das Skript LCCManager hinzufügen

Das GameObject LCCManager erstellen und das Skript LCCManager hinzufügen

LCCRenderer erstellen

Klicken Sie mit der rechten Maustaste in einen leeren Bereich des Fensters Hierarchie, wählen Sie Leeres GameObject erstellen, um ein leeres GameObject zu erstellen, benennen Sie es LCCRenderer und setzen Sie dessen Transform auf Rotation.x = -90 und Scale.x = -1.

LCCRenderer erstellen und dessen Transform festlegen

LCCRenderer erstellen und dessen Transform festlegen (Rotation.x = -90, Scale.x = -1)

Hinweis:

Die Transform-Einstellungen des GameObject LCCRenderer (Rotation.x = -90, Scale.x = -1) richten es am LCC-Daten-Koordinatensystem aus. Details zur Ausrichtung am Koordinatensystem finden Sie unter „LCC-Daten-Koordinatensystem“ in Einführung in das Unity SDK.

Richtungslicht-Schatten aktivieren

Wählen Sie das GameObject Richtungslicht im Fenster Hierarchie aus und stellen Sie im Fenster Inspektor sicher, dass Schatten aktiviert sind.

Sicherstellen, dass Schatten auf dem Richtungslicht aktiviert sind

Sicherstellen, dass Schatten auf dem Richtungslicht aktiviert sind

Schritt 2: Ein Renderer-Feature hinzufügen

  1. Wählen Sie in der Unity-Menüleiste Datei → Projekteinstellungen, wählen Sie links Grafik und bestätigen Sie das aktuelle Standard-Render-Pipeline-Asset. Dieses Beispiel verwendet URP (Universal Render Pipeline Asset).
Das Standard-Render-Pipeline-Asset in den Grafikeinstellungen bestätigen

Das Standard-Render-Pipeline-Asset in den Grafikeinstellungen bestätigen

  1. Klicken Sie auf dieses Asset, suchen Sie im Fenster Projekt die zugehörige Asset-Datei und finden Sie den damit verbundenen Renderer (in diesem Beispiel URP_Renderer.asset).

  2. Wählen Sie diese Renderer-Asset-Datei aus, klicken Sie im Fenster Inspektor auf Renderer-Feature hinzufügen und fügen Sie das Splat Shadow Mask Feature hinzu.

Das Splat Shadow Mask Feature zum URP-Renderer hinzufügen

Das Splat Shadow Mask Feature zum URP-Renderer hinzufügen

Schritt 3: Ein Skript zum Aktivieren des Schattenempfangs schreiben

Erstellen Sie ein neues C#-Skript namens LCCShadow.cs mit folgendem Code:

using LCCCore;
using UnityEngine;

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

    void Start()
    {
        m_manager.SetPlatformType(PlatformType.PC);
        m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);

        Debug.Log("Gestartet ");
        m_renderer = m_manager.GetRender(this.transform);
        m_renderer.Load(m_FilePath, onProgress, onComplete);
    }

    private void onProgress(float _progress)
    {
        Debug.Log($"[LCCRenderer] Datei-Ladefortschritt: {_progress:P1}");
    }

    private void onComplete()
    {
        Debug.Log($"[LCCRenderer] Datei geladen");
        m_manager.SetShadowReceive(true);
        //m_manager.SetShadowColor(new Color(0, 0, 0, 1.0f));
        //m_manager.SetShadowStrength(0.5f);
    }
}

Hinweis:

Der Schattenempfang muss nach Abschluss des Ladens der LCC-Szene aktiviert werden, daher wird SetShadowReceive(true) im Callback onComplete aufgerufen.

Schritt 4: Das Skript anhängen und den Datenpfad festlegen

  1. Hängen Sie das Skript LCCShadow.cs im Fenster Hierarchie an das GameObject LCCRenderer.
  2. Ziehen Sie im Fenster Inspektor das GameObject LCCManager auf die Eigenschaft Manager des Skripts.
  3. Tragen Sie den LCC-Dateipfad in die Eigenschaft File Path des Skripts ein.

Schritt 5: Ein schattenwerfendes Mesh-Objekt erstellen

  1. Erstellen Sie ein Würfel-Objekt in der Szene und stellen Sie sicher, dass Schatten werfen = Ein gilt.
  2. Verschieben Sie den Würfel an eine geeignete Position, damit Sie den Schatten beobachten können, den er auf die 3DGS-Oberfläche wirft.

Schritt 6: Ausführen

Klicken Sie im Fenster Spiel auf die Schaltfläche Play und bewegen Sie den Würfel in Echtzeit, um den von ihm geworfenen dynamischen Schatten zu beobachten.

Der Würfel, der nach dem Ausführen einen dynamischen Schatten auf die 3DGS-Oberfläche wirft

Der Würfel, der nach dem Ausführen einen dynamischen Schatten auf die 3DGS-Oberfläche wirft

FAQ: Kompatibilitätsmodus deaktivieren

Wenn das Fenster Konsole von Unity Fehler meldet und kein Schatten erscheint, deaktivieren Sie den Kompatibilitätsmodus: Öffnen Sie das Einstellungsfenster über Bearbeiten → Projekteinstellungen → Grafik, wählen Sie den Tab URP und aktivieren Sie nicht das Kontrollkästchen nach Render Graph → Compatibility Mode (Render Graph Disabled).

Den Render-Graph-Kompatibilitätsmodus nicht aktivieren

Den Render-Graph-Kompatibilitätsmodus nicht aktivieren (Render Graph Disabled)

Schlüsselschritte

Die Schlüsselschritte zum Werfen von Schatten durch Mesh-Objekte auf 3DGS-Oberflächen:

  1. Sicherstellen, dass die Szene ein Richtungslicht mit aktivierten Schatten besitzt.
  2. Sicherstellen, dass die Szene ein Mesh-Objekt besitzt, das mit Schatten werfen = Ein Schatten wirft.
  3. Sicherstellen, dass das Splat Shadow Mask Feature zum URP-Renderer hinzugefügt wurde.
  4. Sicherstellen, dass der Schattenempfang im Code nach Abschluss des Ladens der LCC-Szene aktiviert wird (SetShadowReceive(true)).

Schattenbezogene APIs

Das LCC Unity SDK stellt über LCCManager die folgenden drei schattenbezogenen APIs bereit. Sie müssen alle nach Abschluss des Ladens der LCC-Szene (d. h. im Callback onComplete) aufgerufen werden, und SetShadowColor() / SetShadowStrength() wirken erst, nachdem SetShadowReceive(true) aktiviert wurde.

SetShadowReceive

// Rückgabewert: void
public void SetShadowReceive(bool enable)

Schaltet den Punktwolken-Schattenempfang um. Bei Aktivierung können Schatten von Mesh-Objekten in der Szene auf die 3DGS-Punktwolkenoberfläche geworfen werden.

ParameterTypBeschreibung
enableboolOb Schatten empfangen werden sollen

Verwendungsbeispiel:

m_manager.SetShadowReceive(true);

Hinweise:

  • Standardmäßig deaktiviert.
  • Erfordert ein schattenwerfendes Mesh-Objekt und ein Richtungslicht in der Szene.
  • Bei Aktivierung wird das Shader-Keyword _SPLAT_SHADOW_ON aktiviert.

SetShadowColor

// Rückgabewert: void
public void SetShadowColor(Color color)

Legt die Farbe des Schattenbereichs fest.

ParameterTypBeschreibung
colorColorSchattenfarbe (RGBA)

Verwendungsbeispiel:

m_manager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));

Hinweise:

  • Der Standardwert ist (0.3, 0.3, 0.3, 1).
  • Erfordert, dass zuvor SetShadowReceive(true) aktiviert wurde.

SetShadowStrength

// Rückgabewert: void
public void SetShadowStrength(float strength)

Legt die Schattenstärke fest. 0 bedeutet kein Schatten und 1 bedeutet den stärksten Schatten.

ParameterTypBeschreibung
strengthfloatSchattenstärke, im Bereich [0, 1]

Verwendungsbeispiel:

m_manager.SetShadowStrength(0.8f);

Hinweise:

  • Der Standardwert ist 1.0.
  • Bereich [0, 1]; Werte außerhalb des Bereichs werden automatisch begrenzt.
  • Erfordert, dass zuvor SetShadowReceive(true) aktiviert wurde.