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

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

        • 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

Guida all'ottimizzazione delle prestazioni di rendering

Questa guida aiuta a ottimizzare l'SDK su dispositivi di diversi livelli di prestazioni per un'esperienza di rendering 3DGS (3D Gaussian Splatting) fluida.

1. Disattivare l'anti-aliasing

Il WebGLRenderer di Three.js non attiva l'anti-aliasing per impostazione predefinita. Se il progetto ha antialias: true attivato, considera di disattivarlo in scenari critici per le prestazioni:

const renderer = new THREE.WebGLRenderer({ antialias: false });

Perché disattivarlo? Ogni punto gaussiano in 3DGS è un'ellisse semitrasparente con attenuazione graduale. Quando molte ellissi si sovrappongono, i bordi sono naturalmente lisci senza necessità di anti-aliasing multisample (MSAA). Disattivare l'MSAA riduce il numero di campionamenti per pixel elaborati dalla GPU (tipicamente da 4 a 1), migliorando il frame rate.

Utenti Cesium: Il Viewer di Cesium non attiva l'MSAA per impostazione predefinita, quindi non sono necessarie azioni aggiuntive.

2. Ridurre la risoluzione di rendering

Riducendo il rapporto pixel del dispositivo, è possibile ridurre proporzionalmente il numero totale di pixel che la GPU deve elaborare. Questa è la misura più efficace per i colli di bottiglia nel fill rate della GPU.

Three.js:

// Dispositivo ad alte prestazioni: usa il rapporto pixel nativo
renderer.setPixelRatio(window.devicePixelRatio);

// Dispositivo di fascia media: limita il rapporto pixel
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));

// Dispositivo di fascia bassa / mobile: rendering fisso a 1x
renderer.setPixelRatio(1.0);

Cesium:

const viewer = new Cesium.Viewer('container', {
    // Controlla la risoluzione di rendering tramite resolutionScale
    resolutionScale: 1.0 // Usa 1.0 per dispositivi di fascia bassa; usa window.devicePixelRatio per fascia alta
});

Confronto prestazioni (basato su risoluzione logica 1080p):

Rapporto pixelPixel effettivamente renderizzatiCosto relativo
1.01920×1080 ≈ 2,07M1×
1.52880×1620 ≈ 4,66M2,25×
2.03840×2160 ≈ 8,29M4×
3.05760×3240 ≈ 18,66M9×

Gli schermi ad alta densità di pixel (come Retina) hanno tipicamente un devicePixelRatio di 2 o 3. Ridurlo a 1.0 può migliorare le prestazioni di elaborazione dei frammenti da 4 a 9 volte, a scapito di un rendering più sfocato.

3. Limitare il numero massimo di splat renderizzati — setMaxSplats

Questo è il parametro di ottimizzazione delle prestazioni più importante. Controlla il limite superiore di splat gaussiani che partecipano al rendering per frame.

lccObj.setMaxSplats(3000000); // Massimo 3 milioni di splat per frame

Lo scheduler LOD dell'SDK attraversa l'indice spaziale della scena ad ogni frame, selezionando i nodi per il rendering in base alla distanza e al frustum di visione. Quando il numero totale di splat supera questo limite, lo scheduler scarta i nodi a partire da quelli più lontani o a bassa priorità fino a soddisfare il limite.

Valori di riferimento: PC: 900.000 – 10.000.000, Mobile: 500.000 – 2.600.000, in base alle prestazioni del dispositivo. Vedi Configurazioni consigliate per livello di dispositivo in fondo a questa pagina.

4. Limitare gli splat massimi per nodo — setMaxNodeSplats

Controlla il numero massimo di splat renderizzati per nodo spaziale. I nodi che superano questa soglia vengono automaticamente degradati a un livello LOD più grossolano.

lccObj.setMaxNodeSplats(1500000); // Massimo 1,5 milioni di splat per nodo

Perché è necessario questo parametro? Nelle scene di grandi dimensioni, le aree dense come i complessi edilizi possono contenere milioni di splat gaussiani in un singolo nodo al livello LOD più alto. Senza questo limite, avvicinando la fotocamera, un singolo nodo consumerebbe l'intero budget di rendering senza lasciare nulla per le altre aree. Questo parametro rende la distribuzione del budget più equilibrata.

Valori consigliati: Tipicamente 1/3 – 2/3 del valore di setMaxSplats, in base alla densità della scena e al livello del dispositivo. Vedi Configurazioni consigliate per livello di dispositivo in fondo a questa pagina.

5. Limitare il LOD iniziale di rendering — setStartLod

Controlla il livello di massima precisione. LOD 0 è il più dettagliato; valori più alti significano minore precisione.

lccObj.setStartLod(0); // Massima qualità (predefinito per desktop)
lccObj.setStartLod(1); // Salta il livello più dettagliato (predefinito per mobile)
lccObj.setStartLod(2); // Salta i primi due livelli (dispositivi molto deboli)

L'SDK costruisce dati LOD multilivello per il contenuto della scena. LOD 0 contiene i dati a piena precisione, LOD 1 ha circa la metà degli splat di LOD 0, e così via. setStartLod limita il livello LOD più dettagliato selezionabile dallo scheduler: impostarlo a 1 significa che i dati LOD 0 non verranno caricati anche con la fotocamera vicina all'oggetto.

Impatto sulle prestazioni:

ImpostazioneQualità ravvicinataRiduzione splatCaso d'uso
setStartLod(0)Massima—PC di fascia alta
setStartLod(1)Media~50%PC fascia media e inferiore, tutti i mobile
setStartLod(2)Bassa~75%PC / Mobile di fascia bassa

6. Limitare la distanza massima di rendering — setMaxDistance

Controlla la distanza massima di rendering dalla fotocamera, in metri. Il contenuto oltre questa distanza non verrà scaricato, decompresso o renderizzato.

lccObj.setMaxDistance(200); // Predefinito per desktop
lccObj.setMaxDistance(100); // Predefinito per mobile

Ridurre la distanza massima diminuisce il numero di nodi visibili, riducendo il costo dell'intera pipeline: download di rete, ordinamento CPU e rendering GPU. Adatto per scenari interni o di visualizzazione ravvicinata.

Nota: L'SDK dispone di un meccanismo adattivo all'altitudine integrato — quando la fotocamera sale oltre i 20 metri, il limite di distanza viene automaticamente allentato per consentire una visione più ampia dalle prospettive aeree.

Valori di riferimento:

PiattaformaIntervallo
PC100 – 240
Mobile80 – 110

Vedi Configurazioni consigliate per livello di dispositivo in fondo a questa pagina.

7. Ottimizzazione automatica LOD — setLodAutoLevelUp

Quando attivato, l'SDK migliora automaticamente la precisione di alcuni nodi quando il budget di rendering ha capacità residua.

lccObj.setLodAutoLevelUp(true); // Attiva (consigliato per dispositivi di fascia medio-alta)
lccObj.setLodAutoLevelUp(false); // Disattiva (consigliato per dispositivi di fascia bassa o frame rate stabile)

Quando il conteggio effettivo degli splat renderizzati è inferiore al limite di setMaxSplats (ad esempio, la fotocamera è rivolta verso un'area aperta), il meccanismo di ottimizzazione assegna il budget rimanente ai nodi vicini, caricando automaticamente dati LOD a maggiore precisione per migliorare i dettagli.

Compromesso: L'attivazione migliora la qualità visiva, ma può innescare download e decompressioni aggiuntive, causando occasionali fluttuazioni del frame rate sui dispositivi di fascia bassa.

8. Illuminazione con armoniche sferiche — useShcoef

L'illuminazione con armoniche sferiche (SH) consente ai colori degli splat gaussiani di cambiare in base all'angolo di visione, producendo riflessi e effetti di lucentezza più realistici. Nell'SDK è disattivata per impostazione predefinita.

// Verifica se i dati contengono coefficienti SH prima di attivare
if (lccObj.hasShcoef()) {
    lccObj.useShcoef(true, (percent) => {
        console.log('SH loading: ' + (percent * 100).toFixed(1) + '%');
    });
}

// Disattiva
lccObj.useShcoef(false, () => {});

Effetti quando attivato:

  • I riflessi e la lucentezza sulle superfici degli oggetti cambiano naturalmente con l'angolo di visione
  • Miglioramento significativo della qualità del rendering, specialmente per materiali come metallo, vetro e superfici laccate

Costo prestazionale:

  • Aumento dell'uso della memoria GPU per memorizzare coefficienti SH RGB aggiuntivi
  • Aumento del carico computazionale del vertex shader GPU per valutare 15 funzioni base SH aggiuntive
  • Per il formato LCC, è necessario scaricare file dati SH aggiuntivi

Consiglio: Attivare solo su dispositivi desktop di fascia alta. Non consigliato per dispositivi mobili.

9. Altre opzioni di ottimizzazione

Cache locale (IndexedDB)

Attiva la cache dati locale tramite useIndexDB: true (attivata per impostazione predefinita). Nelle visite successive alla stessa scena, i dati vengono caricati direttamente dall'archivio locale, riducendo significativamente i tempi di caricamento.

Transizione fluida LOD

LCC2 supporta transizioni LOD fluide (attivate per impostazione predefinita), riducendo l'effetto visivo di "popping" durante i cambi di LOD:

lccObj.setSmooth(true); // Attiva (predefinito)
lccObj.setSmooth(false); // Disattiva

Questa funzione vincola le differenze di LOD tra nodi spaziali adiacenti, eliminando le discontinuità di precisione. Il sovraccarico CPU è minimo e si consiglia di mantenerlo attivato.


Configurazioni consigliate per livello di dispositivo

PC

LivellosplatCountnodeSplatCountdistancestartLoddevicePixelRatio
High10.000.0006.000.0002400dpr nativo
MidHigh4.200.0001.500.0002201dpr nativo
Balance2.200.0001.000.0002001dpr > 1 ? 1.4 : dpr
MidLow1.800.000700.00015021
Low900.000400.0001002dpr > 1 ? 0.8 : 0.5

Mobile

LivellosplatCountnodeSplatCountdistancestartLoddevicePixelRatio
High2.600.0001.000.0001101dpr nativo
MidHigh1.800.000800.0001001dpr nativo
Balance1.000.000600.000901dpr > 1 ? 1.2 : dpr
MidLow800.000400.0008021
Low500.000300.0008020,8
Precedente
Introduzione
Successivo
Configurazione grafica