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

3DGS mit einem LixelStudio-Mesh neu beleuchten

Das Plugin unterstützt hybride Neubeleuchtung: Kombiniere 3DGS mit einem Mesh gleicher Skalierung, damit das 3DGS eine Lichtreaktion nahe an der eines Meshes erhält und Eigenschatten werfen kann.

Das Ergebnis hängt von der geometrischen Genauigkeit des Meshes unter dem 3DGS ab. Je besser Mesh und 3DGS zueinander passen, desto überzeugender fallen Lichtreaktion und Schatten aus.

Zum Prinzip und zu den Parametern siehe Proxy Mesh, zur Wahl des Normalenmodus siehe Normalen und Beleuchtung.

Welches Mesh verwenden

LCC Studio und LixelStudio erzeugen beide Meshes, verfolgen aber unterschiedliche Zwecke.

LCC Studio MeshLixelStudio Mesh
OberflächengenauigkeitGröberNäher an der echten Form
DateigrößeKleinGroß
Geeignet fürKollisionserkennungNeubeleuchtung

Für Kollision reicht das LCC Studio Mesh, siehe Kollision. Für die Neubeleuchtung nimm das LixelStudio Mesh.

LCC Studio Mesh:

LCC Studio Mesh, Gesamtansicht
LCC Studio Mesh, Nahansicht

LixelStudio Mesh:

LixelStudio Mesh, Gesamtansicht
LixelStudio Mesh, Nahansicht

Schritt 1: Die gekachelten Modelle in einem Ordner sammeln

LixelStudio exportiert Meshes in Kacheln. Bei einer großen Szene entstehen viele Ordner, jeder mit einer .obj-Datei und den zugehörigen Texturen. Vor dem Import müssen sie zu einem Mesh zusammengeführt werden, sonst bekommst du viele einzelne .obj-Dateien.

Die Schritte unten nutzen Blender, jedes andere 3D-Werkzeug funktioniert genauso. Blender gibt es auf der offiziellen Seite.

Blender kann keinen Stapel Ordner auf einmal aufnehmen, also müssen die über die Unterordner verteilten .obj-Dateien zuerst auf dieselbe Ebene geholt werden. Dutzende Ordner per Hand zu ziehen ist unpraktisch, deshalb ein einzelner PowerShell-Befehl.

Öffne den Wurzelordner mit allen Unterordnern, tippe powershell in die Adressleiste und drücke Enter. Das Terminal öffnet sich im aktuellen Verzeichnis.

powershell in der Adressleiste eingeben

powershell in die Adressleiste des Explorers eingeben

Kopiere diesen Befehl und füge ihn ein:

Get-ChildItem -Recurse -File | Move-Item -Destination .

Hinweis: Der Befehl holt jede Datei aus den Unterordnern in das aktuelle Verzeichnis. Prüfe vor dem Ausführen, dass du im richtigen Ordner bist. Enthält Ordner A etwa B und C, öffne PowerShell aus der Adressleiste von A; nach dem Lauf liegen alle Dateien aus B und C in A.

Unterordner vor dem Lauf

Ordnerstruktur vor dem Lauf

Befehl einfügen

Befehl einfügen und ausführen

Drücke nach dem Einfügen Enter. Es dauert einige Sekunden. Eine neue Eingabeaufforderung zeigt, dass der Befehl durchgelaufen ist.

Jetzt liegt alles offen. Öffne einige Unterordner und prüfe, dass sie leer sind.

Dateiliste nach dem Extrahieren

Alle .obj-Dateien und Texturen liegen nun auf derselben Ebene

Schritt 2: In Blender zu einer Datei zusammenführen

Drücke Ctrl + A, um alle Dateien auszuwählen, und zieh sie in Blender.

Alle Dateien auswählen

Alle Dateien auswählen

In Blender ziehen

In Blender ziehen

Klicke auf Import Wavefront OBJ. Für die richtige Ausrichtung setze Up Axis auf Z und Forward Axis auf X.

Ausrichtung beim Import

Up Axis auf Z und Forward Axis auf X setzen

Nun sind alle Kacheln importiert.

Importierte Kacheln

Alle Kacheln importiert

Drücke A, um alle Kacheln auszuwählen, dann Ctrl + J, um sie zu einem Mesh zusammenzuführen. Bei einer großen Szene dauert das etwa eine Minute, lass es durchlaufen.

Zusammengeführtes Mesh

Ein einzelnes zusammengeführtes Mesh

Hinweis: Wenn nicht die ganze Szene neu beleuchtet werden muss, lösche die nicht benötigten Teile. Das bringt Performance in Unreal Engine.

Schritt 3: Draw Calls senken

Sobald dieses Mesh zur Neubeleuchtung in Unreal Engine landet, sind keine seiner Materialien mehr nötig. Das 3DGS liefert das Bild, das Proxy Mesh dient nur der Berechnung, die Materialien haben keinen Nutzen und kosten Ressourcen.

Jede Textur in einem LixelStudio-Mesh ist in Unreal Engine ein Draw Call. In größerem Maßstab summiert sich das zu sehr vielen Draw Calls, und das Mesh direkt als Proxy zu nutzen ruckelt.

Wähle das Mesh in der Collection aus und prüfe die Anzahl der Draw Calls über die Python-Konsole von Blender.

Python-Konsole in Blender

Zur Python-Konsole wechseln

Füge den folgenden Befehl ein und drücke Enter:

obj = bpy.context.object
print("Material slots:", len(obj.data.materials))
Ausgabe der Materialslots

Der ausgegebene Wert ist die Anzahl der Draw Calls

Das Mesh im Screenshot hat 8859 Draw Calls.

Um das zu senken, entferne alle vorhandenen Materialien und ersetze sie durch ein einziges:

import bpy

# Get the currently selected object in Blender
obj = bpy.context.object

# Make sure a valid Mesh object is selected
if obj is None or obj.type != "MESH":
    raise Exception("Please select a Mesh object first.")

# Create a new white clay material
mat = bpy.data.materials.new("M_White_Clay")
mat.use_nodes = True

# Configure the Principled BSDF shader settings
bsdf = mat.node_tree.nodes.get("Principled BSDF")
if bsdf:
    bsdf.inputs["Base Color"].default_value = (1, 1, 1, 1)  # White color
    bsdf.inputs["Roughness"].default_value = 1.0            # Fully rough / matte surface
    bsdf.inputs["Metallic"].default_value = 0.0             # Non-metallic material
    bsdf.inputs["Alpha"].default_value = 1.0                # Fully opaque

# Remove all existing material slots from the mesh
obj.data.materials.clear()

# Add the single new white material
obj.data.materials.append(mat)

# Assign every face to material slot 0
for poly in obj.data.polygons:
    poly.material_index = 0

# Print the result for verification
print("Done")
print("Material slots:", len(obj.data.materials))
print("Used material indices:", len(set(p.material_index for p in obj.data.polygons)))
print("Estimated draw calls:", len(set(p.material_index for p in obj.data.polygons)))

Prüfe danach, dass die Anzahl der Draw Calls auf eins gesunken ist.

Draw Calls auf eins reduziert

Draw Calls auf eins reduziert

Schritt 4: In Unreal Engine importieren

Exportiere das Mesh als .obj oder .fbx und importiere es in Unreal Engine.

In Unreal Engine importiert

Das Mesh nach dem Import in Unreal Engine

Folge dann Proxy Mesh, um den ProxyMesh Actor zu platzieren und den Normalenmodus auf ProxyMesh zu setzen.

Wenn das Ergebnis nicht passt, siehe Fehlerbehebung zum Proxy Mesh.