Sky · 07

影视渲染与关卡控制

用 Sequencer 给天空做关键帧、影片渲染与路径追踪的注意事项、体积云无缝循环的做法,以及让关卡在日落时开灯、在指定时刻触发事件。

Sequencer关卡联动

用 Sequencer 给天空做动画

给 Time of Day 打关键帧

直接给 Time of Day 做动画时,先关闭 UDS 上的 Animate Time of Day, 然后对 Time of Day 变量打关键帧。这个值允许超过 24,系统会理解为进入下一天、继续向前推进。

给云量或雾打关键帧

场景里没有 UDW 时,可以直接对 UDS 的 Cloud Coverage、Fog 打关键帧。 如果场景里有 UDW,则应该改用 UDW 的手动天气状态来给这两项打关键帧,否则会被天气状态覆盖。

给云的移动打关键帧

  1. 把 Cloud Speed 设为 0。
  2. 关闭 Randomize Cloud Formation on Run 与 Clouds Move with Time of Day。
  3. 在 Sequencer 里对 Cloud Phase 打关键帧。

这样做的好处是每次回放完全一致,适合需要精确复现的镜头。

其它变量

并不是所有变量都会在运行时动态重算,所以也不是所有变量都能直接做动画。默认情况下,能直接工作的变量都已标记为可被影视引用(Expose to Cinematics)。

需要额外暴露某个变量时:在蓝图编辑器里打开 UDS,在 My Blueprint 面板找到该变量, 在变量详情中勾选 Expose to Cinematics。不过这样暴露的变量通常不会随关键帧自动更新, 需要在动画的每一帧调用对应的 Static Properties 函数强制刷新。

B 站 · 点击播放BV1zyoFBrEGw

渲染影片

用 Movie Render Queue 出片前,先把 Project Mode 改成 Cinematic / Offline: 这个模式会按最高画质配置天空,并关掉那些只在实时渲染里有意义的优化。

渲染完记得改回来

如果项目本身需要实时性能,渲染结束后务必把 Project Mode 调回 Game / Real-time,否则游戏性能会显著下降。

UDS 上还有 Cinematic / Offline Mode 分类,用来单独调整该模式下的画质档位。

路径追踪(Path Tracer)

路径追踪不原生渲染天空,而是用天光的立方体贴图代替。所以在启用了 UDS 的场景里打开路径追踪, 天空部分会受到这个限制。

为此 UDS 提供了一个补偿选项:在 Cinematics / Offline Rendering 分类里勾选 Adjust for Path Tracer,它会尽量把天空调整成适合作为路径追踪背景的样子。

另外 Fog Color 分类里的 Render Height Fog In Path Tracer Using Post Process 默认开启,用后期处理近似渲染远处的高度雾——路径追踪本身不支持高度雾。

体积云的无缝循环

需要让体积云无缝循环(例如渲染一段循环影片)时,可以在一定限制下做到。原理是让云的形成纹理在 UV 上 完整走完一个 0–1 周期,因此循环长度天然比较长,云速正常时尤其明显。

配置步骤:

分类设置值
Cloud MovementCloud Speed0(时间由 Cloud Phase 控制)
Cloud Direction沿单一轴向:0、90、180 或 270
Formation Change Speed1(用 0.5 也可以,但循环长度要翻倍)
Volumetric Clouds3D Noise Scale1
Cloud Formation Texture Scale1
Macro Variation0
3D Noise Vertical Movement0

配置好之后,把 Cloud Phase 从 0 关键帧到 100,就是一段无缝循环的云动画。 (若 Formation Change Speed 用了 0.5,则改为 0 到 200。)

夜晚自动开灯

资源里带了一个专门的组件 Light Day/Night Toggle,位于 Blueprints/Utilities 文件夹。 把它作为子组件加到任意 Actor 的灯光组件下面即可。

Light Day/Night Toggle 的层级
推荐的层级:开关组件挂在灯光组件之下,由它控制灯光。
  • 运行时,灯光的开关状态由太阳是否在地平线以上决定。默认夜里亮,可以在组件设置里反过来。
  • 默认会做一段渐亮的强度动画,模拟灯具启动;可以关掉或调整曲线。
  • 灯光状态还可以驱动一组动态材质实例上的 Light Toggle 标量参数(0–1),把材质实例加进组件的数组即可。

如果某些“灯”只是材质上的自发光、没有灯光组件,用材质函数代替蓝图: Day to Night Color 与 Day to Night Float 会根据太阳是否升起在两个输入之间切换。

B 站 · 点击播放BV1LyoTBREK9

按时间触发事件

UDS 内置了一组事件分发器,分别在日落、日出、午夜、每小时、每分钟以及自定义时刻触发。 用法是先拿到 UDS 引用——用共享函数 Get Ultra Dynamic Sky 最方便——再绑定对应事件,例如 Bind to Sunrise、Bind to Sunset。

绑定日出事件
一个最基本的绑定:拿到有效的 UDS 引用后绑定事件,太阳升起时自定义事件就会执行。
分发器触发时机输出
Sunrise / Sunset太阳越过地平线的那一分钟。可用 Sunrise Event Offset、Sunset Event Offset 提前或延后。—
Midnight午夜。—
Hourly每个经过的整点都会触发。时间被瞬间跳过多少小时,就补触发多少次。当前小时(整数)
Current Hour Changed时间变化后只触发一次,对应新的当前小时。当前小时(整数)
Every Minute每分钟一次,行为类似 Current Hour Changed。当前分钟(0–59)
自定义时刻默认不触发。需要在 Animate Time of Day 分类的 Custom Time Dispatchers 数组里填入时间点。触发的数组索引

Animate Time of Day 分类里还有一个 Time Event Dispatcher Check Period, 决定这些事件多久检查一次。默认在 Time of Day 正在变化时每秒检查一次。 自定义时刻触发时会输出数组索引,方便你在同一个事件里区分是哪个时间点到了。

天空工具材质函数

材质面板里可以搜到两个由 UDS 状态自动驱动的工具函数:

  • Day to Night Float / Day to Night Color:接收两个值,按太阳是否在地平线以上在两者之间插值。 可以设置阈值偏移(高于或低于地平线多少算切换),以及过渡区间的宽窄。
  • Active Sun or Moon Vector:太阳在地平线上时输出太阳方向的单位向量,只有月亮时输出月亮方向。 同时输出一个 0–1 的遮罩值,在日月切换的瞬间降到 0,用来掩盖依赖该向量的效果突变。