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

    • PortalCam P1

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

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Apéndice
  • 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
    • Preguntas Frecuentes
  • 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
    • Buenas Prácticas

      • Fusión de varios modelos 3DGS de gran tamaño
    • 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
      • Rasterización Tiled (experimental)
      • 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
      • Buenas prácticas

        • Reiluminar 3DGS con una malla de LixelStudio
      • Referencia de API

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

        • 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

      • Introducción al SDK de Unity
      • Funciones técnicas
      • Requisitos del entorno de desarrollo
      • Guía de inicio rápido para PC
      • Guía de optimización de ajustes del proyecto
      • Guía de desarrollo para Pico 4 Ultra
      • Guía de streaming desde PC para Pico 4 Ultra
      • Guía de desarrollo para Quest 3
      • Guía de streaming desde PC para Quest 3
      • Guía de desarrollo con OpenXR
      • Guía de Business Streaming para Pico 4 Ultra
      • Glosario
      • Preguntas frecuentes
      • Contáctanos
      • Guía de desarrollo de funciones

        • Guía de desarrollo de renderizado mixto de varias escenas
        • Guía de desarrollo de recepción de sombras
        • Guía de desarrollo de iluminación en tiempo real
        • Guía de desarrollo de renderizado multicámara
        • Guía de desarrollo de renderizado de imágenes de alta resolución
        • Guía de desarrollo de compatibilidad de formatos de datos LCC y LCC2
        • Guía de desarrollo del efecto de carga
        • Guía de desarrollo de cambio de modo de renderizado Mip
        • Guía de desarrollo de ajuste a bordes y esquinas
        • Guía de desarrollo de decal proyectado
        • Guía de desarrollo de decal proyectado de vídeo
        • Guía de desarrollo de resaltado
        • Guía de desarrollo de recorte en tiempo real
        • Guía de desarrollo de ajuste de color
        • Guía de desarrollo para obtener los datos de malla de la escena
        • Guía de desarrollo del modo Editor
        • Guía de configuración de parámetros de rendimiento de renderizado
        • Guía de desarrollo de co-empaquetado de aplicación y datos
        • Guía de desarrollo del sistema de colisiones
        • Guía de problemas de permisos de desarrollo en macOS
        • Guía de desarrollo de compilación y empaquetado para dispositivos iOS
      • Referencia de API

        • LCCManager
        • Renderer
        • Tipos de datos
      • Registro de cambios

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • 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 desarrollo de compatibilidad de formatos de datos LCC y LCC2

El formato de datos LCC2 proporciona una mejor compresión de datos y mejores mecanismos de LOD. El formato LCC original será reemplazado gradualmente por LCC2, y el LCC SDK original (v1.x) dejará de recibir mantenimiento gradualmente. Debido a que los formatos de datos antiguo y nuevo difieren mucho, el nuevo LCC SDK (v2.x) no es retrocompatible con el formato LCC. La compatibilidad de datos puede lograrse de las dos formas siguientes:

  1. Usa el conversor oficial (LccConverter) exe/dll para convertir el formato de datos LCC a LCC2 y, a continuación, úsalo en el SDK;
  2. Implementa la compatibilidad de formatos de datos LCC y LCC2 a nivel de aplicación.

Esta guía describe principalmente el flujo y los pasos de implementar la compatibilidad de formatos de datos a nivel de aplicación, es decir, importar dos versiones del SDK en el mismo proyecto de Unity al mismo tiempo y seleccionar automáticamente la versión correspondiente para renderizar y procesar según el formato de datos.

Paso 1: Versión de Unity y ajustes del proyecto

La versión de Unity y los ajustes del proyecto son los mismos que al usar el SDK de forma independiente; no se requiere configuración adicional. Consulta Guía de inicio rápido para PC y Guía de optimización de ajustes del proyecto.

Paso 2: Importar las dos versiones del SDK

Importa SDK v1.4.8 y posterior (se recomienda v1.4.32) y SDK v2.0.1 y posterior a través de Unity UPM. Después de importar, la versión v1.x se mostrará como Legacy. Las dos versiones del SDK pueden coexistir sin afectarse mutuamente.

Nota:

  • El SDK v1.4.32 puede descargarse desde GitHub: https://github.com/xgrids/LCC-Unity-SDK/releases
  • El namespace del SDK v1.4.32 es LCCCore_Legacy y su componente manager es LCCManager_Legacy; el namespace de v2.x es LCCCore y su componente manager es LCCManager.

Paso 3: Configurar la escena

Crea un objeto vacío en la escena llamado LCCController y adjunta tanto el componente LCCManager_Legacy como el componente LCCManager a él.

Adjuntar los componentes LCCManager_Legacy y LCCManager al objeto LCCController

Adjuntar los componentes LCCManager_Legacy y LCCManager al objeto LCCController

Nota:

Los ajustes de Transform del GameObject LCCController (Rotation.x = -90, Scale.x = -1) lo alinean con el sistema de coordenadas de los datos LCC. Para más detalles sobre la alineación del sistema de coordenadas, consulta "Sistema de coordenadas de los datos LCC" en Introducción al SDK de Unity.

Paso 4: Escribir el script MultiSDKController

Crea un nuevo script C# llamado MultiSDKController.cs con el siguiente código:

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

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // para LCC SDK v1.4.8 y anteriores
    public LCCManager m_manager;                       // para LCC SDK v2.0.0 y posteriores
    public string m_FilePath;                          // ruta del archivo LCC
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // para LCC SDK v1.4.8 y anteriores
    private LCCCore.Renderer m_renderer;               // para LCC SDK v2.0.0 y posteriores
    private DataType m_dataType;                       // tipo de dato, usado para determinar qué SDK usar

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // desactiva el 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; // desactiva el manager v1.4.8 y anteriores
            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("datos cargados !!!");
    }

    // Ejemplo de llamada a método: determina qué renderer del SDK operar según el tipo de dato
    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:

  • El nombre del archivo de script debe coincidir con el nombre de la clase (MultiSDKController.cs corresponde a class MultiSDKController), de lo contrario no puede adjuntarse a un GameObject.
  • Las dos versiones tienen namespaces diferentes (LCCCore y LCCCore_Legacy). Al usar tipos con el mismo nombre como Renderer, PlatformType y RenderMode, debes anteponer el namespace para distinguirlos.
  • El ejemplo determina el formato de datos por la extensión del archivo (.lcc / .lcc2) y selecciona la versión del SDK correspondiente.

Paso 5: Adjuntar el script y establecer propiedades

  1. Adjunta también el script MultiSDKController.cs al objeto LCCController en la escena.
  2. En la ventana Inspector, arrastra los componentes LCCManager y LCCManager_Legacy a las propiedades correspondientes del script.
  3. Rellena la ruta del archivo LCC / LCC2 en la propiedad File Path del script.
Adjuntar el script MultiSDKController y establecer sus propiedades

Adjuntar el script MultiSDKController y establecer sus propiedades en el Inspector

Ahora, al ejecutar el código, se usa automáticamente la versión del SDK correspondiente para el renderizado según el formato de datos LCC, logrando la compatibilidad de formatos de datos.

Pasos clave

Los pasos clave para implementar la compatibilidad de formatos de datos LCC y LCC2 a nivel de aplicación:

  1. Importa tanto la versión v1.x (Legacy) como la v2.x del SDK mediante UPM; las dos pueden coexistir.
  2. Adjunta los componentes manager LCCManager_Legacy y LCCManager al mismo objeto.
  3. Selecciona el manager de la versión correspondiente para crear un renderer y cargar datos según el formato de datos (extensión del archivo .lcc / .lcc2).
  4. Después de determinar qué versión usar, desactiva el manager de la otra versión (Manager.Enable = false).
  5. Al cambiar de datos o al destruir, descarga los datos renderizados actualmente mediante Renderer.Dispose().

Notas de la compatibilidad de formatos de datos

  • No se admite el renderizado simultáneo de LCC y LCC2. Por lo tanto, al cambiar de datos, debes descargar primero los datos renderizados actualmente (llama a Renderer.Dispose()), de lo contrario puede provocar fugas de memoria y memoria de vídeo.

  • Desactiva el Manager no utilizado. Después de determinar qué versión del SDK usar, es mejor desactivar el objeto Manager de la otra versión del SDK (Manager.Enable = false), de lo contrario puede provocar cierto coste de rendimiento ineficaz.

  • Las interfaces API son consistentes, pero debes llamar al Renderer correcto. Las interfaces API de las dos versiones del SDK son exactamente las mismas (en v2.x muchas API se han movido a la clase Manager; consulta el manual de API), pero debes asegurarte de llamar al Renderer de la versión correcta (m_rendererLegacy o m_renderer). Además, v2.0.0 y posteriores ya no admiten el guardado de datos de ajuste de color y recorte, y algunas otras API también están obsoletas; consulta la documentación para desarrolladores de la versión correspondiente.

API relacionadas

Esta solución implica principalmente las API de manager y renderer de las dos versiones del SDK. A continuación se usa v2.x (LCCCore) como ejemplo; v1.x (LCCCore_Legacy) tiene la misma interfaz con solo un namespace diferente.

LCCManager.Enable

// Propiedad
public bool Enable { get; set; }

El interruptor de activación del manager. Establecerlo como false desactiva el manager de esa versión del SDK, evitando el coste de rendimiento ineficaz de trabajar simultáneamente con la otra versión.

Ejemplo de uso:

// Al usar datos LCC2, desactiva el manager Legacy
m_managerLegacy.Enable = false;

Notas:

  • Después de determinar qué versión usar, se recomienda desactivar el manager de la otra versión.

GetRender

// Valor de retorno: Renderer → instancia de renderizado, null en caso de error
public Renderer GetRender(Transform _transform)

Crea una instancia de renderizado y la vincula al Transform especificado.

ParámetroTipoDescripción
_transformTransformEl Transform al que se adjunta la instancia de renderizado

Ejemplo de uso:

m_renderer = m_manager.GetRender(this.transform);

Notas:

  • Debe crearse a través del manager de la versión correspondiente para asegurar que el renderer coincide con el formato de datos.

Renderer.Dispose

// Valor de retorno: void
public void Dispose()

Destruye la instancia de renderizado y libera todos los recursos de GPU y la memoria. La instancia no puede volver a usarse después de la destrucción.

Ejemplo de uso:

m_renderer?.Dispose();

Notas:

  • Antes de cambiar de datos, debes descargar primero los datos actuales, de lo contrario puede provocar fugas de memoria y memoria de vídeo.
  • Después de llamarla, notifica automáticamente al Manager para eliminar la referencia.
  • Se recomienda llamarla cuando el objeto se destruye (OnDestroy).