[URP] Screen Space Reflection Plan

Screen Space Reflection is on the URP roadmap for quite a long time.

Will it still for deferred path only, just like the Built-In RP?

Hi,

SSR is a tricky subject when it comes to performance/quality on mobile, we want to solve the main use case which is nicer rough reflections in URP, much of this will come from better control of reflection probes much like HDRP with different influence shapes and better blending(finally being able to rotate probes).

Obviously this is not a true replacement for SSR as if you have procedural environments or a lot of dynamic stuff going on, baked probes are not going solve it. But we want to make sure we have a solution that works well on mobile and looks good without compromising what SSR brings, we have decided though that even though this was in the Builtin renderer is is not part of our goals for URP default, so work will not commence on this until we have reached that milestone.

As for SSR in forward, right now we don’t have plans to add it into forward, but with changes happening with the backend of URP, Render Graph being added will make customising the URP frame even easier and more expanded, we will definitely look at how easy it would be for anyone to add a slim Gbuffer to feed into an SSR solution. But first release of SSR for URP will be Deferred only.

1 Like

Hi, sorry for the long text below.

I just realized that there are and will be more “UniversalForwardOnly” passes in URP. (like clear coat, and other custom lighting models) Because light stencil volume requires 1 draw call per (light * lighting model).

While I was about to say something like this:
In Built-In RP, seems that only transparent objects will not be rendered to gbuffer. (maybe I’m wrong because I haven’t used the Built-In before)

So I think deferred SSR can be less useful in URP’s case.

Then I opened Unity and noticed that URP will enqueue a “DepthNormalsOnly” pass for “UniversalForwardOnly” objects in order to calculate deferred SSAO. (output surface normal to GBuffer2, but no smoothness)

So, “ForwardOnly” objects lack Specular & Smoothness information for deferred SSR.
8479808--1127309--URP GBuffer Structure.png

In “LitDepthNormalsPass.hlsl” (Complex Lit), will URP?
Output “normal + smoothness” as 1st MRT if deferred, no smoothness if forward.
Output “specular + nothing” as 2nd MRT if deferred.
Output Rendering Layer as 3rd MRT if required.
Note: Perhaps need to set the material flag of these pixels to “no lighting”, so that they will not receive any deferred lights.
8479808--1127318--URP DepthNormalsOnly.png

In this way, I think the deferred SSR will be much useful.

And for forward path, which I actually care the most, maybe URP can?

In DepthNormals pass:
Output “normal + nothing” to “_CameraNormalsTexture” as 1st MRT.
Output “specular + smoothness” to “a SpecSmoothTexture” as 2nd MRT, if enabling SSR/other features.
Output Rendering Layer as 3rd MRT if required.
Total MRT requires: 3

I saw that URP already uses MRT for Rendering Layer, and seems that GLES 3 & WebGL 2 both supports 3+ MRTs.

I know that Built-In does not support Forward SSR, but I’m sure that URP is trying to be the Built-In 2, not 1.

And URP users would be glad to hear that there will be plans for forward SSR, even if the first release will be deferred only.

In the mean time though Shiny SSR is a fantastic asset that works in URP forward.

2 Likes