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

    • Stick Light

      • Installation Guide
      • Basic Operation
      • 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
    • LCC Studio Linux

      • Product Overview
      • Architecture Guide
      • Installation and Deployment Guide
      • Container Startup Parameters Guide
      • CodeMeter Offline Licensing Deployment Guide
      • API Reference
      • Appendix - Developer Data Guide
      • Appendix - Error Code List
      • Single-Machine Multi-GPU Cluster Deployment QuickStart
    • 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
    • Web

      • Introduction
      • Rendering Performance Optimization Guide
      • Graphics Configuration
      • FAQ
      • API Reference

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • 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::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • 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
      • Changelog

        • 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

Rendering Performance Optimization Guide

This guide helps optimize the SDK on devices with varying performance levels for a smooth 3DGS (3D Gaussian Splatting) rendering experience.

1. Disable Anti-Aliasing

Three.js WebGLRenderer does not enable anti-aliasing by default. If your project has antialias: true enabled, consider disabling it in performance-sensitive scenarios:

const renderer = new THREE.WebGLRenderer({ antialias: false });

Why disable it? Each Gaussian point in 3DGS is inherently a smoothly attenuating semi-transparent ellipse. When many ellipses overlap, edges are naturally smooth without additional multisample anti-aliasing (MSAA). Disabling MSAA reduces the number of samples per pixel processed by the GPU (typically from 4 to 1), improving rendering frame rate.

Cesium users: Cesium's Viewer does not enable MSAA by default, so no additional action is needed.

2. Reduce Rendering Resolution

By lowering the device pixel ratio, you can proportionally reduce the total number of pixels the GPU needs to process. This is the most effective approach for GPU fill-rate bottlenecks.

Three.js:

// High-performance device: use native pixel ratio
renderer.setPixelRatio(window.devicePixelRatio);

// Mid-range device: cap pixel ratio
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.5));

// Low-end device / mobile: fixed 1x rendering
renderer.setPixelRatio(1.0);

Cesium:

const viewer = new Cesium.Viewer('container', {
    // Control rendering resolution via resolutionScale
    resolutionScale: 1.0 // Use 1.0 for low-end devices; use window.devicePixelRatio for high-end
});

Performance comparison reference (based on 1080p logical resolution):

Pixel RatioActual Rendered PixelsRelative Cost
1.01920×1080 ≈ 2.07M1×
1.52880×1620 ≈ 4.66M2.25×
2.03840×2160 ≈ 8.29M4×
3.05760×3240 ≈ 18.66M9×

High DPI screens (e.g., Retina) typically have a devicePixelRatio of 2 or 3. Reducing it to 1.0 can yield 4–9x improvement in fragment processing performance, at the cost of a blurrier rendering output.

3. Limit Maximum Rendered Splats — setMaxSplats

This is the most important performance tuning parameter. It controls the upper limit of total Gaussian splats participating in rendering per frame.

lccObj.setMaxSplats(3000000); // Max 3 million splats per frame

The SDK's LOD scheduler traverses the scene's spatial index each frame, selecting nodes for rendering based on distance and view frustum. When the total splat count exceeds this limit, the scheduler discards nodes starting from distant or low-priority ones until the total count satisfies the limit.

Reference values: PC: 900K – 10M, Mobile: 500K – 2.6M, depending on device performance. See Device Tier Recommended Configurations at the end of this page.

4. Limit Maximum Splats Per Node — setMaxNodeSplats

Controls the maximum number of rendered splats per spatial node. Nodes exceeding this threshold are automatically downgraded to a coarser LOD level.

lccObj.setMaxNodeSplats(1500000); // Max 1.5 million splats per node

Why is this parameter needed? In large scenes, dense areas such as building clusters may contain millions of Gaussian splats in a single node at the highest LOD. Without this limit, the camera approaching such an area would cause a single node to consume the entire rendering budget, leaving no budget for other areas. This parameter makes rendering budget distribution more balanced.

Recommended values: Typically set to 1/3 – 2/3 of the setMaxSplats value, depending on scene density and device tier. See Device Tier Recommended Configurations at the end of this page.

5. Limit Rendering Start LOD — setStartLod

Controls the highest precision level. LOD 0 is the finest; higher values mean lower precision.

lccObj.setStartLod(0); // Finest quality (desktop default)
lccObj.setStartLod(1); // Skip finest level (mobile default)
lccObj.setStartLod(2); // Skip first two levels (very low-end devices)

The SDK builds multi-level LOD data for scene content. LOD 0 contains full precision data, LOD 1 has approximately 1/2 the splat count of LOD 0, and so on with each subsequent level. setStartLod limits the finest LOD level that the scheduler can select: setting it to 1 means LOD 0 data will not be loaded even when the camera is close to an object.

Performance impact:

SettingClose-up QualitySplat Count ReductionUse Case
setStartLod(0)Highest—High-end PC
setStartLod(1)Medium~50%Mid-range PC and below, all mobile
setStartLod(2)Lower~75%Low-end PC / Mobile

6. Limit Maximum Rendering Distance — setMaxDistance

Controls the maximum rendering distance from the camera, in meters. Content beyond this distance will not be downloaded, decompressed, or rendered.

lccObj.setMaxDistance(200); // Desktop default
lccObj.setMaxDistance(100); // Mobile default

Reducing the maximum distance decreases the number of visible nodes, lowering the full pipeline cost of network downloads, CPU sorting, and GPU rendering. Suitable for indoor or close-range viewing scenarios.

Note: The SDK has a built-in altitude-adaptive mechanism — when the camera rises above 20 meters, the distance limit is automatically relaxed, allowing an overhead view to see farther.

Reference values:

PlatformRange
PC100 – 240
Mobile80 – 110

See Device Tier Recommended Configurations at the end of this page.

7. LOD Auto Optimization — setLodAutoLevelUp

When enabled, the SDK automatically improves the precision of certain nodes when the rendering budget has surplus capacity.

lccObj.setLodAutoLevelUp(true); // Enable (recommended for mid-to-high-end devices)
lccObj.setLodAutoLevelUp(false); // Disable (recommended for low-end devices or stable frame rate)

When the actual rendered splat count is below the setMaxSplats limit (e.g., the camera is facing an open area), the auto optimization mechanism allocates the remaining budget to nearby nodes, automatically loading higher-precision LOD data to enhance detail.

Trade-off: Enabling this improves visual quality, but may trigger additional data downloads and decompression, potentially causing occasional frame rate fluctuations on low-end devices.

8. Spherical Harmonics Lighting — useShcoef

Spherical harmonics lighting (SH) enables Gaussian splat colors to change with the viewing angle, producing more realistic reflections and glossy effects. The SDK has this disabled by default.

// Check if data contains SH coefficients before enabling
if (lccObj.hasShcoef()) {
    lccObj.useShcoef(true, (percent) => {
        console.log('SH loading: ' + (percent * 100).toFixed(1) + '%');
    });
}

// Disable
lccObj.useShcoef(false, () => {});

When enabled:

  • Surface reflections and gloss on objects change naturally with viewing angle
  • Rendering quality is significantly improved, especially for materials like metal, glass, and lacquer

Performance cost:

  • Increased GPU memory usage for storing additional RGB spherical harmonics coefficients
  • Increased GPU vertex shader computation for evaluating 15 additional SH basis functions
  • For LCC format, additional SH data files need to be downloaded

Recommendation: Enable only on high-end desktop devices. Not recommended for mobile.

9. Other Optimization Options

Local Caching (IndexedDB)

Enable local data caching via useIndexDB: true (enabled by default). On subsequent visits to the same scene, data is loaded directly from local storage, significantly reducing load times.

LOD Smooth Transition

LCC2 supports LOD smooth transitions (enabled by default), reducing visual popping during LOD switches:

lccObj.setSmooth(true); // Enable (default)
lccObj.setSmooth(false); // Disable

This feature constrains LOD differences between adjacent spatial nodes, eliminating precision discontinuities. The CPU overhead is minimal, and it is recommended to keep it enabled.


Device Tier Recommended Configurations

PC

TiersplatCountnodeSplatCountdistancestartLoddevicePixelRatio
High10,000,0006,000,0002400Native dpr
MidHigh4,200,0001,500,0002201Native dpr
Balance2,200,0001,000,0002001dpr > 1 ? 1.4 : dpr
MidLow1,800,000700,00015021
Low900,000400,0001002dpr > 1 ? 0.8 : 0.5

Mobile

TiersplatCountnodeSplatCountdistancestartLoddevicePixelRatio
High2,600,0001,000,0001101Native dpr
MidHigh1,800,000800,0001001Native dpr
Balance1,000,000600,000901dpr > 1 ? 1.2 : dpr
MidLow800,000400,0008021
Low500,000300,0008020.8
Prev
Introduction
Next
Graphics Configuration