Backporting
Vite is a NvRTX 4.27 Plus fork that keeps pace with technology developed for newer engines. That means backporting is a routine activity in order to upgrade the source.
What has been backported
Source | Examples |
|---|---|
UE5 | Non Trivial Rendering Optimizations, comprehensive CPU Optimizations, Plugins, QoL improvements, Animation features, Third Party Libs |
Vendor SDKs | DLSS 4.5, FSR 4, XeSS 3.0.5, Streamline, TressFX 5.0, Blast |
Third-party plugins | ACL, Motion Symphony, Kawaii Physics |
Before you backport
Backport feasibility check
Check the licence. UE5 code is under Epic's licence, which permits use in an Unreal Engine fork but not arbitrary redistribution. Third-party code must be permissively licensed — MIT, Apache 2.0, BSD, Zlib. See Coding Guidelines.
Check the dependency graph. A UE5 feature that depends on Nanite, Lumen, the UE5 RDG API surface or the Chaos physics interface will not backport cleanly. Establish what it actually needs before writing code.
Check the ABI implications. If the feature requires changing a shader-visible struct or a packed bitmask, it cannot be backported as-is. See the ABI rules.
Check whether it is worth it. A UE5 feature that exists to solve a UE5 problem may have no value in Vite. Focus on optimizations, Third Party Lib Updates, Plugin updates,SDK updates and fixes.
Common obstacles
- RDG API differences
UE5's Render Dependency Graph API diverged substantially from 4.27's. Pass declarations, resource transitions and uniform buffer creation all differ. This is usually mechanical to translate but touches every line of a render pass.
- Chaos versus PhysX
Anything in UE5 that touches physics assumes Chaos. Vite is PhysX — see PhysX. Physics-adjacent backports need the interface rewritten, not translated.
- Core type changes
UE5 changed several core types, most visibly the move from
FVectoras float to double precision. Backporting means reverting those changes throughout, and watching for places where the precision was load-bearing.- Module reorganisation
UE5 split and renamed modules. Includes, build dependencies and module names all need remapping to their 4.27 locations.
- Shading model slots
Shading models are a limited enum. Vite already adds Callisto BRDF, Toon and Lit Reactive. Adding another consumes a slot and adds shader permutations across the board — see Shader Compilation and PSO.
Doing the work
Keep the change traceable
Mark backported regions with the existing inline comment convention so they are identifiable after future upstream merges:
Guard what costs something
If the feature has a runtime or compile-time cost that not every project wants, put it behind a compile-time switch or a console variable, defaulted off. Vite's existing switches follow this pattern:
Switch | Default | Guards |
|---|---|---|
| 0 | Fixed timestep physics |
| 1 | Compiles out most ray tracing permutations |
| 1 | Optimised SSAO path |
| 0 | DLSS translucency and volumetric fog fixes |
| 0 | NvRTX translucency depth handling |
Note that VITE_RT_PSO_DEBLOAT defaults to the restrictive value. When a feature's cost is shader-permutation count, the default that keeps builds fast wins, and the feature is documented as opt-in.
Test against the baseline
Backported features need measurement against Vite's performance targets, not against how they performed in UE5. A feature tuned for UE5's frame budget may be unaffordable in a 4.27 project running on the hardware Vite targets.
Documenting a backport
Every backport needs:
Item | Where |
|---|---|
Source link, upstream commit or tag | Commit body — see Commit Conventions |
What was changed during translation | Commit body |
Any new console variable or switch | A documentation page, and Compile-Time Switches if applicable |
Availability caveats | The feature's own page, prominently |
That last one matters more than it looks. A backported feature that is compiled out by default, or that requires a plugin to be enabled, will otherwise be reported as broken by everyone who tries to use it.
Asset backporting
Backporting assets from UE5 is a different problem, handled by the Asset Downgrader rather than by code. See Migrating from UE5 and Proposed Plugins.