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

    • PortalCam P1

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

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Acquisizione dei dati
      • Acquisizione di coordinate assolute
      • Appendice
  • 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 di settore
    • Impostazioni
    • Connessione del dispositivo
    • Domande Frequenti
  • 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
    • Buone Pratiche

      • Unione di più modelli 3DGS di grandi dimensioni
    • 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
    • Unity

      • Introduzione all'Unity SDK
      • Caratteristiche tecniche
      • Requisiti dell'ambiente di sviluppo
      • Guida rapida per PC
      • Guida all'ottimizzazione delle impostazioni di progetto
      • Guida allo sviluppo per Pico 4 Ultra
      • Guida allo streaming PC per Pico 4 Ultra
      • Guida allo sviluppo per Quest 3
      • Guida allo streaming PC per Quest 3
      • Guida allo sviluppo OpenXR
      • Guida allo streaming Business per Pico 4 Ultra
      • Glossario
      • FAQ
      • Contattaci
      • Guida allo sviluppo delle funzionalità

        • Guida allo sviluppo del rendering misto multi-scena
        • Guida allo sviluppo della ricezione delle ombre
        • Guida allo sviluppo dell'illuminazione in tempo reale
        • Guida allo sviluppo del rendering multi-camera
        • Guida allo sviluppo del rendering di immagini ad alta risoluzione
        • Guida allo sviluppo della compatibilità dei formati dati LCC e LCC2
        • Guida allo sviluppo dell'effetto di caricamento
        • Guida allo sviluppo del cambio di modalità di rendering Mip
        • Guida allo sviluppo dello snap a bordi e angoli
        • Guida allo sviluppo della decal proiettata
        • Guida allo sviluppo della decal proiettata video
        • Guida allo sviluppo dell'evidenziazione
        • Guida allo sviluppo del ritaglio in tempo reale
        • Guida allo sviluppo della regolazione del tono
        • Guida allo sviluppo dell'ottenimento dei dati Mesh della scena
        • Guida allo sviluppo della modalità Editor
        • Guida alla configurazione dei parametri di prestazioni di rendering
        • Guida allo sviluppo del co-impacchettamento di applicazione e dati
        • Guida allo sviluppo del sistema di collisione
        • Guida ai problemi di autorizzazione nello sviluppo su macOS
        • Guida allo sviluppo di compilazione e packaging per dispositivi iOS
      • Riferimento API

        • LCCManager
        • Renderer
        • Tipi di dati
      • Registro delle modifiche

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • 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

Guida allo sviluppo della ricezione delle ombre

L'LCC Unity SDK supporta la proiezione dinamica delle ombre dagli oggetti Mesh sulle superfici 3DGS per ottenere migliori effetti di illuminazione. Di seguito vengono descritti i passaggi completi per implementare le ombre dinamiche.

Passaggio 1: crea la scena e i GameObject

Crea una scena completamente nuova in Unity. Unity crea Camera principale e Luce direzionale per impostazione predefinita.

Configura la Camera principale

Seleziona Camera principale nella finestra Gerarchia e imposta le sue proprietà nella finestra Inspector come mostrato di seguito.

Imposta le proprietà della Camera principale

Imposta le proprietà della Camera principale

Crea LCCManager

Fai clic con il pulsante destro su un'area vuota nella finestra Gerarchia, seleziona Crea vuoto dal menu a comparsa per creare un GameObject vuoto, assegna il nome LCCManager, normalizza il suo Transform e aggiungi lo script LCCManager tramite Aggiungi componente.

Crea il GameObject LCCManager e aggiungi lo script LCCManager

Crea il GameObject LCCManager e aggiungi lo script LCCManager

Crea LCCRenderer

Fai clic con il pulsante destro su un'area vuota nella finestra Gerarchia, seleziona Crea vuoto per creare un GameObject vuoto, assegna il nome LCCRenderer e imposta il suo Transform su Rotation.x = -90 e Scale.x = -1.

Crea LCCRenderer e imposta il suo Transform

Crea LCCRenderer e imposta il suo Transform (Rotation.x = -90, Scale.x = -1)

Nota:

Le impostazioni Transform del GameObject LCCRenderer (Rotation.x = -90, Scale.x = -1) lo allineano al sistema di coordinate dei dati LCC. Per i dettagli sull'allineamento del sistema di coordinate, vedi "Sistema di coordinate dei dati LCC" in Introduzione all'Unity SDK.

Abilita le ombre della Luce direzionale

Seleziona il GameObject Luce direzionale nella finestra Gerarchia e assicurati che le ombre siano abilitate nella finestra Inspector.

Assicurati che le ombre siano abilitate sulla Luce direzionale

Assicurati che le ombre siano abilitate sulla Luce direzionale

Passaggio 2: aggiungi una Render Feature

  1. Nella barra dei menu di Unity, seleziona File → Impostazioni progetto, scegli Grafica sulla sinistra e conferma l'attuale Render Pipeline Asset predefinita. Questo esempio usa URP (Universal Render Pipeline Asset).
Conferma la Render Pipeline Asset predefinita nelle impostazioni Grafica

Conferma la Render Pipeline Asset predefinita nelle impostazioni Grafica

  1. Fai clic su quell'Asset, individua il file asset corrispondente nella finestra Progetto e trova il relativo Renderer associato (URP_Renderer.asset in questo esempio).

  2. Seleziona quel file asset del Renderer, fai clic su Aggiungi Renderer Feature nella finestra Inspector e aggiungi la Splat Shadow Mask Feature.

Aggiungi la Splat Shadow Mask Feature al Renderer URP

Aggiungi la Splat Shadow Mask Feature al Renderer URP

Passaggio 3: scrivi uno script per abilitare la ricezione delle ombre

Crea un nuovo script C# denominato LCCShadow.cs con il seguente codice:

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("Avviato ");
        m_renderer = m_manager.GetRender(this.transform);
        m_renderer.Load(m_FilePath, onProgress, onComplete);
    }

    private void onProgress(float _progress)
    {
        Debug.Log($"[LCCRenderer] avanzamento caricamento file: {_progress:P1}");
    }

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

Nota:

La ricezione delle ombre deve essere abilitata dopo il completamento del caricamento della scena LCC, quindi SetShadowReceive(true) viene chiamato nel callback onComplete.

Passaggio 4: associa lo script e imposta il percorso dati

  1. Associa lo script LCCShadow.cs al GameObject LCCRenderer nella finestra Gerarchia.
  2. Nella finestra Inspector, trascina il GameObject LCCManager sulla proprietà Manager dello script.
  3. Inserisci il percorso del file LCC nella proprietà File Path dello script.

Passaggio 5: crea un oggetto Mesh che proietta ombre

  1. Crea un oggetto Cube nella scena e assicurati che Proietta ombre = On.
  2. Sposta il Cube in una posizione adatta in modo da poter osservare l'ombra che proietta sulla superficie 3DGS.

Passaggio 6: esegui

Fai clic sul pulsante Play nella finestra Game e sposta il Cube in tempo reale per osservare l'ombra dinamica che proietta.

Il Cube che proietta un'ombra dinamica sulla superficie 3DGS dopo l'esecuzione

Il Cube che proietta un'ombra dinamica sulla superficie 3DGS dopo l'esecuzione

FAQ: disattiva la modalità compatibilità

Se la finestra Console di Unity segnala errori e non compare alcuna ombra, disattiva la modalità compatibilità: apri il pannello delle impostazioni tramite Modifica → Impostazioni progetto → Grafica, seleziona la scheda URP e non selezionare la casella dopo Render Graph → Modalità compatibilità (Render Graph disabilitato).

Non selezionare la modalità compatibilità del Render Graph

Non selezionare la modalità compatibilità del Render Graph (Render Graph disabilitato)

Passaggi chiave

I passaggi chiave per proiettare ombre dagli oggetti Mesh sulle superfici 3DGS:

  1. Assicurati che la scena abbia una Luce direzionale con le ombre abilitate.
  2. Assicurati che la scena abbia un oggetto Mesh che proietta ombre con Proietta ombre = On.
  3. Assicurati che la Splat Shadow Mask Feature sia stata aggiunta al Renderer URP.
  4. Assicurati che la ricezione delle ombre sia abilitata nel codice dopo il completamento del caricamento della scena LCC (SetShadowReceive(true)).

API relative alle ombre

L'LCC Unity SDK fornisce le seguenti tre API relative alle ombre tramite LCCManager. Devono essere tutte chiamate dopo il completamento del caricamento della scena LCC (ovvero nel callback onComplete) e SetShadowColor() / SetShadowStrength() hanno effetto solo dopo che SetShadowReceive(true) è stato abilitato.

SetShadowReceive

// Valore restituito: void
public void SetShadowReceive(bool enable)

Attiva/disattiva la ricezione delle ombre della nuvola di punti. Quando è abilitata, le ombre degli oggetti Mesh nella scena possono essere proiettate sulla superficie della nuvola di punti 3DGS.

ParametroTipoDescrizione
enableboolIndica se ricevere le ombre

Esempio di utilizzo:

m_manager.SetShadowReceive(true);

Note:

  • Disabilitata per impostazione predefinita.
  • Richiede un oggetto Mesh che proietta ombre e una Luce direzionale nella scena.
  • Quando è abilitata, viene abilitata la parola chiave shader _SPLAT_SHADOW_ON.

SetShadowColor

// Valore restituito: void
public void SetShadowColor(Color color)

Imposta il colore dell'area in ombra.

ParametroTipoDescrizione
colorColorColore dell'ombra (RGBA)

Esempio di utilizzo:

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

Note:

  • Il valore predefinito è (0.3, 0.3, 0.3, 1).
  • Richiede che SetShadowReceive(true) sia abilitato prima.

SetShadowStrength

// Valore restituito: void
public void SetShadowStrength(float strength)

Imposta l'intensità dell'ombra. 0 significa nessuna ombra e 1 significa l'ombra più forte.

ParametroTipoDescrizione
strengthfloatIntensità dell'ombra, nell'intervallo [0, 1]

Esempio di utilizzo:

m_manager.SetShadowStrength(0.8f);

Note:

  • Il valore predefinito è 1.0.
  • Intervallo [0, 1]; i valori fuori dall'intervallo vengono limitati automaticamente.
  • Richiede che SetShadowReceive(true) sia abilitato prima.