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

Providing Real Normals for 3DGS with a Proxy Mesh

Overview

ProxyMesh is a Pro edition feature of LCC4Unreal. It provides real depth and normal information through a placed proxy mesh and is the only normal mode with real shape shading. It applies to every format of the LCC2 pipeline (.lcc2 / .sog / .spz / .ply). For licensing, see Editions and Licensing.

Note: ProxyMesh requires a valid license. Without one it falls back to Fixed mode automatically.

What a Proxy Mesh Is

3DGS data has no surface normals of its own and writes nothing into the GBuffer, so it cannot take part in regular lighting calculations. The job of the proxy mesh is to provide geometry whose shape matches the 3DGS. The plugin takes depth, normals, and the material properties in the GBuffer from it and hands them to engine lighting and post-processing; the mesh itself never appears in the final image.

        3DGS data                    Proxy mesh
   (color, opacity)          (depth, normals, material properties)
           │                              │
           │                              ▼
           │                      Written into the GBuffer
           │                              │
           │              ┌───────────────┴───────────────┐
           │              ▼                               ▼
           │      Engine lighting                Post-processing that
           │   (directional, point, shadows)   depends on the GBuffer
           │              │                  (reflection, refraction, etc.)
           │              └───────────────┬───────────────┘
           ▼                              ▼
       Color source ──────────────▶  Composite final image
                                          │
                                          ▼
                              The proxy mesh itself is invisible

In other words: the color in the image comes from the 3DGS, and the lighting response comes from the proxy mesh.

The origin of the mesh is unrestricted. The plugin only reads its render result and does not care how it was produced. Common sources:

SourceDescription
Approximate mesh generated along with the 3DGSMesh output by the capture workflow; the closest shape match and the first choice
Mesh converted from the 3DGSMesh reconstructed from the 3DGS with a third-party tool
Hand-authored meshModeled after the 3DGS shape in DCC software, suited to scenes that need precise control
Assembled from basic primitivesRough volumes built from Cube, Plane, and other basic meshes, suited to regular shapes such as buildings and ground

The only requirement is that the mesh matches the 3DGS shape in space. The closer the match, the more realistic the lighting. When the deviation is too large, the lighting direction no longer matches the shape visible in the image.

The mesh does not need high precision: simplified low-poly geometry is enough as long as the volumes and orientation are correct.

What the Material Does

The material properties of the proxy mesh are read along with the GBuffer, so they decide how the 3DGS surface responds to lighting.

For basic lighting only, a whitebox material is enough and no textures are needed. For effects that depend on material properties, use the matching PBR material at the corresponding location on the mesh, for example:

  • Water reflection and refraction: use a water material with suitable metallic and roughness values at the water area
  • Metal highlights: give matching Metallic and Roughness values at metal structures
  • Rough surfaces: use high Roughness to suppress highlights that should not appear

When the material properties do not match the actual shape, the lighting result does not match the 3DGS appearance in the image, for example specular highlights on a wall that should be rough.

Quick Setup

Step 1: Place the ProxyMesh Actor

  1. Add an ALCC2ProxyMesh Actor from the LCC4Unreal plugin panel in the editor
  2. Assign a StaticMesh to its StaticMeshComponent (any source, see the section above)
  3. Adjust the ProxyMesh position so it overlaps the 3DGS content in space
Placing an ALCC2ProxyMesh Actor

Placing an ALCC2ProxyMesh Actor in the scene

Step 2: Enable ProxyMesh Mode

  1. Select the Actor of the LCC2 pipeline (ALCC2Actor / ASogActor / ASpzActor / APlyActor)
  2. Find LightMode in the Details panel and change it to Lit
  3. Find the Lighting category of LCC2Component in the Details panel
  4. Set NormalMode to ProxyMesh
Enabling Lit and selecting the ProxyMesh normal mode

Enabling Lit and setting NormalMode to ProxyMesh

Step 3: Verify

  • Change the lighting direction of the scene and watch whether the 3DGS produces self-shadowing
  • Confirm the proxy mesh is hidden in the final image
Real normal lighting result with ProxyMesh

Lighting result after ProxyMesh provides real normals

ProxyMesh Usage Example

Demonstration of ProxyMesh setup and lighting result

The ProxyMesh setup process and the lighting result

ALCC2ProxyMesh

The proxy Actor, paired with the Actors of the LCC2 pipeline when NormalMode = ProxyMesh.

Properties

PropertyDescription
StaticMeshComponentThe static mesh that provides scene depth and normals

Default Transform

  • Scale (100, 100, 100): the mesh unit is meters by default, while UE uses centimeters
  • Rotation (0, 180, 0): compensates for the mesh generation pipeline having the opposite forward axis to UE

Behavior

  • Enables CustomDepth rendering automatically when the StaticMesh is valid
  • Logs a warning and disables CustomDepth when the StaticMesh is empty

License Check

ProxyMesh mode requires a Pro edition license, see Editions and Licensing. Without a license it falls back to Fixed mode automatically, and the stored property value is not modified.

Runtime Switching

NormalMode can be changed at runtime from Blueprint or C++ and takes effect on the next frame.

Blueprint Usage

Spawning a ProxyMesh

SpawnActor->Class: ALCC2ProxyMesh
→ Set the StaticMesh of StaticMeshComponent
→ Adjust the position to align with the 3DGS content

Switching Modes

LCC2Component->NormalMode = ProxyMesh

Best Practices

  1. Mesh coverage: make sure the proxy mesh covers the same spatial area as the 3DGS content.
  2. Mesh precision: a simplified approximation of the scene geometry is enough, high poly counts are not needed.
  3. Multiple Actors: several ALCC2ProxyMesh Actors can be placed to cover different areas.
  4. No explicit binding: the ProxyMesh does not need to be linked to a specific Actor, pairing happens automatically.
  5. Backward compatibility: projects that do not use ProxyMesh behave exactly as before the upgrade, with no extra cost.

Troubleshooting

ProxyMesh has no effect

  • Confirm NormalMode is set to ProxyMesh
  • Confirm the license is valid
  • Make sure the ProxyMesh Actor has a valid StaticMesh assigned
  • Confirm the ProxyMesh overlaps the 3DGS content in space

Warning: "has a null StaticMesh"

Assign a StaticMesh to the ALCC2ProxyMesh Actor. The warning is throttled and issued only once per instance.

Whitebox color visible in the final image

  • Make sure at least one LCC2Component is in ProxyMesh mode
  • Adjust LCC2.ProxyMeshDepthEpsilon when depth matching is too strict

Lighting result is incorrect

  • Verify the proxy mesh normals are a reasonable approximation of the actual scene geometry

Shadows appear only nearby and are cut off in the distance

An engine issue. Select the ProxyMesh Actor, turn Far Shadow on the StaticMeshComponent off and back on to restore complete shadows.

Prev
Third-party and Engine Plugin Integration
Next
Loading Animation