Sky · 09

性能、移动端与更新

哪些设置最吃性能、按什么顺序取舍、移动端要改什么,以及升级 UDS 时怎么不丢自己的改动。

优化取舍升级前必读

性能配置

下面只讨论 UDS 自身功能的开销,不涉及引擎通用项(动态阴影、全局光照等)——那部分优化在使用 UDS 时同样适用。 按影响从大到小排列:

Sky Mode

整个系统里最影响 GPU 的就是这一项。体积云最贵;2D Dynamic Clouds 便宜得多; Static Clouds 再便宜一些;No Clouds 最省(Space 模式除外)。

Color Mode

改成 Simplified Color 可以省掉天空大气的开销,天空颜色改用更简单的材质逻辑计算。

Project Mode

只要项目需要实时性能,务必确认是 Game / Real-time。 Cinematic / Offline 只用于离线渲染,它会在运行时套用高画质设置,严重拖慢帧率。

体积云

设置影响
Volumetric Cloud Rendering Mode影响云的渲染开销。要压低 GPU 成本时,选偏向性能的那两种模式。
View Sample Scale、Shadow Sample Scale降低可省开销,但会引入噪点与瑕疵。
Max High Frequency Noise Levels高于默认值会增加靠近/放大云时的开销,影响程度还与 High Frequency Noise Distance Scale 有关。
Two Layers要同时解算两层云,采样数需求高得多,体积材质也更复杂。

其它

  • 2D 动态云:开启 One Cloud Layer 可以略微降低天空着色器开销。
  • 天光:Sky Light Mode 有少量影响,主要来自实时捕获。想保留天光随时间/天气变化又不想付捕获成本,用 Cubemap with Dynamic Color Tinting。
  • 体积雾:开销非常大;UDS 的全局体积材质会再增加一些。体积雾是引擎特性,可扩展性设置跟随 Shadow Quality 组,且引擎的 Low / Medium 档默认完全关闭体积雾。
  • 材质:UDS 几乎所有材质都会响应全局材质质量等级,Low / Medium 下会简化。
  • 静态光照:UDS 的灯默认都是可移动的,能接受的话改成静态/固定总是更省。

两个容易被忽略的开关

设置说明
Half Rate Tick(Scalability / Performance 分类) 默认开启:帧率高于 45 时,UDS/UDW 的逻辑隔帧执行。建议保持开启。可以调低这个帧率阈值让优化在 30fps 也生效,但此时光照/天空属性最快只以 15fps 更新,快速变化时会有可见的顿挫。
Use Sky Mode Scalability Map 按 Game User Settings 里的 Effects Quality 在启动时切换 Sky Mode。例如 Medium 及以上用体积云,Low 用静态云。

另外,如果担心平行光移动导致缓存阴影频繁失效,可以用 Directional Light 分类里的 Lights Update 设置限制更新频率。

移动端注意事项

  • 先把 Basic Controls 里的 Feature Level 改成与实际打包目标一致——多数移动项目是 Mobile。这一项设错,蓝图会尝试启用设备不支持的特性,导致渲染异常。
  • Mobile 分类里定义了 Feature Level 为 mobile 时的替换规则。
  • 同一分类里的 Platform Feature Levels 映射表,可以在启动时按平台名决定 Feature Level。

如何更新 UDS

更新会覆盖 UDS 资产:你直接改在资产上的蓝图逻辑会丢失; 你自己新建的文件(配置资产、天空修改器等)不会被覆盖,会保留下来。 更新前建议备份或用版本控制,以便出问题时回滚。

注意

Fab 插件不能用来更新已经导入项目的资产包,更新必须通过 Epic 启动器完成。

情况一:UDS 仍在默认位置

  1. 关闭项目。
  2. 在启动器的 库 标签页里,于 Fab 库中找到 Ultra Dynamic Sky。
  3. 点 Add to Project,提示是否覆盖旧文件时选择允许。
  4. 如果启动器添加失败或没下载到最新版,先点 Remove Local Content 再重试。

情况二:UDS 已被移动到其它目录

这种情况需要手动搬:因为编辑器要按目标位置重写文件夹内所有资产引用,所以得先在另一个项目里做同样的移动。

  1. 在目标项目里,对 UltraDynamicSky 文件夹执行 Update Redirector References,确保没有依赖重定向器,然后关闭项目。
  2. 用启动器把 UDS 添加到一个同引擎版本的空白项目。
  3. 打开空白项目与 UDS 演示地图,等着色器编译完成。保持演示地图打开,把 UltraDynamicSky 文件夹移动到与目标项目完全一致的路径。
  4. 等待移动完成,右键整个 Content 文件夹执行 Update Redirector References。
  5. 关闭并重新打开演示地图,确认移动没弄坏东西。如果云等效果不见了,执行控制台命令 Recompileshaders All——这是资产移动后着色器编译的引擎 Bug。
  6. 关闭项目(目标项目也保持关闭),在文件管理器里把空白项目中的 UltraDynamicSky 文件夹复制到目标项目,覆盖旧文件夹。
  7. 打开目标项目,更新即完成。

更新完成后建议读一遍对应版本的更新日志,里面会写清楚需要在项目里额外做什么。

修改 UDS 的蓝图

需要改 UDS 的蓝图逻辑时,不要直接改原类,而是对它创建一个子类: 在内容浏览器里右键该类,选 Create Child Blueprint Class,在子类里覆盖具体函数。 这样更新 UDS 时你的改动不会被覆盖。

例如:在 UDS 的子类里覆盖 Current Sun Light Color,就能替换决定太阳光颜色的那段逻辑。

有些类还预留了空函数专门给子类覆盖,例如天气覆盖体积(Weather Override Volume)的 Custom Volume Behavior。