UE5 UDS(Ultra Dynamic Sky)动态天气天空如何采用官方光源和雾

提问

但是如果level中,只有UDS,没有放置DirectionalLight或者SKyLight,相比起有,会有什么区别呢,我看如果只有UDS,也会有光

回答

你问到的是 UDS 是否自带光源如果关卡里没有 DirectionalLight / SkyLight 会发生什么。这是使用 UDS 时最容易混淆的点,我给你讲得可以非常清楚。


🔥 关键结论一句话:

UDS 内部自带一盏 Directional Light(太阳)和一盏 Sky Light(环境光)。
所以即使你关卡里完全没有 DirectionalLight 和 SkyLight,UDS 依然会发光、产生阴影、产生天空环境光。


🌞 1. UDS 内部到底包含什么光?

Ultra Dynamic Sky Blueprint 其实包含了:

✔(1)一个 DirectionalLight Component(蓝图内部组件)

用于当成"太阳"。

✔(2)一个 SkyLight Component

自动捕捉天空生成反射。

✔(3)一个 Sky Dome Mesh(天空球)

有动态天空材质。

✔(4)时间系统(太阳位置计算)

会自动旋转 DirectionalLight 来生成日夜循环。

所以,这个蓝图自身就已经是一套 完整的天空 + 太阳 + 天光 系统。


🌞 2. 那为什么关卡里不放 DirectionalLight / SkyLight 也有光?

因为 UDS 自己内部带的那一套光是 蓝图内部组件

你在 World Outliner 看不到这些内部组件,它们藏在蓝图内部,但 Play 时照样作用于场景。


⚠ 那为什么还要引用外部 DirectionalLight / SkyLight?

因为 UE 官方不希望你使用太多"内部组件光"(蓝图自带的光),原因如下:


🚨 3. Blueprint 内部的光源 vs 关卡独立光源:核心区别

这里直接分情况,让你立即看懂差别。


情况 A:使用 UDS 自带的光(你当前这种)

优点:

  • 不用自己放 DirectionalLight / SkyLight
  • UDS 自动处理一切
  • 一般效果没问题,能正常照亮场景

缺点(非常重要):

  1. 光源不在 Outliner,上层难管理

    • 你无法直接点选太阳去调参数(强度、阴影、光照质量)。
  2. 不方便调光照烘焙参数 / 阴影质量

    • 比如设置 ray traced shadows、volumetric scattering intensity、light shaft bloom,都很麻烦。
  3. PostProcess 和其他系统无法自动识别这些光的角色

    一些后期系统(如 Auto Exposure)可能读取不到这些内部光源的元数据。

  4. 你没办法把这盏光作为共享光源给其他系统

    例如:

    • Ultra Dynamic Weather(天气系统)
    • Water systems(如 Waterline Pro 雾散射)
    • 体积云(Volumetric Clouds)
      它们通常需要一个"指定太阳光",而内部光源不容易引用。

因此:

用内部光 → 虽然可用 → 但不符合 UE 的最佳实践。


情况 B:UDS 引用你关卡里的 DirectionalLight 和 SkyLight(推荐)

这是 UE 官方推荐、游戏项目中最常用的方式。

优点:

  1. 你在 Outliner 能看到并管理光源

    可以随时调太阳的阴影、强度、颜色。

  2. 全项目统一使用同一盏太阳

    任何系统都可以引用它(后期、体积云、海洋插件等)。

  3. 更容易与 UE5 新光照系统兼容

    包括:

    • Lumen
    • Volumetric Clouds
    • SkyAtmosphere
    • Exponential Height Fog 的方向散射
      等全部依赖明确的 DirectionalLight。
  4. 你可以关闭 UDS 内部光源,只保留蓝图功能

    这是绝大多数专业 UE 项目的做法。


那么应该怎么选?

如果你只是做简单演示:

✔ 只用 UDS 自带光 = 可以

(你现在这样没问题)

如果你是做专案、游戏、真实海况仿真(你现在做的是仿真实验室级别):

一定推荐:用自己的 DirectionalLight + SkyLight,然后引用给 UDS。

因为:

  • 大部分真实海洋插件(Waterline Pro、Oceanology、Ultra Dynamic Weather)

    都依赖:

    一个明确的外部 DirectionalLight 作为"太阳"


🔍 你最关心的对比总结(非常直观)

项目 只有 UDS(内部光) UDS + 外部灯光(推荐)
太阳光是否存在 ✔ 内置 ✔ 由你提供
光源是否可在 Outliner 调节 ❌ 不可 ✔ 可
是否能调阴影质量 / 光照参数 ❌ 不方便 ✔ 方便
SkyLight 环境光可控性 ❌ 限制大 ✔ 完整可控
是否能给其他系统引用太阳光 ❌ 很难 ✔ 完全可行
是否是专业项目做法 ❌ 否 ✔ 是

🧩 你现在应该怎么做?(快速指引)

你可以按照这些步骤优化你的场景:


📌 Step 1:在关卡放一盏 DirectionalLight(命名:SunLight)

📌 Step 2:放 SkyLight(命名:SkyLight)

📌 Step 3:选中 UDS → 在 Details 里找到:

  • Sun Light Actor / Directional Light Actor → 绑定 SunLight
  • Sky Light Actor → 绑定 SkyLight

📌 Step 4:禁用 UDS 内部光(如果有开关):

常见设置:

复制代码
Use Built-In Sun Light        → 关闭
Use Built-In Skylight         → 关闭

这样 UDS 就完全接管外部光源。


🎯 如果你想,我可以帮你做到「最优配置」

你只要贴一个 UDS Details 面板(Lighting、Sun、Skylight 部分)截图给我,我可以:

  • 明确告诉你你的版本有哪些内置光
  • 哪些要关、哪些要保留
  • 哪些要引用外部光
  • 哪些参数与你的 Waterline Pro 海洋系统联动

这样你的仿真场景就可以做到:

真实天空 + 真实太阳方向 + 海浪真实散射 + 日夜动态切换 + 高质量反射 + 稳定后期曝光

追问

  1. 这是UDS的Details面板,引用就是在这里引用吗?
  2. 是的话,Moon Light Actor也可以引用DirectionalLight,需要吗?
  3. 我还对Fog进行了引用,如你所见。你认为合理吗
  4. 引用了以后,应该还需要禁用掉自带的吧?

回答

下面我逐条、非常明确地回答你的 4 个问题,并且告诉你 为什么这样做 ------你会一眼就看明白整个 UDS 的工作机制。


1. 这是 UDS 的引用位置吗?(是)

是的,你截图里的这块:

复制代码
Custom Sun Light Actor
Custom Moon Light Actor
Custom Sky Light Actor
Custom Height Fog Actor

就是 UDS 官方提供的外部光源引用入口。

✔ 你把外部 DirectionalLight

✔ 外部 SkyLight

✔ 外部 ExponentialHeightFog

都绑定进去 ------ 完全正确。

这相当于告诉 UDS:

"不要用你内部自带的光了,用我场景里放的这些光。"

这是专业 UE 项目和仿真项目中标准做法。


2. Moon Light Actor 是否应该引用 DirectionalLight?

❌ 不应该。

✔ 永远不要把 "月亮" 也指到 DirectionalLight。

原因:

  • 太阳 =一盏 DirectionalLight
  • 月亮 = 另一盏单独的 DirectionalLight(光更弱、颜色更冷)

为什么不能共用一盏灯?

因为 UDS 的日夜系统中:

  • 太阳在白天从地平线升起 → 亮度变强
  • 月亮在晚上升起 → 月亮有独立的角度、亮度、颜色

UDS 会自动:

  • 白天让太阳光有效 + 月亮光关闭
  • 夜晚让月亮光有效 + 太阳光关闭

如果你把 太阳和月亮引用成同一盏 DirectionalLight

  • 夜晚太阳也会亮 = 假光
  • 月亮无法独立调亮度
  • 阴影错乱
  • 整个日夜系统失效

⭐ 正确做法:你现在的设置就对了:

复制代码
Custom Sun Light Actor  →  DirectionalLight
Custom Moon Light Actor →  None  (或者创建单独的 MoonLight)

如果你需要真实夜景(比如月光照亮海面、Waterline Pro 反射月亮)

→ 我可以教你创建一盏专用月光。


3. Height Fog Actor(雾)引用是否合理?

✔ 很合理,而且 强烈推荐 这样做。

引用后 UDS 会控制雾的:

  • 雾的颜色(清晨偏蓝、夕阳偏橙、夜晚偏黑蓝)
  • 雾的浓度
  • 高度变化
  • 随太阳高度调整亮度

效果比你手动调的 真实 100 倍

尤其是你做仿真海面环境,这种随时间变化的雾非常重要。

所以你这样:

复制代码
Custom Height Fog Actor → ExponentialHeightFog

完全正确。


4. 引用外部光源后,需要关闭内置光源吗?(是)

需要。

否则会出现:

  • 场景中有 两盏 DirectionalLight(一个内部的,一个外部的)
  • 场景多出一盏 Skylight(影响曝光)
  • UDS 有两套光源在计算 → 阴影方向错误、曝光异常

⭐ 如何关闭 UDS 自带光源?

在 UDS Details 里搜索:

复制代码
Use built-in
use internal
auto create light
auto sun
auto skylight

常见开关:

  • Use Built-in Sun Light → OFF
  • Use Built-in Skylight → OFF
  • Use Built-in Moon Light → OFF
  • Create New Skylight → OFF
  • Use Default Fog → OFF

(名字依版本不同,但你搜索 "sun""sky""light""internal" 就能找到)

关闭后:

✔ 你的 DirectionalLight = 唯一太阳

✔ 你的 SkyLight = 唯一天光

✔ 你的 Fog = 唯一雾系统

✔ UDS 只负责"驱动"和"控制",不会额外生成光源

这是专业 UE5 项目标准做法。


📌 最佳配置总结(你当前状况的最优方案)

你现在的引用设置:

复制代码
Sun Light Actor → DirectionalLight   ✔
Moon Light Actor → None              ✔(以后可创建)
Sky Light Actor → SkyLight           ✔
Height Fog Actor → ExponentialFog    ✔

接下来你需要做的只有一件事:

👉 在 UDS 里把所有 "Use internal light / built-in light / auto create skylight" 相关选项关闭。

这样就完成了专业级配置:

  • 单一太阳
  • 单一天空反射
  • 单一雾系统
  • UDS 负责驱动这些光源的角度、亮度、颜色
  • 水面、天空、阴影全部一致、真实、稳定

如果你愿意,我可以更进一步帮你:

如果你贴一张:

✔ UDS 的 "Lighting" 和 "Sun/Moon" 设置截图

✔ 你的 DirectionalLight 的 Details 截图

✔ 你的 SkyLight 的截屏

我可以帮你做到:

  • 最正确的太阳阴影设置
  • 最真实的天空与海面互动
  • Waterline Pro + UDS 的光照最佳配合
  • 白天 / 夜晚 / 夕阳 / 清晨的真实过渡
  • 自动曝光最佳设置(你之前问过曝光问题)
  • 远处雾 + 天空雾 + 海面光线全部统一

一句话:

我能帮你把你的海面仿真场景打磨到"电影级别真实感"。

你愿意继续优化的话就给我再发几个截图即可。

提问

是在这里设置吗

回答

非常肯定地说:

对,就是在这里设置!就是这几个 "Use Custom Actor / Use Built-In Component" 开关。

你贴的截图正好显示了 UDS 最关键的光源选择开关 ,这就是用于 禁用 UDS 自带光源、并改成使用关卡中你自己的灯光的地方。

下面我逐项讲得清清楚楚,让你 100% 理解每个选项是干什么的。


🔥 ⭐ UDS 核心光源控制就在这里:

复制代码
Component Selection
    Sun Light         → Use Custom Actor / Use Built-In Component
    Moon Light        → Use Custom Actor / Use Built-In Component
    Sky Light         → Use Custom Actor / Use Built-In Component
    Height Fog        → Use Custom Actor / Use Built-In Component

每一行代表一个系统:

项目 功能
Sun Light 太阳光(Directional Light)
Moon Light 月亮光(第二盏 Directional Light)
Sky Light 天空反射光
Height Fog 雾系统(Exponential Height Fog)

🔧 你应该怎么设置?(正确专业的仿真项目配置)

按你现在的使用方式(你已经有外部 DirectionalLight、SkyLight、ExponentialFog),

应该设置成下面这样:


Sun Light(太阳光) → Use Custom Actor

含义:

"用关卡里的 DirectionalLight,不用 UDS 内置的太阳光。"

这是正确做法。


❌ Moon Light(夜晚月光)→ 不要用 Sun Light,也不要 Built-in 除非你需要月光

如果你还没有月光:

📌 推荐设置:

复制代码
Moon Light → Use Built-In Component

或者设成:

复制代码
Moon Light → None(如果版本支持 None)

千万不要选 Use Custom Actor 然后绑定 DirectionalLight。

(太阳 = 一盏灯,月亮 = 另一盏灯)


✅ Sky Light(环境光) → Use Custom Actor

含义:

"用你场景里的 SkyLight,不用 UDS 自带 SkyLight。"

非常推荐。

这样你可以控制 SkyLight 的:

  • 反射捕捉分辨率
  • 是否实时捕捉
  • 强度
  • Lumen 环境贡献

✅ Height Fog(高度雾) → Use Custom Actor

含义:

"使用你场景里的 ExponentialHeightFog,让 UDS 控制它的颜色/浓度。"

你的做法完全合理,非常推荐。


🔥 最终结果总结(你应该达到的状态)

你的目标就是做到:

复制代码
Sun Light      → Use Custom Actor → 绑定你的 DirectionalLight
Moon Light     → Use Built-In Component(如果你不需要月光)
Sky Light      → Use Custom Actor → 绑定你的 SkyLight
Height Fog     → Use Custom Actor → 绑定你的 ExponentialFog

这样:

  • UDS 只负责驱动(太阳位置/雾颜色)
  • 真实光源全部是你自己的
  • 灯光在 Outliner 可见,可调
  • 不会出现重复太阳、重复 Skylight、重复雾的问题
  • 完全符合 UE5 标准做法
  • Waterline Pro、雾、天空颜色、曝光都能统一一致

追问

总结一下添加UDS以后的其他细微操作

回答

添加 UDS 后:

✅ 必做:

  • UDS 绑定外部 DirectionalLight/SkyLight/Fog
  • 禁用 "Use Built-in Light Components"
  • PostProcess Exposure 固定或合理设置
  • 清理掉旧天空(SkySphere / SkyAtmosphere),如果原来有的话
  • 保证只有 1 盏太阳、1 盏天空光、1 个雾
相关推荐
日月云棠3 小时前
UE5源码分析之Editor——AnimationSettings模块全面分析
ue5
远离UE41 天前
UE5 SF_VertexShader 如何使用
ue5
电子云与长程纠缠1 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 上
开发语言·学习·3d·ue5·游戏引擎
电子云与长程纠缠1 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 下
开发语言·学习·游戏·ui·ue5
远离UE42 天前
UE5 GPU内部异步
ue5
1204157137 肖哥2 天前
UE5 PCG PCGBlueprintElement简介
ue5
dong1326972 天前
UE5FPS游戏开发教程(四)
ue5
dong1326973 天前
UE5FPS游戏开发教程(三)
ue5
日月云棠3 天前
UE5源码分析之Editor——AnimationBlueprintLibrary模块全面分析
ue5
远离UE43 天前
UE5 ECS 原理
ue5