用代理网格为 3DGS 提供真实法线
概述
ProxyMesh 是 LCC4Unreal 的专业版功能,通过放置代理网格提供真实的深度和法线信息,是唯一具有真实形状着色的法线模式。适用于 LCC2 管线的全部格式(.lcc2 / .sog / .spz / .ply)。授权说明见版本与授权。
注:ProxyMesh 需要有效授权。未授权时自动回退为 Fixed 模式。
代理网格是什么
3DGS 数据本身没有表面法线,也不写入 GBuffer,无法参与常规光照计算。代理网格的作用是提供一份与 3DGS 形状一致的几何体,插件从它身上取得深度、法线以及 GBuffer 中的材质属性,交给引擎光照与后处理使用;这份网格自身不出现在最终画面里。
3DGS 数据 代理网格
(颜色、不透明度) (深度、法线、材质属性)
│ │
│ ▼
│ 写入 GBuffer
│ │
│ ┌───────────────┴───────────────┐
│ ▼ ▼
│ 引擎光照计算 依赖 GBuffer 的
│ (方向光、点光、阴影) 后处理(反射、折射等)
│ │ │
│ └───────────────┬───────────────┘
▼ ▼
颜色来源 ──────────────▶ 合成最终画面
│
▼
代理网格自身不可见
换句话说:画面里看到的颜色来自 3DGS,光照表现来自代理网格。
网格的来源不受限制,插件只读取它的渲染结果,不关心它怎么来的。常见的几种:
| 来源 | 说明 |
|---|---|
| 与 3DGS 一同生成的近似网格 | 采集流程中输出的网格,形状贴合度最高,是首选 |
| 3DGS 转换得到的网格 | 用第三方工具从 3DGS 重建出的网格 |
| 自行建模的网格 | 在 DCC 软件中按 3DGS 形状建模,适合需要精确控制的场景 |
| 基础几何体拼接 | 用 Cube、Plane 等基础网格拼出大致体块,适合建筑、地面这类规则形状 |
唯一的要求是网格与 3DGS 在空间上形状贴合。贴合得越准,光照表现越接近真实;偏差过大时,光照方向会与画面中看到的形状不符。
网格精度不需要高:只要体块和朝向正确,低面数的简化几何体就够用。
材质的作用
代理网格的材质属性会随 GBuffer 一起被读取,因此它决定了 3DGS 表面对光照的响应方式。
只需要基本光照时,白盒材质即可,不需要贴图。要做依赖材质属性的效果时,就必须在网格的对应位置使用相应的 PBR 材质,例如:
- 水面反射与折射:在水域位置使用金属度、粗糙度合适的水面材质
- 金属高光:在金属结构位置给出对应的 Metallic 与 Roughness
- 粗糙表面:用高 Roughness 抑制不该出现的高光
材质属性与实际形状不匹配时,光照结果会与画面中看到的 3DGS 外观不符,例如本该粗糙的墙面出现镜面高光。
快速设置
步骤 1:放置 ProxyMesh Actor
- 在编辑器中通过 LCC4Unreal 插件面板添加
ALCC2ProxyMeshActor - 为其
StaticMeshComponent分配一个 StaticMesh(来源不限,见上节) - 调整 ProxyMesh 位置使其与 3DGS 内容在空间上重叠

在场景中放置 ALCC2ProxyMesh Actor
步骤 2:启用 ProxyMesh 模式
- 选中 LCC2 管线的 Actor(
ALCC2Actor/ASogActor/ASpzActor/APlyActor) - 在 Details 面板找到LightMode修改为Lit模式
- 在 Details 面板找到 LCC2Component 的 Lighting 分类
- 将
NormalMode设置为ProxyMesh

启用 Lit 并将 NormalMode 设置为 ProxyMesh
步骤 3:验证
- 改变场景光照方向,观察 3DGS 是否产生自投影效果
- 确认代理网格在最终画面中已隐藏

ProxyMesh 提供真实法线后的光照效果
ProxyMesh使用实例

ProxyMesh 的设置过程与光照效果
ALCC2ProxyMesh
代理 Actor,与 LCC2 管线的 Actor 在 NormalMode = ProxyMesh 下配对使用。
属性
| 属性 | 说明 |
|---|---|
| StaticMeshComponent | 提供场景深度和法线的静态网格 |
默认变换
- 缩放 (100, 100, 100):网格默认单位为米,UE 为厘米
- 旋转 (0, 180, 0):补偿网格生成管线与 UE 前向轴方向相反
行为
- StaticMesh 有效时自动启用 CustomDepth 渲染
- StaticMesh 为空时记录警告并禁用 CustomDepth
授权判定
ProxyMesh 模式需要专业版授权,详见版本与授权。未授权时自动回退为 Fixed 模式,存储的属性值不会被修改。
运行时切换
NormalMode 可在运行时通过蓝图或 C++ 修改,下一帧生效。
蓝图用法
生成 ProxyMesh
SpawnActor->Class: ALCC2ProxyMesh
→ 设置 StaticMeshComponent 的 StaticMesh
→ 调整位置对齐 3DGS 内容
切换模式
LCC2Component->NormalMode = ProxyMesh
最佳实践
- 网格覆盖: 确保代理网格覆盖与 3DGS 内容相同的空间区域。
- 网格精度: 场景几何体的简化近似即可,不需要高面数。
- 多个 Actor: 可以放置多个
ALCC2ProxyMeshActor 覆盖不同区域。 - 无需显式绑定: 不需要将 ProxyMesh 链接到特定的 Actor,配对自动完成。
- 向后兼容: 不使用 ProxyMesh 的项目行为与升级前完全一致,无额外开销。
故障排查
ProxyMesh 没有效果
- 确认
NormalMode已设为ProxyMesh - 确认许可证有效
- 确保 ProxyMesh Actor 已分配有效的 StaticMesh
- 确认 ProxyMesh 在空间上与 3DGS 内容重叠
警告:"has a null StaticMesh"
为 ALCC2ProxyMesh Actor 分配 StaticMesh 即可解决。警告已节流,每个实例仅发出一次。
最终画面中可见白盒颜色
- 确保至少一个 LCC2Component 处于 ProxyMesh 模式
- 如深度匹配过严,调整
LCC2.ProxyMeshDepthEpsilon
光照效果不正确
- 验证代理网格法线是否为实际场景几何体的合理近似
阴影只在近处出现,远处被截断
引擎自身的问题。选中 ProxyMesh Actor,把 StaticMeshComponent 的 Far Shadow 关闭再重新打开即可恢复完整阴影。