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

    • Panoramica del prodotto
    • Operazioni di base
    • Uso della LCC Scan App
    • Manutenzione e cura
    • FAQ
  • Serie Lixel K

    • Lixel K1

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Fusione delle mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
    • Lixel K2

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione
      • Flusso di scansione
      • Acquisire una nuvola di punti con coordinate assolute
      • Fusione mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
  • Serie Lixel L

    • Lixel L2 Pro

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Punto di misura
      • Appendice
      • FAQ
  • Accessori

    • Stick Light

      • Guida all'installazione
      • Operazioni di base
      • Domande frequenti
  • Lixel Studio

    • Versione e copyright
    • Installazione e attivazione
    • Interfaccia del software
    • Operazioni sui file
    • Elaborazione del progetto
    • Strumenti
    • Disegno 2D
    • Applicazioni
    • Impostazioni
    • Connessione del dispositivo
  • Lixel CyberColor

    • LCC Studio

      • Introduzione
      • Versione e aggiornamenti
      • Download e installazione
      • Panoramica dell'interfaccia e navigazione
      • Operazioni preliminari alla ricostruzione
      • Prima della ricostruzione
      • Ricostruzione del modello
      • Ricostruzione modello singolo
      • Fusione delle mappe
      • Fusione aria-terra
      • Ricostruzione aerea
      • I miei modelli
      • Altre funzioni
      • Impostazioni e account
      • Convertitore
      • Ricostruzione video
      • Domande Frequenti / FAQ
    • LCC Scene Editor

      • Versione e aggiornamenti
      • Account e accesso
      • Panoramica del prodotto e home page
      • Interfaccia dell'editor
      • Modalità di navigazione
      • File
      • Impostazioni
      • Modifica
      • Finestra
      • Barra degli strumenti globale
      • Asset e proprietà
      • Barra degli strumenti sinistra
      • Punti di vista
      • Portale
      • Skybox
      • Annotazioni
      • Misurazione
      • Flythrough
      • Rapporto scena
      • 3D Layout
      • Mini-mappa
      • Modalità Anteprima (Viewer)
      • Aiuto
      • Domande frequenti (FAQ)
      • Punto di spawn
    • LCC Model Editor

      • Versione e aggiornamenti
      • Guida utente
      • Panoramica e interfaccia
      • Operazioni sui file
      • Selettori
      • Modifica dei modelli
      • Misurazione
      • Correzione colore
      • Gestione degli asset
      • Impostazioni e Aiuto
      • Domande frequenti
    • Capture Guide

      • Panoramica
      • Panoramica dei dispositivi di acquisizione
      • Principi generali di acquisizione
      • Acquisizione di scene interne
      • Acquisizione di scene esterne
      • Acquisizione su larga scala (map fusion)
      • Acquisizione per aerial-ground map fusion
      • Acquisizione di oggetti
      • Acquisizione di persone
      • Acquisizione per ricostruzione da video
      • HD Enhancement
      • Control points (Lixel P1)
      • FAQ e risoluzione dei problemi
    • Cronologia versioni
  • Plugin e SDK

    • Unreal

      • Introduzione
      • Avvio rapido - Windows
      • Avvio rapido - Linux
      • Avvio rapido - Quest3
      • Edizioni e licenze
      • Rendering
      • Rasterizzazione Tiled (sperimentale)
      • Impostazioni visive
      • Normali e illuminazione
      • Modifica della scena
      • Parametri di prestazione
      • Guida alle prestazioni
      • Integrazione con plugin di terze parti e del motore
      • Proxy Mesh
      • Animazione di caricamento
      • Collisioni
      • Supporto del Navigation System
      • Supporto di Single Layer Water
      • Localizzazione
      • FAQ
      • Risoluzione dei problemi
      • Log e diagnostica
      • Contattaci
      • Buone pratiche

        • Rilluminare il 3DGS con una mesh di LixelStudio
      • Riferimento API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enum
        • Struct
      • Registro delle modifiche

        • 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

      • Introduzione
      • Guida all'ottimizzazione delle prestazioni di rendering
      • Configurazione grafica
      • Domande frequenti
      • Riferimento API

        • 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
      • Registro delle modifiche

        • 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

Rilluminare il 3DGS con una mesh di LixelStudio

Il plugin supporta la rilluminazione ibrida: abbina il 3DGS a una mesh della stessa scala così che il 3DGS ottenga una risposta alla luce vicina a quella di una mesh e possa produrre ombre proprie.

Il risultato dipende dalla precisione geometrica della mesh posta sotto il 3DGS. Più mesh e 3DGS combaciano, più convincenti risultano risposta alla luce e ombre.

Per il meccanismo e i parametri vedi Mesh proxy. Per la scelta tra le modalità di normali vedi Normali e illuminazione.

Quale mesh usare

LCC Studio e LixelStudio generano entrambe delle mesh, ma con scopi diversi.

Mesh di LCC StudioMesh di LixelStudio
Precisione della superficiePiù grezzaPiù fedele alla forma reale
Dimensione del filePiccolaGrande
Adatta aRilevamento delle collisioniRilluminazione

Per le collisioni basta la mesh di LCC Studio, vedi Collisioni. Per la rilluminazione usa la mesh di LixelStudio.

Mesh di LCC Studio:

Mesh di LCC Studio, vista d'insieme
Mesh di LCC Studio, dettaglio

Mesh di LixelStudio:

Mesh di LixelStudio, vista d'insieme
Mesh di LixelStudio, dettaglio

Passaggio 1: raccogliere i modelli a tasselli in una cartella

LixelStudio esporta le mesh a tasselli. Con una scena grande ti ritrovi molte cartelle, ognuna con un file .obj e le sue texture. Vanno unite in una sola mesh prima dell'importazione, altrimenti ottieni molti .obj separati.

I passaggi seguenti usano Blender; qualsiasi strumento 3D funziona allo stesso modo. Scarica Blender dal sito ufficiale.

Blender non accetta un gruppo di cartelle trascinate in una volta, quindi i file .obj sparsi nelle sottocartelle vanno portati prima allo stesso livello. Trascinare decine di cartelle a mano non è pratico, meglio un singolo comando PowerShell.

Apri la cartella radice che contiene tutte le sottocartelle, digita powershell nella barra degli indirizzi e premi Enter. Il terminale si apre nella directory corrente.

Digitare powershell nella barra degli indirizzi

Digita powershell nella barra degli indirizzi di Esplora file

Copia e incolla questo comando:

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

Nota: il comando sposta ogni file dalle sottocartelle nella directory corrente, quindi verifica di essere nella cartella giusta prima di eseguirlo. Per esempio, se la cartella A contiene B e C, apri PowerShell dalla barra degli indirizzi di A; al termine tutti i file di B e C si trovano in A.

Sottocartelle prima dell'esecuzione

Struttura delle cartelle prima dell'esecuzione

Incollare il comando

Incolla il comando ed eseguilo

Premi Enter dopo averlo incollato. Richiede alcuni secondi. Un nuovo prompt indica che il comando è terminato.

Ora tutto è stato estratto. Apri qualche sottocartella per verificare che sia vuota.

Elenco dei file dopo l'estrazione

Tutti i file .obj e le texture si trovano ora allo stesso livello

Passaggio 2: unire in un solo file in Blender

Premi Ctrl + A per selezionare tutti i file e trascinali in Blender.

Selezionare tutti i file

Seleziona tutti i file

Trascinare in Blender

Trascina in Blender

Fai clic su Import Wavefront OBJ. Per avere l'orientamento corretto imposta Up Axis su Z e Forward Axis su X.

Impostazioni di orientamento all'importazione

Imposta Up Axis su Z e Forward Axis su X

Ora tutti i tasselli sono importati.

Tasselli importati

Tutti i tasselli importati

Premi A per selezionare tutti i tasselli, poi Ctrl + J per unirli in una sola mesh. Con una scena grande può richiedere circa un minuto, lascia che finisca.

Mesh unita

Una singola mesh unita

Nota: se non serve rilluminare tutta la scena, elimina le parti che non ti servono per guadagnare prestazioni in Unreal Engine.

Passaggio 3: ridurre le draw call

Quando questa mesh entra in Unreal Engine per la rilluminazione, nessuno dei suoi materiali serve. Il 3DGS gestisce ciò che si vede e la mesh proxy alimenta solo il calcolo, quindi i materiali non hanno alcuna utilità e consumano risorse.

Ogni texture di una mesh di LixelStudio corrisponde a una draw call in Unreal Engine. Su larga scala si arriva a un numero molto alto di draw call, e usare la mesh direttamente come proxy causa rallentamenti.

Seleziona la mesh nella Collection e controlla il numero di draw call dalla console Python di Blender.

Console Python di Blender

Passa alla console Python

Incolla il comando seguente e premi Enter:

obj = bpy.context.object
print("Material slots:", len(obj.data.materials))
Output del numero di slot materiale

Il valore stampato è il numero di draw call

La mesh nello screenshot ha 8859 draw call.

Per abbassarlo, rimuovi tutti i materiali esistenti e sostituiscili con uno solo:

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

Dopo l'esecuzione, verifica che il numero di draw call sia sceso a una.

Draw call ridotte a una

Draw call ridotte a una

Passaggio 4: importare in Unreal Engine

Esporta la mesh come .obj o .fbx e importala in Unreal Engine.

Importata in Unreal Engine

La mesh dopo l'importazione in Unreal Engine

Poi segui Mesh proxy per posizionare il ProxyMesh Actor e impostare la modalità di normali su ProxyMesh.

Se il risultato non è quello atteso, vedi Risoluzione dei problemi della mesh proxy.