向后移植
Vite 七月版本目前有超过 300 个从 UE5.0 到 UE 5.8 的向后移植。
Vite 是一款 NvRTX 4.27 Plus 分叉,与最新引擎开发的技术保持同步。这意味着向后移植是升级源代码的例行活动。
已向后移植的内容
| 来源 | 示例 |
|---|---|
| UE5 | 重要的渲染优化、全面的 CPU 优化、插件、QoL 改进、动画功能、第三方库 |
| Vendor SDKs | DLSS 4.5, FSR 4, XeSS 3.0.5, Streamline, TressFX 5.0, Blast |
| 第三方插件 | ACL, Motion Symphony, Kawaii Physics |
笔记
UE的QoL(Quality of Life,生活质量)改进,指的就是那些不直接增加新功能,但能显著提升开发者效率、减少重复劳动、优化体验的细节改进。
在向后移植之前
向后移植可行性检查
-
检查许可证。 UE5 代码已获得 Epic 的许可证,该许可证允许在虚幻引擎分支中使用,但不允许任意重新分发。第三方代码必须获得许可——MIT、Apache 2.0、BSD、Zlib。请参阅编码指南。
-
检查依赖关系图。依赖于 Nanite、Lumen、UE5 RDG API 表面或 Chaos 物理接口的 UE5 功能将无法完全向后移植。在编写代码之前确定实际需要的内容。
-
检查 ABI 影响。如果该功能需要更改着色器可见结构或打包位掩码,则无法按原样向后移植。请参阅ABI 规则。
-
检查是否值得。为了解决UE5问题而存在的UE5功能在Vite中可能没有价值。专注于优化、第三方库更新、插件更新、SDK 更新和修复。
常见障碍
-
RDG API 差异
UE5 的渲染依赖图(Render Dependency Graph, RDG) API 与 4.27 的有很大不同。传递声明、资源转换和统一缓冲区创建都不同。这通常是机械翻译,但涉及渲染通道的每一行。
-
Chaos 与 PhysX
UE5 中任何涉及物理的内容都假定为 Chaos。 Vite 是 PhysX — 请参阅 PhysX。物理相邻的向后移植需要重写接口,而不是翻译。
-
核心类型变化
UE5 更改了多个核心类型,最明显的是从浮点型 FVector 转变为双精度型。向后移植意味着从头到尾恢复这些更改,并观察精度承受负载的地方。
-
模块重组
UE5 拆分并重命名模块。包含、构建依赖项和模块名称都需要重新映射到其 4.27 位置。
-
着色模型槽
着色模型是一个有限的枚举。 Vite 已经添加了 Callisto BRDF、Toon 和 Lit Reactive。添加另一个会消耗一个插槽并全面添加着色器排列 -请参阅着色器编译和 PSO。
执行相关工作
保持变更可追溯性
使用现有的内联注释约定标记向后移植的区域,以便在将来向上游合并后能够识别它们:
// AKCHANGES START
// Backported from UE5.3, CL 12345678
...
// AKCHANGES END
保护那些会带来成本的功能
如果某个功能会带来运行时或编译时的成本,而并非所有项目都需要,那么就将其置于编译时开关或控制台变量之后,默认值为关闭。Vite 现有的开关遵循这种模式:
| 开关 | 默认值 | 保护 |
|---|---|---|
VITE_PHYSX_FIXED_TIMESTEP |
0 | 固定时间步物理 |
VITE_RT_PSO_DEBLOAT |
1 | 编译出大多数光线追踪排列 |
VITE_O_SSAO |
1 | 优化的SSAO路径 |
VITE_DLSS_PATCH |
0 | DLSS 半透明度和体积雾修复 |
VITE_NVRTX_TRANSLUCENCY_DEPTH |
0 | NvRTX 半透明深度处理 |
注意
VITE_RT_PSO_DEBLOAT默认为限制性(restrictive)值。当某个功能的成本是着色器排列计数时,保持快速构建的默认值会获胜,并且该功能被记录为选择加入。
与基准进行测试
移植到 Vite 的功能需要根据 Vite 的性能目标进行评估,而不是根据它们在 UE5 中的表现。针对 UE5 帧预算优化的功能,在运行于 Vite 目标硬件上的 4.27 项目中可能无法承受。
记录向后移植
每个向后移植都需要:
| 项 | 在哪里 |
|---|---|
| 源链接、上游提交或标签 | 提交正文——另请参阅提交约定 |
| 转变过程中发生了什么变化 | 提交正文 |
| 任何新的控制台变量或开关 | 文档页面和 编译时开关(如果适用) |
| 可用性警告 | 该功能自己的页面,显着 |
最后一项比看起来更重要。默认情况下编译出来的向后移植功能,或者需要启用插件的功能,否则每个尝试使用它的人都会报告为损坏。
资产向后移植
从 UE5 向后移植资产是一个不同的问题,由资产降级器而不是代码处理。请参阅从 UE5 迁移 和 建议的插件。