XGRIDS文档
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 灵视 P1

    • 产品概述
    • 设备基本操作
    • 使用 LCC Scan App
    • 维护及保养
    • 常见问题
  • 灵光 K 系列

    • 灵光 K1

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 地图融合
      • 典型场景路线规划建议
      • 注意事项
      • 常见问题
    • 灵光 K2

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 地图融合
      • 典型场景路线规划建议
      • 注意事项
      • 常见问题
  • 灵光 L 系列

    • 灵光 L2 Pro

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 实时测量功能
      • 附录
      • 常见问题
  • 配件

    • 补光灯

      • 安装指导
      • 基本操作
      • 常见问题
  • Lixel Studio

    • 版权
    • 安装与激活
    • 界面说明
    • 文件
    • 工程处理
    • 工具
    • 平面绘制
    • 行业应用
    • 设置
    • 设备感知
  • Lixel CyberColor

    • LCC Studio

      • 入门
      • 版本与更新
      • 下载与安装
      • 界面概览与导航
      • 重建前工作
      • 模型重建
      • 单模型重建
      • 地图融合
      • 空地融合
      • 航拍重建
      • 我的模型
      • 其他功能
      • 设置与账号
      • 转换工具
      • 视频重建
      • 常见问题 / FAQ
    • LCC Scene Editor

      • 版本与更新
      • 账号与登录
      • 产品概览与主页
      • 编辑器界面介绍
      • 三种场景漫游快捷操作
      • 文件
      • 设置
      • 编辑操作
      • 窗口
      • 视图工具栏
      • 资产与属性
      • 左侧工具栏
      • 视点
      • 跳转点
      • 天空盒
      • 标注
      • 测量
      • 场景漫游
      • 场景报告
      • 智能户型图(3D Layout)
      • 小地图
      • 预览模式(Viewer)
      • 帮助
      • 常见问题 / FAQ
      • 出生点
    • LCC Model Editor

      • 版本与更新
      • 新手指引
      • 概览与界面
      • 文件操作
      • 选择器
      • 编辑操作
      • 测量
      • 调色
      • 资产管理
      • 设置与帮助
      • 常见问题 / FAQ
    • 采集指南

      • 概述
      • 采集设备总览
      • 通用采集原则
      • 室内场景采集
      • 室外场景采集
      • 大场景采集(地图融合)
      • 空地融合采集
      • 物体采集
      • 人物采集
      • 视频重建采集
      • 高清补拍
      • 控制点(灵视 P1)
      • 常见问题与排查
    • LCC Studio Linux

      • 产品概要说明
      • 基本架构说明书
      • 安装部署说明书
      • 容器启动参数说明书
      • CodeMeter离线授权部署说明书
      • API指令集说明书
      • 附录-开发者数据说明书
      • 附录-错误码列表
      • 单机多卡集群部署QuickStart
    • 历史版本
  • Plugin & SDK

    • Unreal

      • 介绍
      • 快速入门 - Windows
      • 快速入门 - Linux
      • 快速入门 - Quest3
      • 版本与授权
      • 渲染
      • Tiled 光栅化(实验性)
      • 画面调节
      • 法线与光照
      • 场景编辑
      • 性能参数说明
      • 性能优化指南
      • 第三方与引擎插件集成
      • 代理网格
      • 加载动画
      • 碰撞
      • 寻路系统支持
      • 单层水支持
      • 本地化
      • 常见问题
      • 故障排查
      • 日志与诊断
      • 联系我们
      • 最佳实践

        • 用 LixelStudio 网格为 3DGS 重打光
      • API 参考

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • 更新日志

        • v3.4.0
        • 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
    • X-Brain 系列

      • 产品概述
      • 快速开始
      • 核心概念
      • 集成指南
      • API 参考
      • 数据类型
      • ROS2 桥接
      • 示例程序
      • 部署与网络
      • 排障与 FAQ
      • 版本与发布
    • Web

      • 介绍
      • 渲染性能优化指南
      • 显卡配置
      • 常见开发问题
      • API参考

        • 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
      • 更新日志

        • 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

用 LixelStudio 网格为 3DGS 重打光

插件支持混合重打光:把 3DGS 与同比例的网格模型结合使用,让 3DGS 获得接近网格的光照响应,同时还能产生自阴影。

效果取决于 3DGS 下方那份网格的几何精度。网格与 3DGS 对齐得越好,光照响应和阴影就越真实。

原理与参数见代理网格,法线模式的取舍见法线与光照。

选哪种网格

LCC Studio 和 LixelStudio 都能生成网格,但用途不同。

LCC Studio 网格LixelStudio 网格
表面精度较粗糙更贴合真实形状
文件体积小大
适合碰撞检测重打光

用于碰撞时选 LCC Studio 网格就够了,见碰撞。用于重打光要选 LixelStudio 网格。

LCC Studio 网格:

LCC Studio 网格整体
LCC Studio 网格局部

LixelStudio 网格:

LixelStudio 网格整体
LixelStudio 网格局部

步骤 1:把分块模型集中到一个文件夹

LixelStudio 导出的网格是分块的。场景大的时候会得到很多文件夹,每个里面有一个 .obj 文件和贴图。导入虚幻引擎前要先合并成一个网格,否则会得到许多独立的 .obj。

下面用 Blender 完成,其他三维软件同理。Blender 从官网下载。

Blender 不支持一次性把一批文件夹拖进去,得先把散在各个子文件夹里的 .obj 提取到同一层。手动拖几十个文件夹不现实,用一条 PowerShell 命令解决。

进入包含所有子文件夹的根目录,在地址栏输入 powershell 后按 Enter,终端会在当前目录打开。

在地址栏输入 powershell

在资源管理器地址栏输入 powershell

复制粘贴下面这条命令:

Get-ChildItem -Recurse -File | Move-Item -Destination .

注:命令会把所有子文件夹里的文件提取到当前目录,运行前先确认自己在正确的目录下。比如目录 A 下有 B 和 C,就要在 A 的地址栏打开 PowerShell,运行后 B 和 C 里的文件都会被移动到 A。

运行前的子文件夹

运行前的目录结构

粘贴命令

粘贴命令后执行

粘贴后按 Enter 运行,需要几秒。出现新的提示符表示执行完毕。

这时所有内容都被提取出来了,点开几个子文件夹确认里面已经清空。

提取后的文件列表

所有 .obj 与贴图已集中到同一层

步骤 2:在 Blender 中合并为一个文件

按 Ctrl + A 选中所有文件,拖进 Blender。

全选文件

全选所有文件

拖入 Blender

拖入 Blender

点击 Import Wavefront OBJ 导入。为保证朝向正确,把 Up Axis 设为 Z,Forward Axis 设为 X。

设置导入朝向

Up Axis 设为 Z,Forward Axis 设为 X

这时能看到所有贴片都已导入。

导入后的贴片

所有贴片已导入

按 A 选中所有贴片,按 Ctrl + J 合并成单个网格。场景大的时候要等一分钟左右,等它跑完。

合并后的网格

合并后得到单个网格

注:不需要整个场景参与重打光时,可以删掉用不到的部分,能提升虚幻引擎中的性能。

步骤 3:减少渲染调用

这份网格导入虚幻引擎用于重打光时,材质全都用不上。3DGS 负责画面呈现,代理网格只参与计算,材质留着既没用又占资源。

LixelStudio 网格的每张贴图在虚幻引擎里都是一次渲染调用。规模大的时候会产生大量渲染调用,直接拿去当代理网格会卡。

在 Collection 里选中网格,用 Blender 的 Python 控制台查看渲染调用次数。

Blender Python 控制台

切换到 Python 控制台

粘贴下面的命令后按 Enter 执行:

obj = bpy.context.object
print("Material slots:", len(obj.data.materials))
材质槽数量输出

输出的数值就是渲染调用次数

图中这份网格有 8859 次渲染调用。

要把渲染调用降下来,删掉所有现有材质,替换为单一材质:

import bpy

# Get the currently selected object in Blender
obj = bpy.context.object

# Make sure a valid Mesh object is selected
if obj is None or obj.type != "MESH":
    raise Exception("Please select a Mesh object first.")

# Create a new white clay material
mat = bpy.data.materials.new("M_White_Clay")
mat.use_nodes = True

# Configure the Principled BSDF shader settings
bsdf = mat.node_tree.nodes.get("Principled BSDF")
if bsdf:
    bsdf.inputs["Base Color"].default_value = (1, 1, 1, 1)  # White color
    bsdf.inputs["Roughness"].default_value = 1.0            # Fully rough / matte surface
    bsdf.inputs["Metallic"].default_value = 0.0             # Non-metallic material
    bsdf.inputs["Alpha"].default_value = 1.0                # Fully opaque

# Remove all existing material slots from the mesh
obj.data.materials.clear()

# Add the single new white material
obj.data.materials.append(mat)

# Assign every face to material slot 0
for poly in obj.data.polygons:
    poly.material_index = 0

# Print the result for verification
print("Done")
print("Material slots:", len(obj.data.materials))
print("Used material indices:", len(set(p.material_index for p in obj.data.polygons)))
print("Estimated draw calls:", len(set(p.material_index for p in obj.data.polygons)))

运行后确认渲染调用次数已经降到一次。

渲染调用降为一次

渲染调用已降为一次

步骤 4:导入虚幻引擎

把网格导出为 .obj 或 .fbx,导入虚幻引擎。

导入虚幻引擎

网格导入虚幻引擎后的效果

接着按代理网格的步骤放置 ProxyMesh Actor,并把法线模式设为 ProxyMesh。

效果不对时见代理网格故障排查。