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 compatibilità dei formati dati LCC e LCC2

Il formato dati LCC2 offre una migliore compressione dei dati e meccanismi LOD. Il formato LCC originale verrà gradualmente sostituito da LCC2, e l'LCC SDK originale (v1.x) cesserà gradualmente di essere mantenuto. Poiché i formati dati vecchio e nuovo differiscono notevolmente, il nuovo LCC SDK (v2.x) non è retrocompatibile con il formato LCC. La compatibilità dei dati può essere ottenuta nei due modi seguenti:

  1. Usa il convertitore ufficiale (LccConverter) exe/dll per convertire il formato dati LCC in LCC2 e poi usalo nell'SDK;
  2. Implementa la compatibilità dei formati dati LCC e LCC2 a livello di applicazione.

Questa guida descrive principalmente il flusso e i passaggi per implementare la compatibilità dei formati dati a livello di applicazione, ovvero importare due versioni dell'SDK nello stesso progetto Unity contemporaneamente e selezionare automaticamente la versione corrispondente per il rendering e l'elaborazione in base al formato dati.

Passaggio 1: versione Unity e impostazioni del progetto

La versione Unity e le impostazioni del progetto sono le stesse di quando si usa l'SDK in modo indipendente; non è richiesta alcuna configurazione aggiuntiva. Vedi Guida rapida per PC e Guida all'ottimizzazione delle impostazioni di progetto.

Passaggio 2: importa le due versioni dell'SDK

Importa SDK v1.4.8 o successivo (si consiglia v1.4.32) e SDK v2.0.1 o successivo tramite Unity UPM. Dopo l'importazione, la versione v1.x verrà visualizzata come Legacy. Le due versioni dell'SDK possono coesistere senza influenzarsi a vicenda.

Nota:

  • L'SDK v1.4.32 può essere scaricato da GitHub: https://github.com/xgrids/LCC-Unity-SDK/releases
  • Il namespace dell'SDK v1.4.32 è LCCCore_Legacy e il suo componente manager è LCCManager_Legacy; il namespace di v2.x è LCCCore e il suo componente manager è LCCManager.

Passaggio 3: configura la scena

Crea un oggetto vuoto nella scena denominato LCCController e associa sia il componente LCCManager_Legacy sia il componente LCCManager a tale oggetto.

Associa i componenti LCCManager_Legacy e LCCManager all'oggetto LCCController

Associa sia il componente LCCManager_Legacy sia il componente LCCManager all'oggetto LCCController

Nota:

Le impostazioni Transform del GameObject LCCController (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.

Passaggio 4: scrivi lo script MultiSDKController

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

using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // per l'LCC SDK v1.4.8 e precedenti
    public LCCManager m_manager;                       // per l'LCC SDK v2.0.0 e successivi
    public string m_FilePath;                          // percorso del file LCC
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // per l'LCC SDK v1.4.8 e precedenti
    private LCCCore.Renderer m_renderer;               // per l'LCC SDK v2.0.0 e successivi
    private DataType m_dataType;                       // tipo di dati, usato per determinare quale SDK usare

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // disabilita il manager v2.0.0+
            m_dataType = DataType.LCC;
            m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
            m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
        }
        else if (extension == ".lcc2")
        {
            m_managerLegacy.Enable = false; // disabilita il manager v1.4.8 e precedenti
            m_dataType = DataType.LCC2;
            m_renderer = m_manager.GetRender(this.transform);
            m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
        }
    }

    private void onLoadCallback()
    {
        Debug.Log("dati caricati !!!");
    }

    // Esempio di chiamata di metodo: determina su quale renderer dell'SDK operare in base al tipo di dati
    public void onRenderPointClick()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
        else if (m_dataType == DataType.LCC2)
            m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
    }

    void OnDestroy()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy?.Dispose();
        else if (m_dataType == DataType.LCC2)
            m_renderer?.Dispose();
    }

    public enum DataType { LCC, LCC2 }
}

Nota:

  • Il nome del file dello script deve corrispondere al nome della classe (MultiSDKController.cs corrisponde a class MultiSDKController), altrimenti non può essere associato a un GameObject.
  • Le due versioni hanno namespace diversi (LCCCore e LCCCore_Legacy). Quando usi tipi con lo stesso nome come Renderer, PlatformType e RenderMode, devi anteporre il namespace per distinguerli.
  • L'esempio determina il formato dati in base all'estensione del file (.lcc / .lcc2) e seleziona la versione dell'SDK corrispondente.

Passaggio 5: associa lo script e imposta le proprietà

  1. Associa anche lo script MultiSDKController.cs all'oggetto LCCController nella scena.
  2. Nella finestra Inspector, trascina i componenti LCCManager e LCCManager_Legacy sulle proprietà corrispondenti dello script.
  3. Inserisci il percorso del file LCC / LCC2 nella proprietà File Path dello script.
Associa lo script MultiSDKController e imposta le sue proprietà

Associa lo script MultiSDKController e imposta le sue proprietà nell'Inspector

Ora, quando esegui il codice, la versione dell'SDK corrispondente viene usata automaticamente per il rendering in base al formato dati LCC, ottenendo la compatibilità dei formati dati.

Punti chiave

I passaggi chiave per implementare la compatibilità dei formati dati LCC e LCC2 a livello di applicazione:

  1. Importa entrambe le versioni dell'SDK v1.x (Legacy) e v2.x tramite UPM; le due possono coesistere.
  2. Associa entrambi i componenti manager LCCManager_Legacy e LCCManager allo stesso oggetto.
  3. Seleziona il manager della versione corrispondente per creare un renderer e caricare i dati in base al formato dati (estensione del file .lcc / .lcc2).
  4. Dopo aver determinato quale versione usare, disabilita il manager dell'altra versione (Manager.Enable = false).
  5. Quando cambi i dati o distruggi, scarica i dati attualmente renderizzati tramite Renderer.Dispose().

Note sulla compatibilità dei formati dati

  • Il rendering simultaneo di LCC e LCC2 non è supportato. Pertanto, quando cambi i dati, devi prima scaricare i dati attualmente renderizzati (chiama Renderer.Dispose()), altrimenti potrebbero verificarsi perdite di memoria e memoria video.

  • Disabilita il Manager inutilizzato. Dopo aver determinato quale versione dell'SDK usare, è meglio disabilitare l'oggetto Manager dell'altra versione dell'SDK (Manager.Enable = false), altrimenti potrebbe causare un overhead di prestazioni inefficace.

  • Le interfacce API sono coerenti, ma devi chiamare il Renderer corretto. Le interfacce API delle due versioni dell'SDK sono esattamente le stesse (in v2.x molte API sono state spostate nella classe Manager; vedi il manuale API), ma devi assicurarti di chiamare il Renderer della versione corretta (m_rendererLegacy o m_renderer). Inoltre, v2.0.0 e successivi non supportano più il salvataggio dei dati di regolazione del colore e di ritaglio, e anche alcune altre API sono deprecate; consulta la documentazione per sviluppatori della versione corrispondente.

API correlate

Questa soluzione coinvolge principalmente le API del manager e del renderer delle due versioni dell'SDK. Di seguito viene usata come esempio v2.x (LCCCore); v1.x (LCCCore_Legacy) ha la stessa interfaccia con solo un namespace diverso.

LCCManager.Enable

// Proprietà
public bool Enable { get; set; }

Interruttore di abilitazione del manager. Impostandolo su false si disabilita il manager di quella versione dell'SDK, evitando l'overhead di prestazioni inefficace derivante dal funzionamento simultaneo con l'altra versione.

Esempio di utilizzo:

// Quando usi dati LCC2, disabilita il manager Legacy
m_managerLegacy.Enable = false;

Note:

  • Dopo aver determinato quale versione usare, si consiglia di disabilitare il manager dell'altra versione.

GetRender

// Valore restituito: Renderer → istanza di rendering, null in caso di errore
public Renderer GetRender(Transform _transform)

Crea un'istanza di rendering e la associa al Transform specificato.

ParametroTipoDescrizione
_transformTransformIl Transform a cui è collegata l'istanza di rendering

Esempio di utilizzo:

m_renderer = m_manager.GetRender(this.transform);

Note:

  • Deve essere creata tramite il manager della versione corrispondente per garantire che il renderer corrisponda al formato dati.

Renderer.Dispose

// Valore restituito: void
public void Dispose()

Distrugge l'istanza di rendering e libera tutte le risorse GPU e la memoria. L'istanza non può essere usata nuovamente dopo la distruzione.

Esempio di utilizzo:

m_renderer?.Dispose();

Note:

  • Prima di cambiare i dati, devi prima scaricare i dati attuali, altrimenti potrebbero verificarsi perdite di memoria e memoria video.
  • Dopo la chiamata, notifica automaticamente al Manager di rimuovere il riferimento.
  • Si consiglia di chiamarlo quando l'oggetto viene distrutto (OnDestroy).