性能、移动端与更新
哪些设置最吃性能、按什么顺序取舍、移动端要改什么,以及升级 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 仍在默认位置
- 关闭项目。
- 在启动器的 库 标签页里,于 Fab 库中找到 Ultra Dynamic Sky。
- 点
Add to Project,提示是否覆盖旧文件时选择允许。 - 如果启动器添加失败或没下载到最新版,先点
Remove Local Content再重试。
情况二:UDS 已被移动到其它目录
这种情况需要手动搬:因为编辑器要按目标位置重写文件夹内所有资产引用,所以得先在另一个项目里做同样的移动。
- 在目标项目里,对
UltraDynamicSky文件夹执行Update Redirector References,确保没有依赖重定向器,然后关闭项目。 - 用启动器把 UDS 添加到一个同引擎版本的空白项目。
- 打开空白项目与 UDS 演示地图,等着色器编译完成。保持演示地图打开,把
UltraDynamicSky文件夹移动到与目标项目完全一致的路径。 - 等待移动完成,右键整个
Content文件夹执行Update Redirector References。 - 关闭并重新打开演示地图,确认移动没弄坏东西。如果云等效果不见了,执行控制台命令
Recompileshaders All——这是资产移动后着色器编译的引擎 Bug。 - 关闭项目(目标项目也保持关闭),在文件管理器里把空白项目中的
UltraDynamicSky文件夹复制到目标项目,覆盖旧文件夹。 - 打开目标项目,更新即完成。
更新完成后建议读一遍对应版本的更新日志,里面会写清楚需要在项目里额外做什么。
修改 UDS 的蓝图
需要改 UDS 的蓝图逻辑时,不要直接改原类,而是对它创建一个子类:
在内容浏览器里右键该类,选 Create Child Blueprint Class,在子类里覆盖具体函数。
这样更新 UDS 时你的改动不会被覆盖。
例如:在 UDS 的子类里覆盖 Current Sun Light Color,就能替换决定太阳光颜色的那段逻辑。
有些类还预留了空函数专门给子类覆盖,例如天气覆盖体积(Weather Override Volume)的
Custom Volume Behavior。