photo

Environment probe flickering and SSR reflection ray offset

Recommended Posts

Hello,

I am adding reflection of wet surfaces in our application.

We observed some artifacts on clouds, while rendering an environment probe with one face per frame.

When switching to 6 faces per frame it looks normal, but it is too heavy in computation.

What is your solution for this?

There is a video in the attachement.

2020-09-04 08-51-16.mkv

 

We did also observe that the start ray for screen space reflections gets more and more incorrect with increasing distance.

It appears like the reflected object is going to vanish towards the horizon.

When objects have not much space above the ground they won't appear in the reflection anyway only at close distance.

Is there a way to do it more accurate than the standard project?

There are two screenshot in the attachment, one far away and one close.You can see the missing plate of the material ball clearly.

2009040850_screen_space_missing.thumb.PNG.39c2163716688ef4597b9915cd0978fa.PNG

2009040855_screen_space_missing.PNG.743207d1e95c2320b48d257f357d06f8.PNG

Software version is 2.11.0.2

 

Thank you for your help

 

 

Edited by sebastian.vesenmayer

Share this post


Link to post

worldfilewithmat.zip

Here is the world file with the materials.

Share this post


Link to post

Hello Sebastian,

The flickering you observe with the environment probe is caused by TAA. I'm afraid, considering the settings (dynamic probe, low resolution and 1 face per time rendering) it's impossible to fix with TAA parameters.

Regarding the SSR question. You can increase accuracy with Num Steps parameter. Try values between 8 and 12. Increased accuracy also might help a bit. I must say that SSR show it's best in small scenes.

Could you please give me the context? Why have you chose dynamic environment probe? Have you tried low-res planar reflections instead?

Thanks.

Share this post


Link to post

Hello morbid,

thanks for the answers.

On 9/4/2020 at 2:34 PM, morbid said:

The flickering you observe with the environment probe is caused by TAA.

Ok so TAA does not function properly when rendering 1 face per frame time? Is TAA a global setting or is it possible to deactivate it for the Environment Probe?

On 9/4/2020 at 2:34 PM, morbid said:

I'm afraid, considering the settings (dynamic probe, low resolution and 1 face per time rendering) it's impossible to fix with TAA parameters.

The flickering is also visible with bigger Textures (2048 Pixels).

On 9/4/2020 at 2:34 PM, morbid said:

You can increase accuracy with Num Steps parameter. Try values between 8 and 12. Increased accuracy also might help a bit.

I can move the num steps slider to 64 and still getting the same wrong reflections like in the picture above. Enabling "Increased accuracy" did nothing. If the reflection ray direction or start point is not calculated correctly it will always miss the pixel information it should get.

 

On 9/4/2020 at 2:34 PM, morbid said:

Why have you chose dynamic environment probe? Have you tried low-res planar reflections instead?

It was recommend in this forum post to render cloud reflections with an environment probe.

Planar reflections are going to use more computation time, and we have lots of planar surfaces. So it is no option.

Share this post


Link to post

Sebastian, I consulted with our artists and made some improvements. Please see the attached scene for 2.11. Changes made:

  1. Probe set to spherical with limited radius and reduced Far Clipping (still provides reflections far enough)
  2. Probe set as a child to the active player
  3. Texture size increased to 512, 256 works though
  4. SSR step size configured to match the geometry

Please share your thoughts on this workaround.

probe_test.7z

Share this post


Link to post

Hi morbid,

The clouds are looking good now. Thanks for that.

But the SSR is still missing Geometry, when distance is over 100 units. (Red box in your example)

The screenshot has a FOV of 30 degree, what we usually use in our simulations, and reflections should be visible with SSR, it is big enough.

grafik.thumb.png.4e2d7d87aa220c7a77fe1e6b22766356.png

Share this post


Link to post

SSR will always work bad with small objects in distance. I got this as the best result:

image.png

Step size and number of steps are the main parameters in discussion here. Lesser step size and bigger step number will give better result at a cost of performance.

Are you sure planar reflections with, let's say, half resolution aren't possible because of the rendering budget? Dynamic environment probe also not the cheapest object.

Thanks.

Share this post


Link to post
On 9/11/2020 at 3:09 PM, morbid said:

SSR will always work bad with small objects in distance.

Hello morbid,

Can you explain why that should be the case?

 

On 9/11/2020 at 3:09 PM, morbid said:

I got this as the best result:

Unigine006.thumb.PNG.7b0b6d4ad5bd5e83e9b7d48c7f517441.PNG

I have increased Z Buffer resolution with near and far plane set to 1 and 1000 but no effect.

I have narrowed field of view. That should work because objects use more screen space, so screen space reflections should be visible for all objects but no effect.

I have reduced step size. Still not working for the first 3 pillars.

I have increased number of steps. Still not working for the first 3 pillars and no increasing reflection of the 4th pillar.

So my guess as I mentioned:

The ray marching starts at the wrong position with increasing camera distance.

It does not matter which step size or number of steps you will use, it will start at the yellow line.

This looks like a bug for me.

Unigine006.PNG.27e3fdd20c02898b62ab623d7e29b38e.PNG

Unigine007.PNG.1c798501c8c2a2d2cfbbd7adec6bc84c.PNG

 

On 9/11/2020 at 3:09 PM, morbid said:

Are you sure planar reflections with, let's say, half resolution aren't possible because of the rendering budget? Dynamic environment probe also not the cheapest object.

We only wanted to use dynamic reflection for the sky and not the scenery. It is only gpu heavy and not cpu, which is ok.

We have 50 Planar meshes, which cannot be combined. I guess that means 50 additional render cycles? Is this going to fit in our rendering budget? We are at the 60 fps border at the moment and don't want to drop below.

Thanks

 

Edited by sebastian.vesenmayer

Share this post


Link to post

We found some suspicious parts in the SSR algorithm, haven't checked everything yet.

I'd like to clarify the expected results, please correct if I missed something:

  1. Camera FoV is 30 (more or less?)
  2. Small object is considered to be 1x1x1 meter (or less?)
  3. The desired screen space reflection distance for such object is 100 meters

Thanks!

Share this post


Link to post

My last example had:

  1. Camera fov 3 degrees.
  2. Objects with 1x1x1, 1x1x2, 1x1x3, 1x1x4 meter.
  3. Distance was 300 meters.
  4. Player heigth of 50 meters.
15 minutes ago, morbid said:
  • Camera FoV is 30 (more or less?)
  • Small object is considered to be 1x1x1 meter (or less?)
  • The desired screen space reflection distance for such object is 100 meters

I checked those values again and SSR has the same effect. When you are moving the cube up from the ground, at some point it will start to reflect.
Also with player height of 50 meters.

SSR should output almost perfect reflections in any of the listed cases.

Thanks

Edited by sebastian.vesenmayer

Share this post


Link to post

Hello,

do you have any new news on this topic?

Thanks

Share this post


Link to post

New options to control SSR bias will be added in 2.13, so you will need to tune them for separately for specific cameras.

Here is the results:

View Bias: 1 / Normal Bias: 0:

image.png

 

View Bias: 0 / Normal Bias: 0

image.png

Current:

image.png

Share this post


Link to post

Thanks for the update.

Is this going to be released in 2.13 version only?

Share this post


Link to post

You can already try to modify data\core\shaders\screen_space\fragment\ssr.frag:

#define view_bias 0.002f
#define normal_bias 0.01f

image.png

Share this post


Link to post

Thanks will give this a try :)

Share this post


Link to post