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
  • 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
        • Renderizado independiente por cámara
      • Referencia de API

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

        • v3.5.0
        • 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
      • Guía de desarrollo con WebGPU
      • Preguntas frecuentes
      • Referencia de API

        • 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::setClipPrism
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setMipFilter
        • 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
        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
      • Registro de cambios

        • v0.6.4
        • 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
  • API

    • Modelado espacial estructurado

      • Guía de acceso
      • Flujo de modelado
      • Referencia de la API
      • Credenciales temporales de carga
      • Códigos de error

ULCCComponent: Component del pipeline LCC

Component específico del pipeline LCC1, que hereda ULCCComponentBase. Además de las capacidades de la clase base, añade pruebas de rayos basadas en las posiciones de los splats y el corte de costuras.

MóduloLCC4UnrealRuntime
CabeceraLCCComponent.h
Clase padreULCCComponentBase
Contenido enALCCActor
#include "LCCComponent.h"

Obtener la instancia:

ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());

Propiedades

PropiedadTipoValor predeterminadoDescripción
bEnableSeamCuttingboolfalseActiva el corte de costuras manualmente, consultar Corte de costuras. La versión 5.0 y superiores del archivo LCC no requiere activación manual y lo activa automáticamente
LCCPerformanceFLCCRenderInfo—Parámetros de rendimiento específicos de LCC1, consultar la tabla siguiente

MetaInfo (de tipo FLCCMetaInfo) es un miembro protegido, no accesible desde fuera en el lado de C++ y solo visible para Blueprint (solo lectura en el panel Details). En C++ usar GetMetaInfo() de la clase base para leer los campos básicos.

LCCPerformance

También con la forma de una casilla más un valor, usando el valor predeterminado de la configuración del proyecto mientras la casilla está desmarcada.

CampoTipoValor predeterminadoCasillaDescripción
SortFactorfloat1bCanSetSortFactorFactor de escala de la frecuencia de ordenación, de 0.2 a 5, consultar Sort Factor
bAddExtraPreNodesbooltruebEnableExtraPreNodesAñade nodos de precarga adicionales, consultar Add Extra Preload Nodes
ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());
if (Comp)
{
    // ordenar con menos frecuencia para ahorrar rendimiento
    Comp->LCCPerformance.bCanSetSortFactor = true;
    Comp->LCCPerformance.SortFactor = 2.0f;

    // los giros de cabeza son rápidos en VR, añadir nodos de precarga
    Comp->LCCPerformance.bEnableExtraPreNodes = true;
    Comp->LCCPerformance.bAddExtraPreNodes = true;
}

Métodos

GetUseSeamCut

bool GetUseSeamCut() const;

Si el shader tiene el corte de costuras activado. Devuelve true cuando se cumple cualquiera de las dos condiciones: la versión del archivo LCC es 5.0 o superior, o bEnableSeamCutting se activó manualmente. Solo C++.

Varios viewports

Las interfaces de varios viewports (SetPlayerLoadMode, SetPlayerRenderMode, SetSceneCaptureLoadMode, SetSceneCaptureRenderMode, ModifyPlayerTransform, CancelModifyPlayerTransform) se declaran en la clase base ULCCComponentBase y las admiten tanto el pipeline LCC1 como el LCC2.

Para los casos de uso y los pasos, consultar Buenas prácticas - Renderizado independiente por cámara.

Prueba de rayos

⚠️ Este grupo de interfaces no está suficientemente probado y puede no funcionar como se espera. En producción, usar en su lugar el enfoque de «activar la colisión más las pruebas de rayos del motor»: cargar primero los datos de colisión con SetLCCCollisionEnable y probar después con interfaces del motor como LineTraceByChannel. Consultar Colisión para más detalles.

LCC1 proporciona cuatro funciones de prueba de rayos dirigidas a las posiciones de los splats. El objetivo de la prueba son los propios datos de nube de puntos y no se requiere ningún archivo de colisión.

Las cuatro funciones se dividen en dos grupos que difieren en dos dimensiones:

Un solo impactoVarios impactos
Radio predeterminado (10 cm)LineTraceSingleLineTraceMulti
Radio personalizadoLineTraceSingleWithRadiusLineTraceMultiWithRadius

Parámetros de depuración comunes a las cuatro:

ParámetroTipoDescripción
Startconst FVector&Inicio del rayo, en coordenadas de mundo
Endconst FVector&Fin del rayo, en coordenadas de mundo
bDrawDebugLineboolSi se dibuja la línea de depuración
DurationfloatDuración de la línea de depuración, en segundos
ThicknessfloatGrosor de la línea de depuración

Nota: estas cuatro funciones son protected en el lado de C++ y se pueden llamar como nodos directamente en el lado de Blueprint. En C++ usarlas dentro de una subclase de ULCCComponent, o pasar a las pruebas de rayos que proporciona el motor.

Recomendación

Preferir los cuerpos de colisión más las pruebas de rayos del motor. A partir de la v0.6.0, una vez que los datos incluyen un archivo de colisión y la colisión está activada, LineTraceByChannel devuelve un FHitResult completo (normal, material, componente impactado y más), funciona sin fricción con los sistemas de física, IA y navegación del motor, y esa vía está exhaustivamente validada.

Las interfaces dedicadas de aquí solo merecen consideración en los casos siguientes, y requieren pruebas exhaustivas propias:

  • Los datos no tienen archivo de colisión y no es posible pasar a datos con colisión.
  • Se requiere la información de nodo del punto de impacto (FLCCSplat::NodeVector da X, Y y Level).

LineTraceSingle

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingle(const FVector& Start, const FVector& End, FLCCSplat& OutHit,
                     bool bDrawDebugLine, float Duration, float Thickness) const;

Prueba de rayo simple, que devuelve el punto de impacto más cercano. El radio de la prueba está fijado en 10 cm.

ParámetroTipoDescripción
OutHitFLCCSplat&Información de impacto de salida, que contiene la posición de mundo Location y la información de nodo NodeVector

Devuelve bool: true cuando hay impacto.

// dentro de una subclase de ULCCComponent
void UMyLCCComponent::PickFromCamera(const FVector& CamLocation, const FVector& CamForward)
{
    const FVector Start = CamLocation;
    const FVector End = Start + CamForward * 10000.f;

    FLCCSplat Hit;
    if (LineTraceSingle(Start, End, Hit, true, 2.0f, 2.0f))
    {
        UE_LOG(LogTemp, Log, TEXT("Hit at %s, node %s"),
            *Hit.Location.ToString(), *Hit.NodeVector.ToString());
    }
}

Blueprint como texto, selección con un clic del ratón:

[Input Action: Pick]
        │ Pressed
        ▼
[Get Player Camera Manager] ──▶ [Get Camera Location]  → Start
                            └─▶ [Get Actor Forward Vector]
                                        │
                                        ▼
                                [Multiply] (× 10000)
                                        │
                                        ▼
                                [Add] (Start + paso anterior) → End
        │
        ▼
[Line Trace Single]
        Target = (LCC Component)
        Start = Start
        End = End
        Draw Debug Line = true
        Duration = 2.0
        Thickness = 2.0
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Break LCCSplat]  ← conectado a Out Hit
        Location → usado para colocar un marcador

LineTraceSingleWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingleWithRadius(const FVector& Start, const FVector& End, float Radius,
                               FLCCSplat& OutHit, bool bDrawDebugLine,
                               float Duration, float Thickness) const;

Prueba de rayo simple con un radio de prueba configurable.

ParámetroTipoDescripción
RadiusfloatRadio de la prueba, en centímetros

Notas de uso:

  • Una nube de puntos es discreta, y un radio demasiado pequeño atraviesa fácilmente los huecos entre puntos, así que no se impacta en nada aunque se apunte directamente a un objeto. En ese caso conviene aumentar el radio.
  • Un radio mayor impacta con más facilidad pero reduce la precisión, y el punto devuelto puede desviarse de la posición realmente pretendida.
  • Empezar en 20~50 cm para datos dispersos; 5~10 cm es suficiente para datos densos.
FLCCSplat Hit;
// radio grande para una nube de puntos dispersa, lo que aumenta la tasa de impacto
if (LineTraceSingleWithRadius(Start, End, 30.0f, Hit, false, 0.f, 0.f))
{
    SpawnMarkerAt(Hit.Location);
}

LineTraceMulti

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMulti(const FVector& Start, const FVector& End,
                    bool bDrawDebugLine, float Duration, float Thickness,
                    TArray<FLCCSplat>& OutHits) const;

Prueba de rayo múltiple, que devuelve todos los puntos de impacto a lo largo del recorrido. El radio de la prueba está fijado en 10 cm.

ParámetroTipoDescripción
OutHitsTArray<FLCCSplat>&Salida de todos los puntos de impacto

Notas de uso:

  • Usarla para pruebas penetrantes, por ejemplo para medir cuántas capas de estructura atraviesa una línea, o para análisis de secciones.
  • El número de puntos de impacto puede ser grande, así que conviene evitar llamarla en cada fotograma.
TArray<FLCCSplat> Hits;
if (LineTraceMulti(Start, End, true, 3.0f, 1.0f, Hits))
{
    UE_LOG(LogTemp, Log, TEXT("Passed through %d splats"), Hits.Num());

    for (const FLCCSplat& Hit : Hits)
    {
        DrawDebugPoint(GetWorld(), Hit.Location, 8.f, FColor::Yellow, false, 3.f);
    }
}

LineTraceMultiWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMultiWithRadius(const FVector& Start, const FVector& End, float Radius,
                              bool bDrawDebugLine, float Duration, float Thickness,
                              TArray<FLCCSplat>& OutHits) const;

Prueba de rayo múltiple con un radio de prueba configurable. Los parámetros significan lo mismo que arriba.

Un radio mayor aumenta notablemente el número de puntos de impacto, lo que se ajusta a necesidades estadísticas como estimar la densidad de puntos dentro de un rango cilíndrico.

FLCCSplat

USTRUCT(BlueprintType)
struct FLCCSplat
{
    FVector Location;         // coordenadas de mundo del punto de impacto
    FLCCVector NodeVector;    // nodo al que pertenece el punto de impacto
};

Los campos X, Y y Level de FLCCVector sitúan el nodo dentro del octree. Level refleja el nivel de detalle cargado actualmente en ese lugar, lo que indica si los datos que se están viendo son finos o gruesos.

Para los campos completos, consultar Structs.

Véase también

  • ULCCComponentBase: interfaces comunes de renderizado y rendimiento
  • ULCC2Component: el componente correspondiente del pipeline LCC2
  • Structs: campos de FLCCSplat, FLCCVector y FLCCRenderInfo