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

    • Product Overview
    • Basic Operation
    • Using the LCC Scan App
    • Maintenance and Care
    • FAQ
  • Lixel K Series

    • Lixel K1

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Map Fusion
      • Route Planning Suggestions for Typical Scenes
      • Precautions
      • FAQ
    • Lixel K2

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Map Fusion
      • Route Planning Suggestions for Typical Scenes
      • Precautions
      • FAQ
  • Lixel L Series

    • Lixel L2 Pro

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Measure Point
      • Appendix
      • FAQ
  • Lixel Studio

    • Version and Copyright
    • Installation and Activation
    • Software Interface
    • File Operations
    • Project Processing
    • Tools
    • 2D Drawing
    • Applications
    • Settings
    • Device Connection
  • Lixel CyberColor

    • LCC Studio

      • Getting Started
      • Version and Updates
      • Download and Installation
      • Interface Overview and Navigation
      • Before Reconstruction
      • Model Reconstruction
      • Single Model Reconstruction
      • Map Fusion
      • Aerial-Ground Fusion
      • Aerial Reconstruction
      • My Models
      • Other Features
      • Settings and Account
      • Converter
      • Video Reconstruction
      • FAQ
    • LCC Scene Editor

      • Version & Updates
      • Account & Login
      • Product Overview & Home
      • Editor Interface
      • Scene Navigation Modes
      • File
      • Settings
      • Edit Operations
      • Window
      • Global Toolbar
      • Assets & Properties
      • Left Toolbar
      • Viewpoints
      • Portal
      • Skybox
      • Annotations
      • Measurement
      • Flythrough
      • Scene Report
      • 3D Layout
      • Mini-Map
      • Preview Mode (Viewer)
      • Help
      • FAQ
      • Spawn Point
    • LCC Model Editor

      • Version and Updates
      • User Guide
      • Overview and Interface
      • File Operations
      • Selectors
      • Editing Models
      • Measurement
      • Color Grading
      • Asset Management
      • Settings and Help
      • FAQ
    • Capture Guide

      • Overview
      • Capture Devices Overview
      • General Capture Principles
      • Indoor Scene Capture
      • Outdoor Scene Capture
      • Large-Scale Capture (Map Fusion)
      • Aerial-Ground Map Fusion Capture
      • Object Capture
      • People Capture
      • Video Reconstruction Capture
      • HD Enhancement
      • Control Points (Lixel P1)
      • FAQ and Troubleshooting
    • Version History
  • Plugin & SDK

    • Unreal

      • Introduction
      • Quick Start - Windows
      • Quick Start - Linux
      • Quick Start - Quest3
      • Editions and Licensing
      • Rendering
      • Visual Settings
      • Normals and Lighting
      • Scene Editing
      • Performance Parameters
      • Performance Guide
      • Third-party and Engine Plugin Integration
      • Proxy Mesh
      • Loading Animation
      • Collision
      • Navigation System Support
      • Single Layer Water Support
      • Localization
      • FAQ
      • Troubleshooting
      • Logging and Diagnostics
      • Contact Us
      • API Reference

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Changelog

        • 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: Struct Type Reference

Struct types the LCC4UnrealRuntime module exposes.

ModuleLCC4UnrealRuntime
HeaderCore/LCCStructure.h
#include "Core/LCCStructure.h"

Structs marked BlueprintType can be split and assembled in Blueprint with Break / Make nodes.

Performance

FRenderInfo

Common performance parameters. Used by ULCCComponentBase::Performance.

The design characteristic of this struct is that every value comes with an enable checkbox. While the checkbox is off the built-in plugin default is used, and the entered value only applies once it is on. The matching Setter on the Component sets the checkbox to true automatically.

FieldTypeDefaultMatching checkboxDescription
MaxDistanceuint32300bDistanceLimitMaximum render distance, in meters
MaxSplatNumuint323000bMaxSplatNumLimitMaximum splat count per frame, in units of ten thousand, upper limit 10000
LevelFactorfloat1bCanSetLevelFactorLOD distance scale factor, from 0.01 to 20
PreloadDistanceuint32200bPreloadDistanceLimitPreload distance. The actual value is MaxDistance + 35
StartLeveluint320bCanSetStartLevelStart Level, from 0 to 20
EndLeveluint3220bCanSetEndLevelEnd Level, from 0 to 20
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimitMaximum collision load distance, in meters
bUseFullLoadbooltruebCanSetUseFullLoadFull load switch for small scenes. Rewritten to checkbox enabled, value false when ULCC2Component is constructed
FullLoadSplatNumuint321500bCanSetFullLoadNumFull load threshold, in units of ten thousand

Helper methods:

bool HasMaxDistanceLimit() const;      // whether a distance limit exists
bool HasMaxNumLimit() const;           // whether a count limit exists
bool NeedPreload() const;              // whether preloading is needed
uint32 GetMaxDistance() const;         // effective maximum distance
uint32 GetMaxSplatNum() const;         // effective maximum count
float GetLevelFactor() const;          // effective LOD factor
uint32 GetStartLevel() const;          // effective start Level
uint32 GetEndLevel() const;            // effective end Level
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const;     // returns GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const;   // whether the given count uses full load
void Reset();                          // resets the value fields only, not the enable checkboxes

Two easy pitfalls:

  • Reset() resets the value fields only (distance, count, Level, factor) and resets none of the b* enable checkboxes, nor bUseFullLoad and FullLoadSplatNum.
  • FRenderInfo::GetPreloadDistance() returns GetMaxDistance() + 35, while the function of the same name on the component, ULCCComponentBase::GetPreloadDistance(), returns the raw field value. The two results differ.

The Getters return the effective value: while the checkbox is off they return the built-in default, not the value entered earlier. This is easy to confuse, and reading the field directly may differ from calling the Getter.

Usage notes:

  • Modifying through the Setter on the Component is the easiest route and needs no manual checkbox handling.
  • When changing struct fields directly, remember to set the checkbox to true as well, otherwise nothing takes effect.
// recommended: use the Setter, the checkbox is handled automatically
Component->SetMaxDistance(200);

// changing the field directly requires setting the checkbox yourself
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;

FLCCRenderInfo

LCC1-specific performance parameters. Used by ULCCComponent::LCCPerformance.

FieldTypeDefaultMatching checkboxDescription
SortFactorfloat1bCanSetSortFactorSort frequency scale factor, from 0.2 to 5. A larger value means fewer sorts and better performance
bAddExtraPreNodesboolDecided by a macrobEnableExtraPreNodesAdds extra preload nodes, mitigating holes at the screen edge while turning the view quickly

Helper methods:

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

Related page: ULCCComponent

Metadata

FMetaInfoBase

Metadata base struct, inherited by both FLCCMetaInfo and FLCC2MetaInfo. Return type of ULCCComponentBase::GetMetaInfo.

FieldTypeDescription
NameFStringData name
VersionFStringData version string
DescriptionFStringDescription
SourceFStringSource
DataTypeFStringData type
FileTypeFStringFile type, corresponding to EFileType
OffsetTArray<float>Coordinate offset, 3 elements
ShiftTArray<float>Translation amount
Epsgint32EPSG coordinate system number, greater than 0 means geographic coordinate information is present
ScaleTArray<int>Scale, 3 elements
GUIDFStringUnique identifier of the data
TotalLevelintTotal Level count
TotalSplatsintTotal splat count
SplatsTArray<int>Splat count of each Level

Helper methods:

bool IsValid() const;              // whether the metadata is valid
void Reset();
bool IsRTK() const;                // whether RTK geographic information is present
FVector GetOffset() const;         // offset as FVector, returns a zero vector with a warning when fewer than 3 elements
FVector3f GetScale();              // note: not const, and does not check the element count
EFileType GetFileType() const;     // file type enum
float GetVersion() const;          // version as float
uint32 GetLevel0SplatNum() const;  // splat count of Level 0, in units of ten thousand

GetScale() and GetOffset() differ in robustness: GetOffset() checks the element count and returns a zero vector with a warning when there are fewer than 3, while GetScale() indexes the first three elements directly and goes out of bounds when Scale has fewer than 3 elements.

IsRTK() decides by Epsg > 0 plus a non-zero offset and looks at the data only. It is not equivalent to CanUseGeoPlace(), which additionally requires bEnableGeoPlace to be enabled and the geo referencing system to be created.

Usage notes:

  • Read it after loading completes; the fields are all zero values while the data is not ready.
  • TotalSplats is the total amount of the data. ULCCComponentBase::GetSplatNumber() returns this very field, so the two are the same value.
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 as text:

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

FLCCMetaInfo

Complete LCC1 metadata, inheriting FMetaInfoBase.

Additional fieldTypeDescription
CellLengthXfloatGrid size along X
CellLengthYfloatGrid size along Y
AttributesTArray<FBoundingBoxInfoWithName>Bounding box of each attribute, indexed by name
IndexDataSizeintIndex data size
EncodingFStringEncoding method
BoundingBoxFBoundingBoxInfoOverall bounding box

The condition of IsValid() is stricter than in the base class: TotalLevel, TotalSplats, CellLengthX, CellLengthY, and IndexDataSize must all be greater than 0.

Bounding box methods (all returning FBox, C++ only):

FVector2f GetCellLength() const;
int32 GetXNum() const;                    // grid count along X
int32 GetYNum() const;                    // grid count along Y
FBox GetVisibleBoundingBox() const;       // visible bounding box
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const;                   // value range of the spherical harmonics
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;

FLCC2MetaInfo

Complete LCC2 metadata, inheriting FMetaInfoBase. Return type of ULCC2Component::GetMetaInfo2.

Additional fieldTypeDescription
WorkPathFStringPath of the LCC2 directory
SplatTypeEDataSourceTypeData source format, SOG / SPZ / PLY
SHBandsint32Highest spherical harmonics band in this tree, 0 means none, values 1/2/3
EnvNameint32Environment file index, -1 means none
RootFTreeNodeOctree root node
FilesTArray<FString>List of splat data files
MeshFilesTArray<FString>List of mesh files
BVHFilesTArray<FString>List of BVH files

The condition of IsValid() is that Files is not empty.

Helper method:

FBox GetBounds() const;    // bounding box of the root node, already converted to centimeters

About SHBands: it decides the stride of the spherical harmonics slots, so every data source inside the same spherical harmonics buffer has to agree. A tree mixing different band counts takes the widest one. Single-file formats (.sog / .spz / .ply) read the exact band count from the decoder header; LCC2 has no per-file band concept and FileType decides it, with Portable having no spherical harmonics and Quality having 3 bands.

Raycast Result

FLCCSplat

Hit result of a ray test. Used by the ray test functions of ULCCComponent.

FieldTypeDescription
LocationFVectorWorld coordinates of the hit point
NodeVectorFLCCVectorNode information of the hit point
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
    // hit position
    const FVector HitPos = Hit.Location;
    // detail level currently loaded at that spot
    const int32 Level = Hit.NodeVector.Level;
}

Related page: ULCCComponent ray tests

FLCCVector

Node coordinates, locating a node in the octree.

FieldTypeDescription
Xint32Node X index
Yint32Node Y index
Levelint32Level the node belongs to

The parameterized constructor and the copy constructor clamp the three fields to non-negative values, but a direct assignment (writing the fields after default construction, or using operator=) does not clamp.

Helper methods:

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

Equality compares X, Y, and Level only, not the internal camera information and other runtime fields.

Level tells whether the data currently visible is fine or coarse; a smaller value is finer.

Bounding Box

FBoundingBoxInfo

Bounding box information.

FieldTypeDescription
MinTArray<float>Coordinates of the minimum point
MaxTArray<float>Coordinates of the maximum point

FBoundingBoxInfoWithName

Named bounding box, used by the attribute list in the metadata.

FieldTypeDescription
NameFStringAttribute name
BoundingBoxInfoFBoundingBoxInfoBounding box

Equality compares Name only.

SOG Metadata

This group of structs describes the metadata of a .sog file and is output by the SOG parsing functions of ULCCUtilLibrary.

FLCC2SogMeta

Main SOG metadata struct.

FieldTypeDescription
Versionint32Format version
Countint32Splat count
bAntialiasboolWhether anti-aliasing is enabled
InstancesFLCC2SogInstancesList of instance files
MeansFLCC2SogMeansPosition data, with minimum, maximum, and file list
ScalesFLCC2SogScalesScale data, with a 256-entry codebook and file list
QuatsFLCC2SogQuatsFile list of the rotation data
SemanticsFLCC2SogSemanticsFile list of the semantic data
Sh0FLCC2SogSh0Band 0 spherical harmonics, with a 256-entry codebook and file list
ShNFLCC2SogShNHigh-order spherical harmonics, with band count, codebook, count, and file list

Helper method:

bool HasShN() const;    // whether high-order spherical harmonics are present, equivalent to ShN.Files being non-empty

Usage notes:

  • Read it with ParseSogMetaFromFile without loading the render data, at very low cost.
  • It reveals the point count and the spherical harmonics situation before loading, so the quality configuration can be decided in advance.
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

High-order spherical harmonics data.

FieldTypeDescription
Bandsint32Spherical harmonics bands
Countint32Count
FilesTArray<FString>File list
CodebookTStaticArray<float, 256>Quantization codebook, not visible to Blueprint

Helper method: bool HasShN() const.

FLCC2SogImageData

SOG image data.

FieldTypeDescription
PixelDataTArray<uint8>Pixel data, RGBA format, 4 bytes per pixel
Widthint32Width
Heightint32Height

Other Sub-structs

The following structs contain only a file list, some with a quantization codebook:

StructFields
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins, Maxs, Files
FLCC2SogScalesCodebook (256 entries), Files
FLCC2SogSh0Codebook (256 entries), Files

Codebook is a TStaticArray<float, 256>, not a UPROPERTY, and is not visible in Blueprint.

Octree Nodes

This group of structs describes the LCC2 octree. It is low-level data that regular development does not need to touch directly.

FTreeNode

Octree node.

FieldTypeDescription
IdFStringNode identifier
XMin / YMin / ZMindoubleMinimum point of the AABB
XMax / YMax / ZMaxdoubleMaximum point of the AABB
ChildNumint32Number of child nodes
ChildrenTArray<FTreeNode>Array of child nodes, not a UPROPERTY
DataFTreeNodeDataNode data

Helper method:

void ClearIterative();

It collects every node breadth-first and cleans up in reverse order, avoiding a stack overflow from recursive destruction in a very deep tree. Call it before an FTreeNode held manually leaves scope.

FTreeNodeData

Node data container, marking with booleans whether each kind of data is present.

FieldTypeDescription
bHas3DGSboolWhether 3DGS data is present
_3DGSFTreeNodeData3DGS3DGS data
bHasMeshboolWhether mesh data is present
MeshFTreeNodeDataMeshMesh data
bHasBVHboolWhether BVH data is present
BVHFTreeNodeDataBVHBVH data

FTreeNodeData3DGS

FieldTypeDescription
Nameint32File index
Startint32Start offset
Countint32Count

FTreeNodeDataMesh

FieldTypeDescription
Nameint32File index
Vertexint32Vertex count
Faceint32Face count

FTreeNodeDataBVH

FieldTypeDescription
Nameint32File index

See Also

  • ULCCComponentBase: usage of FRenderInfo and FMetaInfoBase
  • ULCCComponent: usage of FLCCSplat and FLCCRenderInfo
  • ULCCUtilLibrary: the SOG metadata parsing functions
  • Enums: the enum types used in these structs
Prev
Enums