Case Study - UE4 vs UE5 Sequence Comparison
#1 UE4 - RT Shadows + Reflections / SSGI / DFAO
#2 UE5 - Lumen Hardware Ray Tracing
#3 UE4 - RT Shadows (Directional Only) + Reflections / SSGI / DFAO
#4 UE4 - No RT Shadows / RT Reflections / SSGI / LPV / DFAO
RAM: 32 GB
Better Light Than Never
I took the opportunity of Unreal's lighting challenge Better Light Than Never to make different versions of the same sequence in both engines. I submitted version #3 to the contest. This version is from UE4 and doesn't include ray tracing on the skylight. In retrospect I should have submitted #1 because Distance Field Ambient Occlusion isn't doing much on its own in any of the UE4 versions because of the lack of distance field lighting on the rock assets, which I will explain in the next section. Also, I worked on the UE5 version (#2) alongside the UE4 version, but it wasn't ready before the submission deadline.
The reason I used UE4 in the first place is because I had been working on my game "Moon Runner" in UE4 and I had established a landscape system which involves tessellation and the Voxel Plugin, with distance field blending on the landscape material in order to blend the rock assets into the ground. Since the Voxel Plugin landscape distance fields aren't working yet in UE5, I've had to replace the ground with a static mesh and applied a material with only one surface type. Furthermore, since tessellation isn't available in UE5, instead of relying on it for small ground detail I'm using nanite meshes as rock foliage, which merge into the ground surface by using this distance field blending.
If you hover over the image, you can see the UE4 version is on the left and the UE5 version is on the right. Use the slider to compare the two versions.
This blending technique uses the distance field of the landscape mesh to apply the same textures from the ground onto the lower sections of the rock assets (at variable heights), which merges them naturally with the ground. In order for this to work, distance field lighting must be disabled on the rock assets. In UE4 this means that Distance Field Ambient Occlusion (DFAO) isn't being used to its fullest extent, so I used ray tracing on the skylight in version #1 which helps this issue. While in UE5, it means that Lumen Software Ray Tracing can't be used on these rock meshes, so I only did the one version in UE5 with Hardware Ray Tracing (#3). If I wanted to port my game over to UE5 I wouldn't be able to support Lumen's impressively performant Software Ray Tracing while using this method of asset blending.
The Two Main Versions
Along with the differences in the ground surface that I've mentioned, there are some further composition changes I made in the UE5 version - notably camera framings and asset placement - but for the most part these are the same sequence, and I've tried to maintain parity in the common properties within both versions.
Apart from the hardware ray tracing used for the main lighting, both versions are also using contact shadows, which are responsible for smaller detail shading on the suit and ground. Below you can see how contact shadows affect the image from these shots captured inside the editor for each engine.
Both versions also use hardware ray tracing for reflections. UE5 uses Lumen's integration of this feature (as opposed to standalone ray tracing). The visor of the astronaut's helmet looks fairly similar in both versions.
However on closer inspections, there are notable differences between the two versions, especially when it comes to the monolith. Lumen's reflection isn't capturing the global illumination on the white suit, instead the figure is silhouetted when covered by the shadow of the monolith. The skylight background in the reflection is also brighter than UE4's reflection, which in general has better detail, but a similar result can be achieved in UE5 by using the standalone ray tracing features. If standalone ray tracing is to be depricated however, hopefully Lumen's reflections can be brought up to par with the previous engine's standard.
The biggest difference between the two engines apart from the approach to lighting comes in the performance. UE5 is a LOT smoother and it makes working in it a breeze in comparison to UE4 when it has all the bells and whistles going. Although this video is only 2K resolution, when rendering to 4K in UE4 performance would slow to a crawl and I would frequently get GPU crashes. However, UE5 rendering ran very smoothly at 4K without any crashes. There could be content reasons for this, since I'm not rendering the Voxel landscape in UE5, but I suspect Nanite has a lot to do with this improvement, and if this performance efficiency translates to the game build then I'd be very tempted to port "Moon Runner" over to UE5. However, further investigation is required and the issues with distance field blending and Lumen compatibility described earlier are still holding things back.
In terms of the workflow, UE4 takes a bit more work to get good results, whereas Lumen in UE5 basically provides all-in-one lighting solution which makes things significantly easier. Along with the performance improvement, this makes UE5 a lot better to work with.
Both engines produce comparable results in this particular example, but I'll leave you to decide which looks better. UE5 requires a different approach to scene setups, but it generally runs better and Lumen makes good results more achievable. It's is obviously the future, so this is old news, but an interesting case study for me and a good learning experience.
Comparison between #1 and #4 - UE4 Ray Tracing VS UE4 Cascaded Shadow maps
I made an extra version (#4) at the end of the video from UE4 and without ray traced shadows (but still with ray traced reflections). I kept SSGI on but I also used the Light Propagation Volume (LPV) for a bit of extra bounce lighting, despite the fact that LPV is obsolete and somewhat unstable. On the video, notice the flickering on the shadows in the overhead shot as the astronaut approaches the monolith. Still, I like the illumination on the rock surfaces, especially in the final shot, and although I couldn't implement LPV in my game because of this issue, I thought I'd give it one last go in this version.