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

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 se declaran en la clase base ULCCComponentBase pero solo surten efecto en el pipeline LCC1. SetPlayerLoadMode, SetPlayerRenderMode, SetSceneCaptureLoadMode, SetSceneCaptureRenderMode, ModifyPlayerTransform y CancelModifyPlayerTransform solo tienen sentido cuando se llaman en un ULCCComponent.

El motivo es que la estrategia de renderizado por vista y la planificación de nodos las consume la ruta de renderizado de LCC1, y LCC2 todavía no está conectado. Llamarlas en ULCC2Component (incluidos ALCC2Actor y .sog / .spz / .ply) no genera ningún error pero no produce el resultado esperado.

El renderizado diferenciado, como alta calidad en el viewport principal y baja calidad en un minimapa, o la precarga antes de un teletransporte, requiere actualmente datos LCC1.

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
Anterior
ULCCComponentBase
Siguiente
ULCC2Component