Not sure if this is a limitation or a bug but when I enable FXAA (or disable AA completely) it seems to cause issues with Reflections created by CaptureComponents and to some degree screenspace reflections as well.
Not sure why AA would impact the reflection data but the two effects do seem to interact. You can see a faint shadow of the black shape in the first image. I assume this is the SSR “shadow” Seems like without Temporal AA the SSRs will just turn solid black?
You can see below in reflection preview mode with Temporal AA enabled.
Ok so more experimentation and the plot thickens further. I think part of the issue seen above was the fact that there wasn’t a skydome in the map only an atmospheric fog. Once added it fixed the large black band and disabling the SSR I realized the black I was seeing under the rock was simply an expected SSR shadow(occlusion).
Further digging proved out that other artifacts show up when hitting the “Update Reflection Captures” menu option in the Build menu. The artifacts go away if you do a full rebuild of the map and save. (you must save or the artifacts will persist)
So after all that I’m not sure if it’s a real issue or just some artifacts that show up when a map isn’t fully built and saved.
YOU DECIDE.
You can see in the grid below the discoloration and darkening I was seeing as I was developing.
Sorry for the spam just getting all the info out there.
So one artifact remains regardless of rebuild and save and that is that SSR reflections will be yellowed as per the image in my previous comment if Temporal AA is not enabled. Saving and rebuilding does not help.
And I think I found the correct bug finally. It appears to be related to the atmospheric fog and SSR. From what it looks like it would appear that SSRs / Reflection captures do not interact with atmospheric fog / AA properly. I’m not quite able to figure out who the culprit is but there you go. It seems to result in the odd errors you see above.
I am attempting to reproduce the issue that you are experiencing. I think that I have been able to reproduce part of the issue, but I would like to be sure. If you are able would you mind downloading the “Content Examples” project from the learn tab of the launcher, installing it and opening the map called “reflections”. Example 1.5 contains an example of a sphere with SSR. Would you mind seeing if the issue that you are describing is still present in Content Examples>Reflections? If it is we will gather a little bit of information and find out if any other users are experiencing the same issue, and if not, a bug report will be created.
What you are experiencing is typical and can be very easily corrected by increasing the intensity of you skylight (assuming that you sphere reflection actor is set to an intensity of 1). You will need to play with the exact value base don your individual level, but you can get 99.9% close. You can never get to 100% because of how the SSRs are generated in the rendering process, but you will be able to get the color variation gone completely and if you provide any sort of breakup in light, or texture, the SSR line will be unnoticeable to your player.
The Gif does not do a great job of color representing it looks much better in the engine itself.
Thanks so much for the info! Could you explain why the reflections are sensitive to the skylight value? Just curious to understand why the fix works. Maybe a better question is if all maps are required to have a skylight to have correct reflections?
To understand this we need to talk about what the reflections actually are or rather how the engine derives them. The Reflections are actually a form of Image Based Lighting (IBL) and is a fundamental part of the Physically Based Rendering (PBR) Pathway that the engine used to render out a scene. So, the reflections themselves are a fundamental part of the shader model applied to all materials.
This idea is really important to understand because in a physically based system a material should be created once and be usable in all lighting situations. So, with the IBL a part of the shader and as a result a part of the material, the reflections, like the material itself will darken and brighten based on the lighting of the scene. This is way initially the reflections appear so muck darker (and yellow as you say) it is the IBL reacting to the scene’s lighting in the shader model.
The skylight offers a way to brighten the IBL because it directly references the underlying Image in the IBL system (the generated cubemap from the sphere reflection capture actor). So in the end, you are brightening the IBL and still allowing the scene’s lighting to influence the material as it should in a PBR setup.
A Final note, the SSR is a post process effect and hence doesn’t go through the same shader model as the material system which is why it appears so much brighter than the sphere reflection captures Image. The SSR has its own issues and to achieve the absolute best results it is always better to balance these two techniques in your level.
Thank You and hopefully was not too confusing for you-
So my issues were mostly related to other things I didn’t understand about how reflection captures work. There were 5 issues that were all interacting making it hard for me to debug.
1: Movable objects don’t render into reflection captures.
2: Hidden in game actors don’t render into reflection captures.
3: The skylight renders everything in scene captures below Z=0 to black.
4: “Very Large Scaled” meshes turn black in captures.
5: Scene captures get recalculated when choosing “build lighting only”
Since my water surface was a mover it wasn’t showing up in the scene-capture. I figured that out and added a static mesh beneath it to act as something to reflect. This appeared to fix the problem but it got complicated because I was then setting it’s “hidden in game” flag to true. Doing this won’t break the already baked reflections so everything looks like it’s working. Then later I would recompile the map and that would cause them to be recalculated. So then suddenly everything would look broken again. grrr
On top of all that there was the issue that scaling the imposter mesh to a “very large” sizes caused it to turn black in the reflection captures. So this further hid the problem. It seemed related to the “Sky Distance Threshold” in the SkyLight at first (and it was clipped to some extent) but the real issue was the scale of the mesh itself caused an overall darkening.
I eventually solved it by making the imposter 1:1 size and making a masked material that was parameterized to disappear at runtime. That way it doesn’t show up in game but will show up in reflection captures when the map is built.
Would be handy to have this as a static mesh advanced option like “B_ReflectionCaptureOnly” or something.
Anyhoo. Hope this info helps folks that run into similar issues. You may want to look into very large object scaling darkening an actors contribution to scene captures but that may just be a limitation.
Scratch my last comment. Apparently making the material masked also causes issues with the reflection capture. Back to the manual way unless you have any suggestions how I can fix it.