Raytraced reflections of reflective materials - massive noise?

Mirror is 0 roughness, yes. Using render targets enlarges objects close to the camera, so it does not look good positioned close to the car - on the mirrors.

I’m more about making a simulator experience than a game where you mostly look forward. Mirrors are one thing that have to be quite perfect.

sim racing? well… every piece of performance counts on a huge curve panel or head set. if you got issue with mirror projection with cheaper shaders you should maybe take a math lesson and how you convert or extend the helmet frustum into the mirror frustum. this is a whole different gig.

i’ll have to dodge here anyway. i’m out of things to test or recommend.

Thanks for your help! Im vaguely familiar with the terms that you mentioned, but to do this would go way beyond my capabilities at the moment. I would have hoped that the engine would provide me with a way to make a simple mirror, but it seems that it is not the case at the moment :frowning:

And no, not a racing game! Just something to make yourself familiar with the car, and how to use the mirrors to park. Very slow pace.

okay. i get that idea. like a virtual driving experience or sales room? hmmhmm

for the common headsets this will not be very performant anyway. i’m not aware of headset that can even raytrace, yet, without a pc. so…

you may have to resort to a different kind of rendering in the first place, i think.

The experience would be running an a pc with a wireless headset. I have everything setup nicely and the fps is great. The only issue I have is the mirror which I have been trying to fix for the last 10 days or so… Most of the issues come from antialiasing. TAA/TSR gives terrible ghosting, and no aliasing is extremely grainy. Planar reflection works the best, but they tank the performance horribly. Scene capture works fine if the thing being reflected is not close to the camera, otherwise it gets distorted/stretched. I’m really quite out of ideas at this point.

If I understand things, this is where ray-reconstruction will come in handy, no?

what is ray-reconstruction? a buzzword i don’t know.

no… the issue is if you render a thing in a mirror, you trace the mirror (which is simple), you reflect the ray and hit the next surface in the path of the reflection. when you hit something you generate new rays that will trace further and hit other things and compose the reflection on the thing you see in the mirror. in pathtracing you generate multiple reflection rays. in realtime raytracing you gotta put a limit on it. which is usually one ray and it will be in a semi random direction every frame. thus temporal noise.

It’s essentially DLSS but for the ray-casts as a group, so things based of them will be sharper, as if additional rays had been fired.

yeh. more tensor cores to figure out where the pixel was last frame. motion vector math. i watched a naughty dog paper a couple days ago. hmmhmm

Just one more example of how tsr really introduces quite heavy artifacts. On the right is no aa.

It seem that nvidia has an Unreal Engine fork with their NVIDIA Real-Time Denoisers (NRD). I’ll show the results after I set everything up! Building from source takes some 3.5 hours on my machine, so it might be a while. Fingers crossed!

1 Like

I can say that using temporal-sampling within materials does cause a bit of speckles for my use-case. No upsampling, just temporal-sampling to reduce texture-sample-counts in materials.

With the default, OOB Epic solution, there CAN be slight streaking/blending, and sometimes speckles, but these are slight. They ARE exaggerated with upsampling.

With DLSS 3.5, just turning it on, screen % 100, any streaking/speckles just-disappear (again for my use-case). I can even go down to a screen-percentage of ~40% before I even start to notice any graininess. An even 50% is eminently do-able…

VERY curious to see your results here. For what I am seeing it would be hard to improve on DLSS 3.5 but I’m curious…plz update!!

I can’t seem to get nvrtx to work properly, or at all…
I have built the engine from source, but any r.ngx commands seem to do aboslutely nothing? I’ve enabled the plugins from nvidia. Could you tell me which commands do you use to enable dlss?

i dunno how much source compile differs from release 5.3.

ngx should be enabled by default and you can get the status with get “r.ngx.enable” (it’s read only)

i’m rocking those in the release engine

note: if you run 100 percent screenpercentage it provides only dlaa not dlss, casue it’s not upscaling.

None of these commands change anything (except screenPercentage)… Are you using 5.3?

i’m very much using 5.3… yes. and well… you’ll not notice alot change cause dlss takes over and it’s really good at upscaling, but won’t fix the temporal isues. the temporal artefacts may still not dissappear in your scenario. that’s the whole stick you seem to not understand. there are limits how much it can do with temporal data. ¯_(ツ)_/¯

Surely I would have to see SOME difference with some of the commands. But there is literally none. I don’t think it’s working…
Which command has an obvious visual difference? ¸
For example there is r.NGX.DLSS.Sharpness. -1 or 1 makes zero difference…

Or setting screen percentage to 50 and disabling dlss. No difference.

Are there some extra steps I need to make sure are enabled somewhere?

r.NGX.Enable=1
r.NGX.DLSS.Enable=1

I have a 3080.

Not sure what is the issue here.

be aware changing screen percentage ingame will not change the percentage in the editor. there’s an xtra menu for that. to test all of it you should create a cinematic camera ingame with a side to side motion. and you hammer in the commands while you simulate the game.

i don’t need to do and record that for you. i know the limits. noise is my friend. you go figure them out.

Also, you can use the “raytracing quality switch” node in materials to make a material shiny in normal view, but matte in reflections to eliminate noise. You can use cube mapping to fake reflectance in the raytraced material. Usually, it is not important for reflections of reflections to be physically accurate.

It wasn’t that long ago that lumen couldn’t reflect reflective surfaces at all, and they would either be forced to appear matte, or would show as pitch black.
During that time, I demonstrated a method for creating a cube mapped fallback reflection.

This method has 0 noise issues. While it has the typical flaws of any cube-mapping technique, this was one of the standard approaches to car reflections in driving games before raytracing anyway and makes for a good fallback on secondary bounces.

Here is a writeup about it:

And here’s a YouTube video:

Again, keep in mind this content pre-dates lumens multi bounce functionality so some things may be slightly outdated.

Thanks for the input! I was able to get the noise reduced by using the raytracing quality switch a few days ago just as you said, so at least that is quite manageable now. I don’t think cube maps would work for me, as I am making a vr experience, and rearview mirrors should be as realistic as possible at all times. I have tried various things to get a good quality reflection, but I keep running into different troubles. I have another topic open on the ghosting with opaque materials, and weird see throughs on translucent materials with opacity at 1.

If you think you have an idea on how to create a nice clear reflection of a moving mirror please do try to post a video of your result, I would be most intrigued!