NVRTX 5.1 caustics review (ish)

I find myself rather busy as of late, but I’m looking to write a short review of Nvidia’s custom branch of Unreal Engine 5.1, this time with support for caustics. I’m writing this now because my NVRTX editor appears to have bricked in an unrecoverable way (short of rebuilding it from source), so I’m writing the review while the systems are still fresh in my mind. I won’t be including performance profilings at this point, more just my musings on the system as a whole.

First off, unless brought up otherwise, systems are largely identical between NVRTX 5.0 and 5.1, barring performance improvements and the notable absence of DDGI (likely as the technology was superseded by lumen). Please see my previous post for context.

RTXDI has unfortunately not received significant improvements in my opinion, and while performant even in scenes of complex, occluding geometry and overlapping lights, the image resolve is significantly poorer than standard shadowmaps. There is a visible and obtrusive fizzle and noise, especially on specular surfaces, that degrades image quality rather significantly. If temporal stability can be improved however, I believe RTXDI would be an incredible lighting solution. Nvidia’s work is a technical marvel, but there is still some way to go.

The entire reason I pulled the engine down was to test how NVRTX’s real-time caustics rendering features would interact with lumen. And while the caustics effects are extremely technically impressive, I ultimately don’t believe the workflow they demand is worth the cost (ics). You can get visually stunning, offline-grade results, but it won’t be easy or cheap.

Caustics are the patterns cast by light refracting or reflecting off of a specular media: the warbling shadows cast by a glass of water, stained glass windows, the pattern of light on the ground outside a metal wall are all caustics. They’re very hard to render in games in real-time, even with real-time RT, but Nvidia created a very clever system to generate caustics at playable frame rates.

The issue is, setting up caustics in NVRTX isn’t nearly as straightforward as enabling GI with lumen. To use caustics, you have to first enable the feature engine-wide (and the requisite plugins), then tell a light to cast caustics, a mesh to reflect or refract them, and tune the various buffers and photon counts for performance in the PPvolume, light, and material. It’s a juggling act that’s rather time-consuming to get good results, but it can work well. Reading their documentation is a must-do in order to get meaningful, usable results. The biggest disappointment? Caustics, which can include anything from light reflected off of windows to colored shadows from glass, are only visible in screen-space. Normally this would be a small issue, but it completely rules out the possibility of scenes such as light through stained-glass windows lighting up a room, something lightmass could do rather handily. And while lumen, translucency, and the caustics solver are all extremely advanced pieces of tech on their own that are unlikely to innately interplay, the level of integration in the disparate systems is not something Nvidia documented well, in my opinion.

What’s more irritating in my opinion is their different translucency modes: NVRTX-caustics has four different modes of handling translucency, two stock with the engine, two new. They all offer different options on sorting transparency, handling reflections and refractions, even letting light scatter inside items. I have a strong liking of the tech art side of things, but even I was occasionally mystified at what a given setting was meant to do. There isn’t a lot of useful mouseover text in the engine either, so you should be ready to do a lot of googling and video-watching. The setup isn’t artist-friendly.

Furthermore, even in Nvidia’s archvis example level, there were strange visual bugs and inconsistencies that made me struggle to understand how the technology works. Hacks were used such as making the window panes emissive to read better, as well as faked light shafts through billboards and a handful of other tricks. Items were also culled from the RT scene without clear tagging to explain why.

Bottom line: I don’t think NVRTX is worth the artist time it demands to get good results. If you want caustics and maximum lighting quality, you can use lightmass and RT reflections. If you need real-time lighting, we have tiling caustics textures (and a handy baker epic provides), light functions and more tricks that can look pretty good with less time and artist setup.

If Nvidia wants the caustics branch to be more viable, I would appreciate it if they work on making it work more ‘out of the box’, like lumen. If there is a way of integrating the caustics buffers into the lumen scene to facilitate GI from caustics, that would be wonderful. If they can make the caustics system use performance heuristics and virtualization like lumen to maintain performance with less artist intervention, that could be wonderful.

Also, the engine crashed repeatably any time I tried to enable debug visualizations, so there are bugs that definitely need fixing.

3 Likes

Hello @jblackwell , thanks for your feedback. Apologize for the artist unfriendly UI, there are indeed tones of parameters need to be tweaked both from Cvar or from PPV, however, if you check the demo project, there is a blueprint called BP_RTX under Content folder to scale entire HW raytracing rendering settings, coz it is significantly crucial to scale the rendering quality among different hardware platforms. You can check the existed rendering quality preset for your reference, and then make your own one based on your map scenario by changing the structure default variables. The engineers here are very good at math equations but very pool usability UI design, moreover, change UE UI cost so much time to rebuild engine over and over. So I warped the recommended parameter settings into that BP.

2 Likes

The faked light shafts are made from Cascade, if you used the RT vanilla translucency, it will vanish those particle effects, things like VFX can ONLY coexist with Enhanced Translucency, you need to enable it from your project setting first. Enhanced RT Translucency is the ONLY mode that supports reflection, refraction, OIT, RT DOF, absorption, and most importantly, coexist with VFX . Some advanced effects like rough refraction introduced in Strata is automatically supported.

1 Like

You’re welcome! I take it you’re with Nvidia then?

I first want to make clear that I think the caustics implementation is a technical marvel. AAPS is an incredible piece of technology with many potential applications, as caustics are found in so many places in the real world. It’s an amazing tool.

I never noticed that blueprint, I’ll take a look at it! That actually makes a lot of sense, the setup of the PPV and CVars felt very suited to programmers and less to artists, but a control BP to manage scalability globally would make things vastly more usable. I’m sorry I didn’t come across it in my review.

This actually clarifies a lot for me. I struggled to understand what the different translucency modes were (as translucency is a very hard problem for games in general). Enhanced RT translucency looks like a very powerful system, being able to handle all those high-octane effects at relatively good frame rates (for my system at least). I’m really excited that you all have been wiring in support for Strata even as it’s still an experimental feature, although I did not get around to testing it.

Out of curiosity, what’s the system for denoising rough refraction? I believe diffuse and specular signals are denoised separately, but I can’t quite figure out how you’d clean up that signal.

Aha, the tedious readme docs and demo projects are under my maintenance :slight_smile: The functionality of our implementation is very good for both IQ and performance. If you encounter some strange bugs or visual artifacts feel free to drop me a line. Cheers ! jackwang@nvidia.com

I bet you will totally love truly raytraced translucency with good image quality and runtime performance, coz it is soooooo much easier than raster techniques, everything in Enhanced Translucency pipeline is as nature as breath, things like distance fade, different camera vectors, and reflection vectors can be forgotten. Can’t wait to see your stunning works with our engine tweak.

3 Likes

It’s no worry, the fact that technology this advanced is accessible and usable with the minimum of documentation it has is incredible, especially considering just how far light transport technology has come in such a short period of time. Speaking of, is RTXDI similarly tunable from the global RT blueprint?

And I’ll be sure to, thank you!

Yes, there is a button I made there. You can tweak the quality by single click. Basically, film preset should have higher and more aggressive rendering quality parameter preset while very high quality should sacrifice some image detail like trace distance and resolution, 4k 60fps with dlss 2 quality mode (2K internal resolution) should hit 4k60 fps running in single RTX 3090.

2 Likes

@jblackwell Hello, NvRTX Caustics 5.2 is out : https://github.com/NvRTX/UnrealEngine/tree/NvRTX_Caustics-5.2
Some enhanced features are included.

1 Like

I am extremely interested! I’m reading through the update log on github, and correct me if I’m misunderstanding: in addition to performance improvements, are caustics now supported with lumen reflections? Apologies if I misunderstand the feature set. I’m currently finding myself quite busy, but I am very eager to explore these new systems as soon as I am able. Thank you!

By the way, does the Nvidia branch come with an implementation of DLSS 3.5 yet? I understand that the technology was only just made public, but one of the single biggest problems I see with RT lighting is the tendency for the denoiser to wipe away fine detail- DLSS 3.5 appears to be largely avoiding that, and it would be a killer feature on any RT title that could use it.

The one issue I will notice with the branch is that the file sizes tend to be absolutely gigantic, 240+ GB for what I’ve seen. is there anything you can recommend to trim down the disk size of the custom branch?

Lumen reflection can support translucency objects since version 5.1, in 5.2 we fully support EPIC’s water plugin which is based on single layer water material, also the reflective mesh caustics support nanite opaque meshes. I just post a few shots based on NvRTX Caustics branch on my X :https://twitter.com/JiaqiWang1

1 Like

DLSS 3.5 will be probably officially supported in UE 5.3 :stuck_out_tongue:

1 Like

Coz the complied engine needs addtitional disk storage to handle intermediate files, it’s not our fault by the way.

1 Like

I didn’t figure it was, my other UE builds are similarly massive, NVRTX just seems modestly bigger than them. I meant more generally if there are any files I could remove that could save space and also let the engine run, any nonessentials.

Now that will be a treat. Lumen reflections with stable denoising would be truly miraculous.

Why is not possible, for you or Epic, to merge the Nvidia branch with the official one? (Why not including this tech by default?)

As I understand (obviously @awsc knows better than me), it’s because NVRTX has vendor-specific features that couldn’t be used across all graphics cards. Even though ray-tracing now has relatively broad support, features like Shader Execution Reordering are exclusive to NVIDIA 40-series cards. I also don’t exactly know NVIDIA’s licensing model for things, what technology is allowed to be used and how.

For the record, Epic has put certain features from NVRTX into the main engine: Ray-traced shadows with volumetric fog, for example, but I believe they generally like implementing things in their own code anyways. I was told that we are getting colored shadows (shadow caustics, of a sort) upon some substrate release, but I couldn’t tell you the timeline on that.

2 Likes