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

Structs: referencia de los tipos de struct

Tipos de struct que expone el módulo LCC4UnrealRuntime.

MóduloLCC4UnrealRuntime
CabeceraCore/LCCStructure.h
#include "Core/LCCStructure.h"

Los structs marcados como BlueprintType se pueden descomponer y componer en Blueprint con nodos Break / Make.

Rendimiento

FRenderInfo

Parámetros comunes de rendimiento. Los usa ULCCComponentBase::Performance.

La característica de diseño de este struct es que cada valor viene con una casilla de activación. Mientras la casilla está desmarcada se usa el valor predeterminado interno del plugin, y el valor introducido solo se aplica una vez marcada. El Setter correspondiente del Component establece la casilla en true automáticamente.

CampoTipoValor predeterminadoCasilla correspondienteDescripción
MaxDistanceuint32300bDistanceLimitDistancia máxima de renderizado, en metros
MaxSplatNumuint323000bMaxSplatNumLimitNúmero máximo de splats por fotograma, en unidades de diez mil, límite superior 10000
LevelFactorfloat1bCanSetLevelFactorFactor de escala de la distancia del LOD, de 0.01 a 20
PreloadDistanceuint32200bPreloadDistanceLimitDistancia de precarga. El valor real es MaxDistance + 35
StartLeveluint320bCanSetStartLevelStart Level, de 0 a 20
EndLeveluint3220bCanSetEndLevelEnd Level, de 0 a 20
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimitDistancia máxima de carga de colisión, en metros
bUseFullLoadbooltruebCanSetUseFullLoadInterruptor de carga completa para escenas pequeñas. Reescrito a casilla activada, valor false cuando se construye ULCC2Component
FullLoadSplatNumuint321500bCanSetFullLoadNumUmbral de la carga completa, en unidades de diez mil

Métodos auxiliares:

bool HasMaxDistanceLimit() const;      // si existe un límite de distancia
bool HasMaxNumLimit() const;           // si existe un límite de cantidad
bool NeedPreload() const;              // si es necesaria la precarga
uint32 GetMaxDistance() const;         // distancia máxima efectiva
uint32 GetMaxSplatNum() const;         // cantidad máxima efectiva
float GetLevelFactor() const;          // factor de LOD efectivo
uint32 GetStartLevel() const;          // Level inicial efectivo
uint32 GetEndLevel() const;            // Level final efectivo
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const;     // devuelve GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const;   // si la cantidad indicada usa la carga completa
void Reset();                          // restablece solo los campos de valor, no las casillas de activación

Dos trampas fáciles:

  • Reset() restablece solo los campos de valor (distancia, cantidad, Level, factor) y no restablece ninguna de las casillas de activación b*, ni bUseFullLoad ni FullLoadSplatNum.
  • FRenderInfo::GetPreloadDistance() devuelve GetMaxDistance() + 35, mientras que la función del mismo nombre del componente, ULCCComponentBase::GetPreloadDistance(), devuelve el valor bruto del campo. Los dos resultados difieren.

Los Getters devuelven el valor efectivo: mientras la casilla está desmarcada devuelven el valor predeterminado interno, no el valor introducido antes. Esto se confunde con facilidad, y leer el campo directamente puede diferir de llamar al Getter.

Notas de uso:

  • Modificarlos mediante el Setter del Component es la vía más sencilla y no requiere tratar las casillas manualmente.
  • Al cambiar los campos del struct directamente, no hay que olvidar establecer también la casilla en true; de lo contrario nada surte efecto.
// recomendado: usar el Setter, la casilla se trata automáticamente
Component->SetMaxDistance(200);

// cambiar el campo directamente requiere establecer la casilla manualmente
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;

FLCCRenderInfo

Parámetros de rendimiento específicos de LCC1. Los usa ULCCComponent::LCCPerformance.

CampoTipoValor predeterminadoCasilla correspondienteDescripción
SortFactorfloat1bCanSetSortFactorFactor de escala de la frecuencia de ordenación, de 0.2 a 5. Un valor mayor implica menos ordenaciones y mejor rendimiento
bAddExtraPreNodesboolDecidido por una macrobEnableExtraPreNodesAñade nodos de precarga adicionales, lo que mitiga los huecos en el borde de la pantalla al girar la vista rápidamente

Métodos auxiliares:

float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();

Página relacionada: ULCCComponent

Metadatos

FMetaInfoBase

Struct base de los metadatos, del que heredan tanto FLCCMetaInfo como FLCC2MetaInfo. Tipo de retorno de ULCCComponentBase::GetMetaInfo.

CampoTipoDescripción
NameFStringNombre de los datos
VersionFStringCadena de versión de los datos
DescriptionFStringDescripción
SourceFStringOrigen
DataTypeFStringTipo de datos
FileTypeFStringTipo de archivo, que corresponde a EFileType
OffsetTArray<float>Desplazamiento de coordenadas, 3 elementos
ShiftTArray<float>Cantidad de traslación
Epsgint32Número del sistema de coordenadas EPSG, mayor que 0 significa que hay información de coordenadas geográficas
ScaleTArray<int>Escala, 3 elementos
GUIDFStringIdentificador único de los datos
TotalLevelintNúmero total de Levels
TotalSplatsintNúmero total de splats
SplatsTArray<int>Número de splats de cada Level

Métodos auxiliares:

bool IsValid() const;              // si los metadatos son válidos
void Reset();
bool IsRTK() const;                // si hay información geográfica RTK
FVector GetOffset() const;         // desplazamiento como FVector, devuelve un vector cero con una advertencia si hay menos de 3 elementos
FVector3f GetScale();              // nota: no es const, y no comprueba el número de elementos
EFileType GetFileType() const;     // enumeración del tipo de archivo
float GetVersion() const;          // versión como float
uint32 GetLevel0SplatNum() const;  // número de splats del Level 0, en unidades de diez mil

GetScale() y GetOffset() difieren en robustez: GetOffset() comprueba el número de elementos y devuelve un vector cero con una advertencia cuando hay menos de 3, mientras que GetScale() indexa los tres primeros elementos directamente y se sale de los límites cuando Scale tiene menos de 3 elementos.

IsRTK() decide por Epsg > 0 más un desplazamiento distinto de cero y solo se fija en los datos. No es equivalente a CanUseGeoPlace(), que además requiere que bEnableGeoPlace esté activado y que el sistema de referencia geográfica esté creado.

Notas de uso:

  • Leerlos una vez terminada la carga; los campos tienen todos valores cero mientras los datos no están listos.
  • TotalSplats es la cantidad total de los datos. ULCCComponentBase::GetSplatNumber() devuelve precisamente ese campo, así que los dos son el mismo valor.
if (Component->CheckIfLoaded())
{
    const FMetaInfoBase Meta = Component->GetMetaInfo();

    UE_LOG(LogTemp, Log, TEXT("Name: %s"), *Meta.Name);
    UE_LOG(LogTemp, Log, TEXT("Levels: %d, total splats: %d"),
        Meta.TotalLevel, Meta.TotalSplats);
    UE_LOG(LogTemp, Log, TEXT("Level 0 splats: %u (ten thousand)"),
        Meta.GetLevel0SplatNum());
    UE_LOG(LogTemp, Log, TEXT("Has SH: %s"),
        Meta.GetFileType() == EFileType::Quality ? TEXT("yes") : TEXT("no"));

    if (Meta.IsRTK())
    {
        UE_LOG(LogTemp, Log, TEXT("EPSG: %d, offset: %s"),
            Meta.Epsg, *Meta.GetOffset().ToString());
    }
}

Blueprint como texto:

[Get Meta Info]
        Target = (LCC Component)
        │ Return Value ──┐
        ▼                │
[Break FMetaInfoBase] ◀──┘
        Name → [Print String]
        Total Splats → [Print String]
        Total Level → [Print String]

FLCCMetaInfo

Metadatos completos de LCC1, que heredan de FMetaInfoBase.

Campo adicionalTipoDescripción
CellLengthXfloatTamaño de la celda en X
CellLengthYfloatTamaño de la celda en Y
AttributesTArray<FBoundingBoxInfoWithName>Caja delimitadora de cada atributo, indexada por nombre
IndexDataSizeintTamaño de los datos de índice
EncodingFStringMétodo de codificación
BoundingBoxFBoundingBoxInfoCaja delimitadora general

La condición de IsValid() es más estricta que en la clase base: TotalLevel, TotalSplats, CellLengthX, CellLengthY e IndexDataSize deben ser todos mayores que 0.

Métodos de la caja delimitadora (todos devuelven FBox, solo C++):

FVector2f GetCellLength() const;
int32 GetXNum() const;                    // número de celdas en X
int32 GetYNum() const;                    // número de celdas en Y
FBox GetVisibleBoundingBox() const;       // caja delimitadora visible
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const;                   // rango de valores de los armónicos esféricos
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;

FLCC2MetaInfo

Metadatos completos de LCC2, que heredan de FMetaInfoBase. Tipo de retorno de ULCC2Component::GetMetaInfo2.

Campo adicionalTipoDescripción
WorkPathFStringRuta del directorio LCC2
SplatTypeEDataSourceTypeFormato de origen de los datos, SOG / SPZ / PLY
SHBandsint32Banda de armónicos esféricos más alta de este árbol, 0 significa ninguna, valores 1/2/3
EnvNameint32Índice del archivo de entorno, -1 significa ninguno
RootFTreeNodeNodo raíz del octree
FilesTArray<FString>Lista de archivos de datos de splats
MeshFilesTArray<FString>Lista de archivos de mesh
BVHFilesTArray<FString>Lista de archivos BVH

La condición de IsValid() es que Files no esté vacío.

Método auxiliar:

FBox GetBounds() const;    // caja delimitadora del nodo raíz, ya convertida a centímetros

Sobre SHBands: decide el paso de las ranuras de armónicos esféricos, así que todos los orígenes de datos dentro del mismo buffer de armónicos esféricos tienen que coincidir. Un árbol que mezcla números de bandas distintos toma el más amplio. Los formatos de archivo único (.sog / .spz / .ply) leen el número exacto de bandas de la cabecera del decodificador; LCC2 no tiene el concepto de bandas por archivo y lo decide FileType, donde Portable no tiene armónicos esféricos y Quality tiene 3 bandas.

Resultado de la prueba de rayos

FLCCSplat

Resultado de impacto de una prueba de rayos. Lo usan las funciones de prueba de rayos de ULCCComponent.

CampoTipoDescripción
LocationFVectorCoordenadas de mundo del punto de impacto
NodeVectorFLCCVectorInformación de nodo del punto de impacto
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
    // posición del impacto
    const FVector HitPos = Hit.Location;
    // nivel de detalle cargado actualmente en ese lugar
    const int32 Level = Hit.NodeVector.Level;
}

Página relacionada: Pruebas de rayos de ULCCComponent

FLCCVector

Coordenadas de nodo, que sitúan un nodo dentro del octree.

CampoTipoDescripción
Xint32Índice X del nodo
Yint32Índice Y del nodo
Levelint32Level al que pertenece el nodo

El constructor con parámetros y el constructor de copia limitan los tres campos a valores no negativos, pero una asignación directa (escribir los campos después de la construcción predeterminada, o usar operator=) no los limita.

Métodos auxiliares:

FString ToString() const;     // el formato es "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);

La igualdad compara solo X, Y y Level, no la información interna de cámara ni otros campos de tiempo de ejecución.

Level indica si los datos visibles actualmente son finos o gruesos; un valor menor es más fino.

Caja delimitadora

FBoundingBoxInfo

Información de la caja delimitadora.

CampoTipoDescripción
MinTArray<float>Coordenadas del punto mínimo
MaxTArray<float>Coordenadas del punto máximo

FBoundingBoxInfoWithName

Caja delimitadora con nombre, usada por la lista de atributos de los metadatos.

CampoTipoDescripción
NameFStringNombre del atributo
BoundingBoxInfoFBoundingBoxInfoCaja delimitadora

La igualdad compara solo Name.

Metadatos SOG

Este grupo de structs describe los metadatos de un archivo .sog y lo generan las funciones de análisis SOG de ULCCUtilLibrary.

FLCC2SogMeta

Struct principal de los metadatos SOG.

CampoTipoDescripción
Versionint32Versión del formato
Countint32Número de splats
bAntialiasboolSi el anti-aliasing está activado
InstancesFLCC2SogInstancesLista de archivos de instancias
MeansFLCC2SogMeansDatos de posición, con mínimo, máximo y lista de archivos
ScalesFLCC2SogScalesDatos de escala, con un libro de códigos de 256 entradas y lista de archivos
QuatsFLCC2SogQuatsLista de archivos de los datos de rotación
SemanticsFLCC2SogSemanticsLista de archivos de los datos semánticos
Sh0FLCC2SogSh0Armónicos esféricos de la banda 0, con un libro de códigos de 256 entradas y lista de archivos
ShNFLCC2SogShNArmónicos esféricos de orden alto, con número de bandas, libro de códigos, cantidad y lista de archivos

Método auxiliar:

bool HasShN() const;    // si hay armónicos esféricos de orden alto, equivalente a que ShN.Files no esté vacío

Notas de uso:

  • Leerlos con ParseSogMetaFromFile sin cargar los datos de renderizado, con un coste muy bajo.
  • Revelan el número de puntos y la situación de los armónicos esféricos antes de cargar, así que la configuración de calidad se puede decidir por adelantado.
FLCC2SogMeta Meta;
if (ULCCUtilLibrary::ParseSogMetaFromFile(Path, Meta))
{
    UE_LOG(LogTemp, Log, TEXT("Version: %d, count: %d, high-order SH: %s"),
        Meta.Version, Meta.Count, Meta.HasShN() ? TEXT("yes") : TEXT("no"));
}

FLCC2SogShN

Datos de los armónicos esféricos de orden alto.

CampoTipoDescripción
Bandsint32Bandas de armónicos esféricos
Countint32Cantidad
FilesTArray<FString>Lista de archivos
CodebookTStaticArray<float, 256>Libro de códigos de cuantización, no visible para Blueprint

Método auxiliar: bool HasShN() const.

FLCC2SogImageData

Datos de imagen SOG.

CampoTipoDescripción
PixelDataTArray<uint8>Datos de píxeles, formato RGBA, 4 bytes por píxel
Widthint32Anchura
Heightint32Altura

Otros sub-structs

Los structs siguientes contienen solo una lista de archivos, algunos con un libro de códigos de cuantización:

StructCampos
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins, Maxs, Files
FLCC2SogScalesCodebook (256 entradas), Files
FLCC2SogSh0Codebook (256 entradas), Files

Codebook es un TStaticArray<float, 256>, no es un UPROPERTY y no es visible en Blueprint.

Nodos del octree

Este grupo de structs describe el octree de LCC2. Son datos de bajo nivel que el desarrollo habitual no necesita tocar directamente.

FTreeNode

Nodo del octree.

CampoTipoDescripción
IdFStringIdentificador del nodo
XMin / YMin / ZMindoublePunto mínimo del AABB
XMax / YMax / ZMaxdoublePunto máximo del AABB
ChildNumint32Número de nodos hijos
ChildrenTArray<FTreeNode>Array de nodos hijos, no es un UPROPERTY
DataFTreeNodeDataDatos del nodo

Método auxiliar:

void ClearIterative();

Recoge todos los nodos en anchura y los limpia en orden inverso, evitando un desbordamiento de pila por la destrucción recursiva en un árbol muy profundo. Llamarlo antes de que un FTreeNode mantenido manualmente salga del ámbito.

FTreeNodeData

Contenedor de los datos del nodo, que marca con valores booleanos si cada tipo de dato está presente.

CampoTipoDescripción
bHas3DGSboolSi hay datos 3DGS
_3DGSFTreeNodeData3DGSDatos 3DGS
bHasMeshboolSi hay datos de mesh
MeshFTreeNodeDataMeshDatos de mesh
bHasBVHboolSi hay datos BVH
BVHFTreeNodeDataBVHDatos BVH

FTreeNodeData3DGS

CampoTipoDescripción
Nameint32Índice del archivo
Startint32Desplazamiento inicial
Countint32Cantidad

FTreeNodeDataMesh

CampoTipoDescripción
Nameint32Índice del archivo
Vertexint32Número de vértices
Faceint32Número de caras

FTreeNodeDataBVH

CampoTipoDescripción
Nameint32Índice del archivo

Véase también

  • ULCCComponentBase: uso de FRenderInfo y FMetaInfoBase
  • ULCCComponent: uso de FLCCSplat y FLCCRenderInfo
  • ULCCUtilLibrary: las funciones de análisis de los metadatos SOG
  • Enumeraciones: los tipos de enumeración usados en estos structs
Anterior
Enumeraciones