Correct Blurry Reflections

Hi everybody !

I would like to see physically correct, or just some approximated blurry reflections in UE4.

blurry SSR slides : http://www.slideshare.net/DICEStudio/stochastic-screenspace-reflections

First, I sum all of my knowledge about blurry reflections in UE4, correct me if I’m wrong.

  • Screen Space Reflection is impossible to get blurry when the roughness parameter of a material becoming high, instead it decrements the intensity of the reflection based on roughness
  • Every cube map that is intended to contain some reflection related information like color is mip mapped and lower levels gives you more averaged lower frequency data resulting in “Blur” !
  • I don’t know how Spherical Harmonics based things implemented in the engine, not watched them yet

I don’t care about the implementation speed of the feature that I requested. It can be really useful for cinematics or anything, or for high - end spec PC gamers :smiley:

I also noticed some incorrect rendering things, so I sum up all of my request in that post.

  1. Missing Correct Blurry Reflections

  2. Normal Distribution Functions (NDF) in BRDF.usf is incorrect, because cone of the reflection distribution must be decremented based on (N dot L), GGX and other NDF input parameters are only Roughness and N dot H, imagine that I pick lot of L and V vector pairs on the isotropic surface’s hemisphere mirrored against the normal vector, N dot H will be the same, but all of them have different NDF, more grazing the angle the more reflection will converge to the reflection vector. (F * G * D) / (4 * N.L * N.V) there is no dependent value to D, GGX and all other NDF equations are bad in the engine. Correct NDF can be used to determine the sharpness of a reflection!

better illuminance = F * ((photonsReachedBumpLerp * G * D(H) / (4 * N.V)) + (1 - photonsReachedBumpLerp) * Gtop * Dtop(L,V)) / (N.L)

I put another G term also, not just D term, cuz I don’t know the behavior of current implementations.

  1. I saw that lot of view dependent roughness based functions and calculations are done in shaders, for example reflection probe capture codes, GBuffer after pass roughness values which used in a function or equation that is “view dependent” need a roughness value based on the correct NDF, so for example a material with roughness = 0.2, using that 0.2 value all of the pixels is incorrect, “ViewRoughness” become 1 when N dot L and N dot V reaches value of 0 at the same time.

  2. Additionally diffuse term in the final color must be decremented based on the fact that I state, more grazing angle -> less light will reach the zone of the surface where potential scattering can occur

Unreal Engine 4 is awesome keep up the good job.

Sorry for my weak english skills.