Fix SSR please

Why not make SSR clamping on the edges of the screen?.. i must admit that its quite annoying to look at SSR as it is now, unreal is really the best engine out there, but the SSR is not coming along with all the quality you deliver.
Planar reflection is quite a performance hit on gpu, while SSR is so much faster but atm just not good enough.

Other engines just made this clamped, and that is really so much better to look at.

Can’t you just make it at least an option?.. SSR clamp on or off?

Hope you will do something with this, as its really a weird sight, all those awesome features and SSR makes it… sorry… ugly :frowning:

You might want to post a screenshot of the problem

I had some ugly blotches of colors in my character’s eyes, turns out it was the skin reflected through SSR. I had to disable it but I guess reflection captures worked in my case. Did you try those?

found these online:



https://i.ytimg.com/vi/JswYvy0zvxY/maxresdefault.jpg (this is Ark)

the problem he refers to is the complete loss of reflections towards the edges of the screen, which is a really jarring issue especially when in motion

The single best explanation would be, that if your pixel is on the edge of the screen, there is no guarantee that the information it is supposed to reflect is located on screen also. In fact it is commonly opposite, especially considering perspective projection. On top of that, there is a temporal factor here too. Fading reflections at screen edges is least of evils here.

As alternatives, you only have plannar reflections and cubemaps. So far nothing better had been applied on practice, and few years will pass before something like voxel-based reflections will become available due to computing power increase.

In any case, it is possible to disable smooth fading and use clamping using shader edits only, though after doing it, I’ll guarantee that you’ll instantly want to revert back.

Thank you ,

My bad :slight_smile:

But those screenshots is exactly what i mean.

Other engine out there
https://i.ytimg.com/vi/N6QmDspWgaI/maxresdefault.jpg


Looks so much better and easier on the eyes, i am not a coder or anything. But i dont think its very hard to do as the other engine has this for a very long time now on a very good fps as well.
Epic should keep in mind that we also want to make games with unreal at the highest FPS possible, and the best quality you can get on that fps. Unreal can sure provide some very good scenes, but those look best in a picture, not very usefull to actually build a game with it… the cinematic side of unreal is just awesome. Though there are still people who want to make games and need the best quality and performance.

Usually its good idea to clamp X but Y is still big problem. You can’t really clamp it or everything looks super odd when looking downwards.

If they don’t blur towards the edges then you get some ugly artifacts that are much more noticeable.

SSR isn’t ideal for reflections due to how it’s a post process effect, it’s going to have limitations to be able to work in real-time.

Like other engines UE4 should have localized cubemaps instead of skylight. Having a skylight placed in a level is wrong from scratch.

The idea behind SSR in every engine is to give you real time ish reflections and blend into a cubemap as the camera is tilted so you wouldn’t notice a hard falloff while SSR is fading out. For that UE4 forces you to use a Skylight with SLS Captured Scene and an intensity of 1.

You notice only when your Skylight intensity is set to 1 you have acceptable results as your camera is tilted down. While this provides decent results in this particular test, it doesn’t work for most cases.

A quick look at why Skylight should be removed and localized cubemaps should be added to the engine.

1. Skylight applies the sky color uniformly everywhere equally and you can’t stop it from affecting interiors. On the other hand localized cubemaps only affect the selected radius. Every part of the game world can have it’s own localized cubemaps to get unique reflections and lighting that would correspond with what’s placed in that environment.

2. You generally don’t have to have an skylight with SLS Captured scene since that usually ends up giving you blue shadows. But if you end up loading a custom cubemap you’d not have a seamless transition between SSR and the cubemap.

3. You normally don’t want to have an skylight with an intensity of 1 since that lights up the shadows too much and doesn’t give you any freedom with lighting and controlling the darkness of your shadows. But by reducing the Skylight intensity you get a hard falloff where SSR fades out like shown above.

4. Below is an interior-like case. Sky is completely blocked by a large plane. you still get to see the sky on the floor because the plane that’s blocking the sky isn’t picked up by Skylight’s scene capture. This problem is like a plague for all your interiors. To fix that in UE4 you can add a Reflection Capture Sphere in your interior, but that doesn’t prevent the sky color from being applied to every inch of your interior which makes them useless. On the other hand if you had a localized cubemap actor placed inside your interior it would capture it’s surrounding only, not the sky, and you’d have reflections and lighting that correspond with everything that’s inside your interior, regardless of sky and the outside world.

To list the advantages of having localized cubemaps instead of Skylights:

1. No hard SSR falloffs.
2. Control how dark you want your shadows to be.
3. No uniform sky light. Each place in the game world can have it’s own cubemap/unique ambient light color and intensity.
4. Getting the light from localized cubemaps basically gives you fake G.I without needing to bake lighting (this is a huge plus for open world games).
etc.

Frostbite 3 uses localized cubemaps.
Cryengine 3/5 uses localized cubemaps. Crytek removed their skylight years go.
Unity also uses localized cubemaps.

In the end it’s a matter of convincing Epic to do the right move.

Aren’t reflection capture actors precisely “localized cubemap” capturers?

yeah I don’t see how reflection capture actors aren’t exactly what you’re describing, Maximum-Dev

No they are not.

  1. They cast reflections, reflection is visible on smooth/glossy surfaces and have no effect on rough surfaces.
  2. They don’t light up the environment/shadows like local cubemaps in every engine do. Here’s a floor with roughness set to 1:


If they were the same as local cubemaps then the shadow should’ve been lit without adding a skylight to the scene.

  1. With reflection actors not lighting up your environment you will still need to place an Skylight to light up the shadows.
    And placing a skylight leads to all the troubles I mentioned in my earlier post.

If we had local cubemaps both Skylight and Reflection captures would be quite useless as localized cubemaps do the job of two.

Also side note, not related to this thread, but I just found this problem.

ah I was (wrongly) assuming that localized cubemaps were only used for reflections.
in UE4 terms it would mean repurposing the reflection capture actors to also contribue to lighting (in what would essentially be IBL)

I don’t think Skylight is useless though. at the moment UE4 blends between reflections of both reflection capture actors and the skylight (based on proximity). skylight reflections are still useful for distant objects in places where you don’t want to set up reflection capture actors (specially given how UE4 has a hard cap of the amount of reflection capture actors you can use)
Mash the current reflection functionality into the lighting pass (using the lowest mip of the reflection) and I’d say we’d pretty much have what you’re looking for (and potentially a **** fine ‘precomputed but fast to iterate’ indirect illumination system). doesn’t sound excessively complex to pull off either

Every PBR surface has diffuse and specular. Even fully rough surfaces has reflectivity of 0.025. Roughness don’t actually make specular any dimmer just blurrier. Reflection captures are localized cubeamaps but these are not used for any diffuse calculations.

I would still like to see the skylight as an option for where there aren’t reflection captures to use as IBL, just in case you miss a spot. Having them function similar to the way the CryENGINE environment probes do though, which is what you suggest, would be great for a lot of situations. If I remember correctly, the Ark devs even made a custom solution to simulate it, they showed it off briefly on one of the livestreams when the mod tools were announced and it seemed pretty similar.

As I stated earlier, you’d need to set your skylight intensity to 1 for that to work properly, and 1 is something nobody really uses for skylight intensity which results in ugly SSR falloff.

You still don’t need Skylight for that. One local cubemap with a radius that covers all the game world will do just that. That’s exactly how it’s done in Cryengine:

I meant that on rough surfaces you don’t see any change from reflection capture sphere and they don’t produce any ambient lighting which makes them not being what I was describing at all.

Does that local cubemap thing work in fully dynamic games? Noone would be manually placing them.

Yes they work. People actually do manually place those in the levels in other engines. It takes no time to drag/drop an actor in the scene. The end result is worlds better than having a flat skylight all over the level.
UE4 currently supports it through PPV. When you load a cubemap in PPV it contributes to the lighting, you can turn off skylight, place one PPV with a cubemap that covers the whole map, then place more PPVs and match their bounds for your local areas i.e your interior, then create a cubemap from your interior, load it in the PPV that covers your interior only, and enjoy having proper ambient light. But why aren’t doing that already? Becasue:

  1. PPV has loads of other stuff to it besides the cubemap part, which makes it really not efficient to use 100 PPVs in your game world. So we need an actor similar to Reflection Capture Spheres that’d only handle the cubemap alone.
  2. You need to manually create a cubemap from your environment and load it into the PPV, which is really a waste of time when you’re placing lots of them around. In Cryengine when you place a cubemap actor (Environment Probe) it has a Generate Cubemap button which does the job for you, and you can set what resolution you want the generated cubemap to be i.e for interiors 64x64 would do since you only want the light information, not any details.

Thisis me using a cubemap instead of Skylight. Now imagine having local cubemaps, end result would be priceless.

This is some very good information :slight_smile:

I will try and play around with those cubemaps, your picture looks awesome, I dont get it that way ;-)… still learning though.