阴影接收开发指南
LCC Unity SDK 支持 Mesh 物体动态投射阴影到 3DGS 表面,实现更好的光影效果。下面介绍实现动态阴影的完整步骤。
步骤 1:创建场景与游戏对象
在 Unity 中创建一个全新的场景,Unity 默认会创建 Main Camera 和 Directional Light。
设置 Main Camera
在 Hierarchy 窗口中选择 Main Camera,在 Inspector 窗口中按下图设置其属性。

设置 Main Camera 的属性
创建 LCCManager
在 Hierarchy 窗口空白处单击鼠标右键,在弹出的菜单中选择 Create Empty,创建一个空游戏对象,命名为 LCCManager,将其 Transform 归一,并通过 Add Component 为其添加 LCCManager 脚本。

创建 LCCManager 游戏对象并添加 LCCManager 脚本
创建 LCCRenderer
在 Hierarchy 窗口空白处单击鼠标右键,选择 Create Empty,创建一个空游戏对象,命名为 LCCRenderer,将其 Transform 设置为 Rotation.x = -90、Scale.x = -1。

创建 LCCRenderer 并设置 Transform(Rotation.x = -90、Scale.x = -1)
注意:
LCCRenderer 游戏对象的 Transform 设置(Rotation.x = -90、Scale.x = -1)是与 LCC 数据坐标系的对齐。关于坐标系对齐的详细说明,参见 Unity SDK 简介 中的「LCC 数据坐标系」。
开启 Directional Light 阴影
在 Hierarchy 窗口中选择 Directional Light 游戏对象,在 Inspector 窗口中确保已开启阴影功能。

确保 Directional Light 已开启阴影功能
步骤 2:添加 Render Feature
- 在 Unity 菜单栏中选择 File → Project Settings,在左侧选择 Graphics,确认当前使用的 Default Render Pipeline Asset。本示例为 URP(Universal Render Pipeline Asset)。

在 Graphics 设置中确认 Default Render Pipeline Asset
点击该 Asset,在 Project 窗口中定位到对应的资源文件,找到与之关联的 Renderer(本示例为
URP_Renderer.asset)。选中该 Renderer 资源文件,在 Inspector 窗口中点击 Add Renderer Feature,添加 Splat Shadow Mask Feature。

在 URP Renderer 中添加 Splat Shadow Mask Feature
步骤 3:编写脚本开启阴影接收
新建一个 C# 脚本,命名为 LCCShadow.cs,代码如下:
using LCCCore;
using UnityEngine;
public class LCCShadow : MonoBehaviour
{
public LCCManager m_manager;
public string m_FilePath;
private LCCCore.Renderer m_renderer;
void Start()
{
m_manager.SetPlatformType(PlatformType.PC);
m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);
Debug.Log("Started ");
m_renderer = m_manager.GetRender(this.transform);
m_renderer.Load(m_FilePath, onProgress, onComplete);
}
private void onProgress(float _progress)
{
Debug.Log($"[LCCRenderer] file load progress: {_progress:P1}");
}
private void onComplete()
{
Debug.Log($"[LCCRenderer] file loaded");
m_manager.SetShadowReceive(true);
//m_manager.SetShadowColor(new Color(0, 0, 0, 1.0f));
//m_manager.SetShadowStrength(0.5f);
}
}
注意:
阴影接收功能需要在 LCC 场景加载完成后开启,因此
SetShadowReceive(true)在onComplete回调中调用。
步骤 4:挂载脚本并设置数据路径
- 将
LCCShadow.cs脚本挂载到 Hierarchy 窗口中的 LCCRenderer 游戏对象上。 - 在 Inspector 窗口中,将 LCCManager 游戏对象拖动到脚本的 Manager 属性上。
- 在脚本的 File Path 属性中填写 LCC 文件的路径地址。
步骤 5:创建投射阴影的 Mesh 物体
- 在场景中创建一个 Cube 对象,并确保其 Cast Shadows = On。
- 调整 Cube 到合适的位置,以便观察它投射到 3DGS 表面上的阴影。
步骤 6:运行
在 Game 窗口中点击 Play 按钮,实时改变 Cube 的位置,即可观察它投射的动态阴影。

运行后 Cube 向 3DGS 表面投射动态阴影
常见问题:关闭兼容模式
如果 Unity Console 窗口报错且没有出现阴影,请关闭兼容模式:通过 Edit → Project Settings → Graphics 打开设置面板,选择 URP 选项卡,不要勾选 Render Graph → Compatibility Mode (Render Graph Disabled) 后的多选框。

不要勾选 Render Graph 兼容模式(Render Graph Disabled)
关键步骤
Mesh 物体对象向 3DGS 表面投射阴影的关键步骤:
- 确保场景中有 Directional Light 光源,并已开启阴影功能。
- 确保场景中有投射阴影的 Mesh 物体对象,并已开启阴影投射(Cast Shadows = On)。
- 确保在 URP Renderer 中添加了 Splat Shadow Mask Feature 渲染特性。
- 确保在 LCC 场景加载完成后通过代码开启阴影接收功能(
SetShadowReceive(true))。
阴影相关 API
LCC Unity SDK 通过 LCCManager 提供了以下三个阴影相关 API。它们都需要在 LCC 场景加载完成后调用(即在 onComplete 回调中),且 SetShadowColor()、SetShadowStrength() 需要先开启 SetShadowReceive(true) 才会生效。
SetShadowReceive
// 返回值:void
public void SetShadowReceive(bool enable)
开关点云阴影接收功能。开启后,场景中 Mesh 物体的阴影可以投射到 3DGS 点云表面上。
| 参数 | 类型 | 说明 |
|---|---|---|
enable | bool | 是否接收阴影 |
调用示例:
m_manager.SetShadowReceive(true);
说明:
- 默认关闭。
- 需要场景中有投射阴影的 Mesh 物体和 Directional Light 光源。
- 开启后会启用
_SPLAT_SHADOW_ONshader keyword。
SetShadowColor
// 返回值:void
public void SetShadowColor(Color color)
设置阴影区域的颜色。
| 参数 | 类型 | 说明 |
|---|---|---|
color | Color | 阴影颜色(RGBA) |
调用示例:
m_manager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
说明:
- 默认值为
(0.3, 0.3, 0.3, 1)。 - 需先开启
SetShadowReceive(true)。
SetShadowStrength
// 返回值:void
public void SetShadowStrength(float strength)
设置阴影强度。0 为无阴影,1 为最强阴影。
| 参数 | 类型 | 说明 |
|---|---|---|
strength | float | 阴影强度,取值范围 [0, 1] |
调用示例:
m_manager.SetShadowStrength(0.8f);
说明:
- 默认值为
1.0。 - 取值范围
[0, 1],超出范围会自动钳制。 - 需先开启
SetShadowReceive(true)。