I’ve done some testing on Niagara and Proxy rasterized plane projection of the effect with and without screen traces in Lumen. The proxy took some doing. I’ve only been able to find SetRenderTargetValue node for Nigara scratch pads. Not sure what one would do to render sprites into a render target. Maybe export the data to blueprint and render it there?
Anyhow, what I have is one pixel per sprite. And I actually did a + sign, so wrote the adjacent pixels as well. It looks great with screen traces and updates in real time. Unfortunately, there’s no way to hide it from the main pass with screen traces. Without screen traces, you can do it, but it’s really blocky. I’m guessing it uses Distance Field Meshes. It also updates VERY slowly (because of Lumen, not the proxy. The proxy still updates in real time). So there’s no actual combination that’s what I would call acceptable, but I think there are at least some options if you have less reflective surfaces that blur the reflections.
There were some surprising results. None of them really good, but a few surprises along the way.
Lumen is always on for these tests.
First up is just trying to get a Niagara effect to reflect on a surface. The settings listed are in the sprite material (opaque, two sided, masked, etc.)
Niagara sprites:
| Material Setting |
With Screen Traces |
w/o Screen Traces |
| Opaque |
Yes |
No |
| Masked |
Yes |
No |
| Translucent |
No |
No |
| Additive |
No |
No |
Conclusion here is that Lumen without screen traces doesn’t work at all with niagara. With screen traces, it looks really good for the settings that do work. But it only works on masked materials. So it comes out a bit blocky. But it does work. This is about as good as it’s going to get unfortunately. Here’s a screenshot of a reflected niagara effect using masked material sprites (supposed to use Additive, but that doesn’t do reflections). The reflection actually looks better than the main pass. LOL
Next is the use of a proxy surface mentioned above. I was able to get this to render to a flat plane in real time. It is very pixelated even at 512x512. I placed a plane over where the original niagara effect should go. The goal is to not render the proxy in the main pass, but only for indirect lighting. To do this, we make Visible = false, Affect Dynamic Indirect Shadow = true and Affect Indirect Lighting While Hidden = true. I’ve tried TONS of other settings, but none of them worked properly. I did try RayTracingQualitySwitchReplace node in the proxy material, but it didn’t do anything that the previous settings couldn’t do.
So in the following tests, Nigara is not used at all. Only the proxy and only in the relfections. It is not drawn in the main pass at all (even though Render in Main Pass = true).
Proxy Reflections (invisible in main pass):
| Material Setting |
With Screen Traces |
w/o Screen Traces |
| Opaque Two Sided |
No |
One Side |
| Opaque One Sided |
No |
One Side |
| Masked Two Sided |
No |
One Side |
| Masked One Sided |
No |
One Side |
| Translucent Two Sided |
No |
No |
| Translucent One Sided |
No |
No |
| Additive Two Sided |
No |
No |
| Additive One Sided |
No |
No |
This technique doesn’t work at all with screen traces. And it only works on one side with Lumen (w/o screen traces). So you could duplicate the proxy and flip it around I suppose.
The two big problems here are that it’s VERY blocky and updates every 2-3 seconds. It is not real time like the screen traced Niagara reflections.
Here’s a screenshot of what that looks like. Note the idea is that the proxy does the reflection and when you turn on Niagara (which has no reflections) will handle the main pass. It looks ok in this screenshot, but in reality, the blockiness and choppiness of it loses its appeal when you see it live. If it looked like this but didn’t look so choppy, it might actually be worth it. I can’t stress how disconcerting it is when you see it live.
Finally, we turn on the proxy in the main pass. Sometimes overlapping the proxy with the niagara effect can be a promising alternative. We still leave Niagara effect turned off for this test, but the proxy should now be visible in both the main pass and in the reflection. In production, the proxy and Niagara effect are both visible in the main pass, but the proxy handles the reflection.
Proxy visible in main pass:
| Material Setting |
With Screen Traces |
w/o Screen Traces |
| Opaque Two Sided |
Both |
One Side reflection, but both sides main pass. |
| Opaque One Sided |
One Side |
One Side |
| Masked Two Sided |
Both |
One Side reflection, but both sides main pass. |
| Masked One Sided |
One Side |
One Side |
| Translucent Two Sided |
No |
No |
| Translucent One Sided |
No |
No |
| Additive Two Sided |
No |
No |
| Additive One Sided |
No |
No |
We can conclude that Lumen doesn’t work at all with translucency and additive materials for reflections.
This last test did reveal an oddity with masked materials with pure Lumen (no screen traces). It respects the Two Sided flag in the material for the main pass, but not for the reflection. It is rather odd seeing both sides drawn correctly in the main pass, but only one side of the gate has a reflection.
I’ve already shown non screen traces screenshot. So here’s the screen trace of the proxy.
The strange thing here is that the reflection takes on a much bluer tint in the reflection when screen traces are used compared to no screen traces.
In conclusion, Lumen reflections are in quite the abysmal state unless you’re fine using masked materials and even then…
I’d give Lumen reflections an F- at the moment. And that’s being generous. IMO, they’re even worse than SSR. At least SSR draws something. Lumen draws NOTHING.
The two best options are these:
- With screen traces, you have no choice but to make the proxy visible in the main pass, so a proxy with less lit pixels to hide it within the niagara effect might be possible. And it has the bonus that the reflection is still visible when the main asset is off screen with Lumen directly as blocky as that is.
- Without screen traces, you can turn off the main pass of the proxy, but the reflection is VERY blocky and choppy (it does not update in real time. It updates every 2-3s).
And that’s fairly disappointing to say the least.
Conclusion: Lumen reflections… worse than SSR. Unless you hide everything that’s not strictly opaque. 