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

Renderer: istanza di rendering

Un'istanza di rendering LCC, responsabile del caricamento dei dati e del controllo del rendering di una singola scena 3DGS. Viene creata tramite LCCManager.GetRender() e non può essere istanziata direttamente.

NamespaceLCCCore

Proprietà

ProprietàTipoAccessoDescrizione
TransformTransformSola letturaIl componente Transform a cui è collegata l'istanza di rendering
IsEnableboolSola letturaIndica se l'istanza di rendering è attiva; predefinito true
IsRenderAllboolSola letturaIndica se vengono renderizzati tutti i dati LOD0 (rispetto alla modalità streaming / traversal LOD); predefinito false

Metodi

I metodi sono raggruppati per scopo:

  • Caricamento dei dati e ciclo di vita
  • Controllo a runtime e query

Caricamento dei dati e ciclo di vita

Load

public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)

Carica un file di dati 3DGS. Supporta .lcc2 (file locale o HTTP remoto) e i formati nativi .ply / .sog / .spz / .splat / .ksplat (solo file locali).

ParametroTipoDescrizione
_filePathstringPercorso del file di dati (percorso locale o URL HTTP)
_onProgressAction<float>Callback di avanzamento del caricamento, può essere null
_onCompleteActionCallback di completamento del caricamento, può essere null
_onErrorAction<string>Callback di errore di caricamento (facoltativa), con la descrizione dell'errore come parametro

Note:

  • La callback _onComplete viene attivata dopo che i dati sono effettivamente arrivati sulla GPU.
  • Operazioni come la ricezione delle ombre e l'attivazione degli effetti devono essere chiamate all'interno della callback _onComplete.
  • I formati nativi usano sempre il percorso di caricamento completo SingleRender (senza suddivisione LOD); l'avanzamento viene segnalato tramite _onProgress e gli errori tramite _onError.
  • La modalità MultiRender non consente origini dati HTTP né formati nativi.
  • HTTP supporta solo .lcc2; i formati nativi sono solo percorsi locali e solo in modalità SingleRender.
  • Prima devono essere completati SetPlatformType() / SwitchRenderPass() / SetMainCamera() e gli altri prerequisiti.
  • Devi chiamare Unload() o Dispose() prima di chiamare di nuovo Load(); chiamare Load() mentre il caricamento è in corso viene rifiutato e attiva _onError.

Esempio:

renderer.Load("D:/data/scene.lcc2",
    p => Debug.Log($"Caricamento {p:P0}"),
    () => {
        Debug.Log("Caricamento completato");
        lccManager.SetShadowReceive(true);
    });

Unload

public void Unload()

Rilascia i dati attualmente caricati e torna allo stato "creato ma non caricato", mantenendo la registrazione dell'istanza presso il manager. La stessa istanza Renderer può essere riutilizzata ripetendo il ciclo Load → Unload → Load.

Note:

  • Differenza rispetto a Dispose(): la registrazione presso il manager non viene rimossa e l'istanza può essere riutilizzata.
  • Dopo Unload(), IsEnable è false; chiamare di nuovo Load() reimposta tutto lo stato dei dati.
  • Viene eseguita solo quando il caricamento dei dati è terminato; ritorna immediatamente quando non è caricata o è già stata chiamata Dispose().

Esempio:

renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Ricaricato"));

Dispose

public void Dispose()

Distrugge l'istanza di rendering e rilascia tutte le risorse GPU e la memoria. L'istanza non può essere usata dopo la distruzione e tutti i metodi pubblici diventano automaticamente inefficaci.

Note:

  • Notifica automaticamente LCCManager per rimuovere il riferimento dopo la chiamata.

Esempio:

renderer.Dispose();
renderer = null;

Controllo a runtime e query

SetEnable

public void SetEnable(bool _enable)

Imposta lo stato di attivazione dell'istanza di rendering. Quando è disattivata, non partecipa al rendering né alla selezione LOD.

ParametroTipoDescrizione
_enableboolIndica se attivare

Note:

  • Non rilascia le risorse e può essere riattivata in qualsiasi momento.

Esempio:

renderer.SetEnable(false); // Nascondi
renderer.SetEnable(true);  // Mostra

SetAlpha

public void SetAlpha(float alpha)

Imposta l'opacità indipendente del Renderer corrente. A differenza dell'alpha globale a livello di processo di LCCManager.SetAlpha(), questa API influisce solo sul Renderer corrente. Alpha finale = copertura dello splat × alpha globale di LCCManager × alpha di questo Renderer.

ParametroTipoDescrizione
alphafloatOpacità indipendente del Renderer corrente, intervallo [0, 1], limitata automaticamente quando superata

Note:

  • Ha effetto solo sul percorso MultiRender / RenderCore (PC / Mac); su quel percorso ogni splat porta un renderID e lo shader indicizza l'array alpha per Renderer tramite renderID.
  • Il percorso FullRender / Mobile non ha renderID, quindi questa API è un no-op (il valore viene memorizzato e applicato automaticamente quando in seguito si passa al percorso RenderCore).

Esempio:

renderer.SetAlpha(0.5f);

SetRenderAll

public void SetRenderAll(bool _renderAll)

Imposta se usare la modalità di rendering completo (renderizzare completamente i dati LOD0). Ha effetto alla successiva chiamata Load() e non influisce sul dataset attualmente caricato.

ParametroTipoDescrizione
_renderAllboolIndica se renderizzare completamente

Note:

  • Supportata solo sulle piattaforme PC / Mac; nessun effetto su mobile / VR.
  • Per interrogare lo stato corrente usa la proprietà IsRenderAll.

Esempio:

renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Caricamento completo"));

SetColliderEnable

// Valore di ritorno: bool, true=impostato correttamente, false=i dati non hanno collider o l'istanza è inattiva
public bool SetColliderEnable(bool _enable)

Attiva/disattiva la funzionalità collider. Una volta attivata, IntersectsSphere() / IntersectsCapsule() e RaycastMesh() diventano disponibili.

ParametroTipoDescrizione
_enableboolIndica se attivare il collider

Note:

  • I dati devono contenere un nodo Collider, altrimenti viene restituito false.
  • Il Renderer deve essere attivo.

Esempio:

bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("I dati non contengono un collider");

SetEnvironment

public void SetEnvironment(bool _env)

Attiva/disattiva il rendering dei dati ambiente. I dati ambiente sono una nuvola di punti di sfondo a bassa precisione usata per riempire le viste distanti.

ParametroTipoDescrizione
_envboolIndica se renderizzare i dati ambiente

Note:

  • I dati devono contenere nodi ambiente.
  • I dati ambiente sono indipendenti dal sistema LOD dei dati principali.

Esempio:

renderer.SetEnvironment(true);

GetBounds

public void GetBounds(out Vector3 max, out Vector3 min)

Ottiene il box di delimitazione allineato agli assi (coordinate mondo) dei dati renderizzati.

ParametroTipoDescrizione
maxout Vector3Punto massimo del box di delimitazione (coordinate mondo)
minout Vector3Punto minimo del box di delimitazione (coordinate mondo)

Note:

  • Restituisce Vector3.zero quando i dati non sono completamente caricati.
  • Può essere usato per il posizionamento della camera e il calcolo dell'angolo di vista.

Esempio:

renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;

GetSourceType

// Valore di ritorno: SourceType
public SourceType GetSourceType()

Ottiene il tipo di origine dei dati caricati; vedi SourceType.

Note:

  • Restituisce SourceType.None quando i dati non sono caricati.

GetDataType

// Valore di ritorno: DataType
public DataType GetDataType()

Ottiene il tipo di formato dei dati caricati; vedi DataType.

Note:

  • Restituisce DataType.None quando i dati non sono caricati.

GetMeta (da percorso file)

// Valore di ritorno: bool, true=letto correttamente
public bool GetMeta(string _filePath, out SplatMeta _metaData)

Legge i metadati dei dati 3DGS dal percorso file specificato senza caricare completamente i dati.

ParametroTipoDescrizione
_filePathstringPercorso del file di dati
_metaDataout SplatMetaMetadati di output

Note:

  • Supporta percorsi locali e URL HTTP.
  • Legge solo i metadati dell'intestazione del file e non carica i dati della nuvola di punti.
  • Restituisce false quando il percorso è vuoto o il file non esiste.

Esempio:

if (renderer.GetMeta(filePath, out SplatMeta meta))
{
    Debug.Log(meta.source);
    Debug.Log(meta.dataType);
}

GetMeta (da dati caricati)

// Valore di ritorno: bool, true=letto correttamente
public bool GetMeta(out SplatMeta _metaData)

Ottiene i metadati dei dati attualmente caricati. Se il caricamento dei dati non è terminato, prova a leggere dal percorso file.

ParametroTipoDescrizione
_metaDataout SplatMetaMetadati di output

Esempio:

if (renderer.GetMeta(out SplatMeta meta))
{
    Debug.Log(meta.source);
}

GetMeshBlockInfos

// Valore di ritorno: List<LCCMeshBlockInfo>, metadati dei blocchi Mesh di collisione; null quando non c'è Mesh o non è disponibile
public List<LCCMeshBlockInfo> GetMeshBlockInfos()

Restituisce i metadati di tutti i blocchi Mesh di collisione (id, box di delimitazione mondo / locale, numero di vertici, numero di facce). Zero I/O, zero parsing: legge solo i metadati già in memoria. Vedi LCCMeshBlockInfo.

Note:

  • Solo piattaforma PC / Mac + origine dati locale; deve essere chiamata sul thread principale.
  • Uso tipico: prima usala per ottenere il box di delimitazione mondo di ogni blocco, scegli gli id necessari, poi chiama GetMeshes(ids) per leggere solo quei blocchi.
  • I formati nativi (PLY / SOG / SPZ / splat / ksplat) non hanno Mesh e restituiscono null (normale, senza log).

Esempio:

var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
    Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}

GetMeshes

// Valore di ritorno: List<LCCMeshBlock>, tutti i dati geometrici delle Mesh di collisione; null quando non disponibile
public List<LCCMeshBlock> GetMeshes()

Restituisce in modo sincrono i dati geometrici di tutti i blocchi Mesh di collisione (vertici + indici dei triangoli, in coordinate locali). È un'operazione pesante (lettura disco sincrona + parsing + allocazione), quindi chiamala una volta e memorizzala tu stesso: non chiamarla mai a ogni frame. Vedi LCCMeshBlock.

Note:

  • Solo piattaforma PC / Mac + origine dati locale; deve essere chiamata sul thread principale.
  • Per scene grandi, usa GetMeshBlockInfos() per scegliere gli id + GetMeshes(ids) per evitare di allocare una quantità enorme di memoria gestita in una sola volta.
  • Un singolo blocco può avere più di 65535 vertici, quindi bisogna impostare mesh.indexFormat = IndexFormat.UInt32 prima di costruire la Mesh.

Esempio:

var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
    // block.vertices / block.triangles sono nel sistema di coordinate locale dell'oggetto
}

GetMeshes (per id)

// Valore di ritorno: List<LCCMeshBlock>, dati geometrici delle Mesh di collisione degli id specificati; null quando non ci sono corrispondenze
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)

Restituisce in modo sincrono i dati geometrici dei blocchi Mesh di collisione (in coordinate locali) degli id specificati. Gli id sono forniti da GetMeshBlockInfos().

ParametroTipoDescrizione
_idsIEnumerable<string>L'insieme degli id dei blocchi di destinazione (forniti da GetMeshBlockInfos())

Note:

  • Gli id sconosciuti vengono saltati con un avviso; gli id duplicati vengono deduplicati (nessuna lettura disco ripetuta); l'ordine di ritorno è l'ordine di attraversamento degli id (dopo la deduplicazione).
  • Restituisce null con un avviso quando l'input è null, vuoto o senza corrispondenze.
  • Gli altri vincoli sono gli stessi di GetMeshes().

Esempio:

var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);