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

    • Descripción del producto
    • Operaciones básicas
    • Uso de la LCC Scan App
    • Mantenimiento y cuidado
    • FAQ
  • Serie Lixel K

    • Lixel K1

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Fusión de mapas
      • Recomendaciones de planificación de rutas para escenas típicas
      • Precauciones
      • FAQ
    • Lixel K2

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Fusión de mapas
      • Recomendaciones de planificación de rutas para escenas típicas
      • Precauciones
      • FAQ
  • Serie Lixel L

    • Lixel L2 Pro

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Punto de medición
      • Apéndice
      • FAQ
  • Accesorios

    • Stick Light

      • Guía de instalación
      • Operaciones básicas
      • Preguntas frecuentes
  • Lixel Studio

    • Versión y derechos de autor
    • Instalación y activación
    • Interfaz del software
    • Operaciones de archivo
    • Procesamiento de proyectos
    • Herramientas
    • Dibujo 2D
    • Aplicaciones
    • Ajustes
    • Conexión de dispositivo
  • Lixel CyberColor

    • LCC Studio

      • Primeros pasos
      • Versión y actualizaciones
      • Descarga e instalación
      • Descripción general de la interfaz y navegación
      • Antes de la reconstrucción
      • Reconstrucción de modelos
      • Reconstrucción de modelo único
      • Fusión de mapas
      • Fusión aire-tierra
      • Reconstrucción aérea
      • Mis modelos
      • Otras funciones
      • Ajustes y cuenta
      • Converter
      • Reconstrucción por vídeo
      • Preguntas frecuentes
    • LCC Scene Editor

      • Versión y actualizaciones
      • Cuenta e inicio de sesión
      • Descripción general del producto y página de inicio
      • Interfaz del editor
      • Modos de navegación
      • Archivo
      • Configuración
      • Editar
      • Ventana
      • Barra de herramientas global
      • Activos y propiedades
      • Barra de herramientas izquierda
      • Puntos de vista
      • Portal
      • Skybox
      • Anotaciones
      • Medición
      • Flythrough
      • Informe de escena
      • 3D Layout
      • Minimapa
      • Modo Vista previa (Viewer)
      • Ayuda
      • Preguntas frecuentes (FAQ)
      • Punto de inicio
    • LCC Model Editor

      • Versión y actualizaciones
      • Guía del usuario
      • Visión general e interfaz
      • Operaciones de archivo
      • Selectores
      • Edición de modelos
      • Medición
      • Corrección de color
      • Gestión de activos
      • Configuración y ayuda
      • Preguntas frecuentes
    • Capture Guide

      • Descripción general
      • Descripción general de los dispositivos de captura
      • Principios generales de captura
      • Captura de escenas interiores
      • Captura de escenas exteriores
      • Captura a gran escala (Map Fusion)
      • Captura con aerial-ground map fusion
      • Captura de objetos
      • Captura de personas
      • Captura para reconstrucción a partir de vídeo
      • HD Enhancement
      • Puntos de control (Lixel P1)
      • Preguntas frecuentes y resolución de problemas
    • Historial de versiones
  • Plugins y SDK

    • Unreal

      • Introducción
      • Inicio rápido - Windows
      • Inicio rápido - Linux
      • Inicio rápido - Quest3
      • Ediciones y licencias
      • Renderizado
      • Ajustes visuales
      • Normales e iluminación
      • Edición de escenas
      • Parámetros de rendimiento
      • Guía de rendimiento
      • Integración con plugins de terceros y del motor
      • Proxy Mesh
      • Animación de carga
      • Colisión
      • Compatibilidad con Navigation System
      • Compatibilidad con Single Layer Water
      • Localización
      • Preguntas frecuentes
      • Resolución de problemas
      • Logs y diagnóstico
      • Contacto
      • Referencia de API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actors SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ULCCUtilLibrary
        • Enumeraciones
        • Structs
      • Registro de cambios

        • 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

      • Introducción
      • Guía de optimización del rendimiento de renderizado
      • Configuración de gráficos
      • Preguntas frecuentes
      • Referencia de 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 de cambios

        • 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

Guía de optimización del rendimiento de renderizado

Esta guía ayuda a optimizar el SDK en dispositivos de diferentes niveles de rendimiento para obtener una experiencia de renderizado 3DGS (3D Gaussian Splatting) fluida.

1. Desactivar el anti-aliasing

El WebGLRenderer de Three.js no activa el anti-aliasing por defecto. Si tu proyecto tiene antialias: true activado, considera desactivarlo en escenarios sensibles al rendimiento:

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

¿Por qué desactivarlo? Cada punto Gaussiano en 3DGS es una elipse semitransparente con atenuación suave. Cuando muchas elipses se superponen, los bordes son naturalmente suaves sin necesidad de anti-aliasing por muestreo múltiple (MSAA). Desactivar MSAA reduce el número de muestras por píxel procesadas por la GPU (típicamente de 4 a 1), mejorando la tasa de fotogramas.

Usuarios de Cesium: El Viewer de Cesium no activa MSAA por defecto, por lo que no se necesitan acciones adicionales.

2. Reducir la resolución de renderizado

Al reducir la relación de píxeles del dispositivo, se puede reducir proporcionalmente el número total de píxeles que la GPU necesita procesar. Esta es la medida más efectiva para cuellos de botella en la tasa de relleno de la GPU.

Three.js:

// Dispositivo de alto rendimiento: usar relación de píxeles nativa
renderer.setPixelRatio(window.devicePixelRatio);

// Dispositivo de gama media: limitar la relación de píxeles
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));

// Dispositivo de gama baja / móvil: renderizado fijo a 1x
renderer.setPixelRatio(1.0);

Cesium:

const viewer = new Cesium.Viewer('container', {
    // Controlar la resolución de renderizado mediante resolutionScale
    resolutionScale: 1.0 // Usar 1.0 para dispositivos de gama baja; usar window.devicePixelRatio para gama alta
});

Referencia de comparación de rendimiento (basada en resolución lógica de 1080p):

Relación de píxelesPíxeles renderizados realesCoste relativo
1.01920×1080 ≈ 2,07M1×
1.52880×1620 ≈ 4,66M2,25×
2.03840×2160 ≈ 8,29M4×
3.05760×3240 ≈ 18,66M9×

Las pantallas de alta densidad de píxeles (como Retina) suelen tener un devicePixelRatio de 2 o 3. Reducirlo a 1.0 puede mejorar el rendimiento de procesamiento de fragmentos de 4 a 9 veces, a costa de una imagen más borrosa.

3. Limitar el máximo de splats renderizados — setMaxSplats

Este es el parámetro de ajuste de rendimiento más importante. Controla el límite superior de splats Gaussianos que participan en el renderizado por fotograma.

lccObj.setMaxSplats(3000000); // Máximo 3 millones de splats por fotograma

El planificador LOD del SDK recorre el índice espacial de la escena en cada fotograma, seleccionando nodos para renderizar según la distancia y el frustum de visión. Cuando el total de splats supera este límite, el planificador descarta nodos empezando por los más lejanos o de menor prioridad hasta que el total cumpla el límite.

Valores de referencia: PC: 900.000 – 10.000.000, Móvil: 500.000 – 2.600.000, según el rendimiento del dispositivo. Consulta Configuraciones recomendadas por nivel de dispositivo al final de esta página.

4. Limitar splats máximos por nodo — setMaxNodeSplats

Controla el número máximo de splats renderizados por nodo espacial. Los nodos que superen este umbral se degradan automáticamente a un nivel LOD más grueso.

lccObj.setMaxNodeSplats(1500000); // Máximo 1,5 millones de splats por nodo

¿Por qué se necesita este parámetro? En escenas grandes, las áreas densas como complejos de edificios pueden contener millones de splats Gaussianos en un solo nodo en el nivel LOD más alto. Sin este límite, al acercar la cámara, un solo nodo consumiría todo el presupuesto de renderizado sin dejar nada para otras áreas. Este parámetro hace que la distribución del presupuesto sea más equilibrada.

Valores recomendados: Típicamente 1/3 – 2/3 del valor de setMaxSplats, según la densidad de la escena y el nivel del dispositivo. Consulta Configuraciones recomendadas por nivel de dispositivo al final de esta página.

5. Limitar el LOD inicial de renderizado — setStartLod

Controla el nivel de mayor precisión. LOD 0 es el más fino; valores más altos significan menor precisión.

lccObj.setStartLod(0); // Máxima calidad (predeterminado en escritorio)
lccObj.setStartLod(1); // Omitir el nivel más fino (predeterminado en móvil)
lccObj.setStartLod(2); // Omitir los dos primeros niveles (dispositivos muy básicos)

El SDK construye datos LOD multinivel para el contenido de la escena. LOD 0 contiene datos de precisión completa, LOD 1 tiene aproximadamente la mitad de splats que LOD 0, y así sucesivamente. setStartLod limita el nivel LOD más fino que el planificador puede seleccionar: configurarlo en 1 significa que los datos LOD 0 no se cargarán aunque la cámara esté cerca de un objeto.

Impacto en el rendimiento:

ConfiguraciónCalidad cercanaReducción de splatsCaso de uso
setStartLod(0)Máxima—PC de gama alta
setStartLod(1)Media~50%PC gama media e inferior, todos los móviles
setStartLod(2)Baja~75%PC / Móvil de gama baja

6. Limitar la distancia máxima de renderizado — setMaxDistance

Controla la distancia máxima de renderizado desde la cámara, en metros. El contenido más allá de esta distancia no se descargará, descomprimirá ni renderizará.

lccObj.setMaxDistance(200); // Predeterminado en escritorio
lccObj.setMaxDistance(100); // Predeterminado en móvil

Reducir la distancia máxima disminuye el número de nodos visibles, reduciendo el coste de toda la cadena: descargas de red, ordenamiento en CPU y renderizado en GPU. Adecuado para escenarios de interior o visualización cercana.

Nota: El SDK tiene un mecanismo adaptativo de altitud integrado — cuando la cámara sube por encima de 20 metros, el límite de distancia se relaja automáticamente para permitir una vista más amplia desde perspectivas aéreas.

Valores de referencia:

PlataformaRango
PC100 – 240
Móvil80 – 110

Consulta Configuraciones recomendadas por nivel de dispositivo al final de esta página.

7. Optimización automática de LOD — setLodAutoLevelUp

Cuando está activado, el SDK mejora automáticamente la precisión de ciertos nodos cuando el presupuesto de renderizado tiene capacidad sobrante.

lccObj.setLodAutoLevelUp(true); // Activar (recomendado para dispositivos de gama media-alta)
lccObj.setLodAutoLevelUp(false); // Desactivar (recomendado para dispositivos de gama baja o tasa de fotogramas estable)

Cuando el recuento real de splats renderizados está por debajo del límite de setMaxSplats (por ejemplo, la cámara mira hacia un área abierta), el mecanismo de optimización asigna el presupuesto restante a nodos cercanos, cargando automáticamente datos LOD de mayor precisión para mejorar el detalle.

Compromiso: Activarlo mejora la calidad visual, pero puede provocar descargas y descompresiones adicionales de datos, causando fluctuaciones ocasionales en la tasa de fotogramas en dispositivos de gama baja.

8. Iluminación con armónicos esféricos — useShcoef

La iluminación con armónicos esféricos (SH) permite que los colores de los splats Gaussianos cambien según el ángulo de visión, produciendo reflejos y efectos de brillo más realistas. El SDK lo tiene desactivado por defecto.

// Verificar si los datos contienen coeficientes SH antes de activar
if (lccObj.hasShcoef()) {
    lccObj.useShcoef(true, (percent) => {
        console.log('SH loading: ' + (percent * 100).toFixed(1) + '%');
    });
}

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

Efecto al activar:

  • Los reflejos y el brillo de las superficies cambian naturalmente con el ángulo de visión
  • Mejora significativa en la calidad del renderizado, especialmente en materiales como metal, vidrio y superficies lacadas

Coste de rendimiento:

  • Mayor uso de memoria GPU para almacenar coeficientes SH RGB adicionales
  • Mayor carga computacional del vertex shader de la GPU para evaluar 15 funciones base SH adicionales
  • Para el formato LCC, se necesita descargar archivos de datos SH adicionales

Recomendación: Activar solo en dispositivos de escritorio de gama alta. No recomendado para móviles.

9. Otras opciones de optimización

Caché local (IndexedDB)

Activa la caché de datos local mediante useIndexDB: true (activado por defecto). En visitas posteriores a la misma escena, los datos se cargan directamente del almacenamiento local, reduciendo significativamente los tiempos de carga.

Transición suave de LOD

LCC2 soporta transiciones suaves de LOD (activado por defecto), reduciendo el efecto visual de "popping" al cambiar de LOD:

lccObj.setSmooth(true); // Activar (predeterminado)
lccObj.setSmooth(false); // Desactivar

Esta función restringe las diferencias de LOD entre nodos espaciales adyacentes, eliminando discontinuidades de precisión. La carga en CPU es mínima y se recomienda mantenerlo activado.


Configuraciones recomendadas por nivel de dispositivo

PC

NivelsplatCountnodeSplatCountdistancestartLoddevicePixelRatio
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

Móvil

NivelsplatCountnodeSplatCountdistancestartLoddevicePixelRatio
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
Anterior
Introducción
Siguiente
Configuración de gráficos