URP Render After TAA?

Is there a way to render objects outside of TAA? I am working on a splitscreen multiplayer game and have UI elements that become jittery from TAA. The Render Objects renderer feature seemed like the perfect candidate… except that despite TAA being a post process effect, setting a layer to render After Post Processing doesn’t escape it from TAA. I am using deferred rendering, so camera stacking does not appear to be an option for me at this time. Canvas set to Screen Space Overlay dodges TAA, and has the result I want, but is not workable for split-screen multiplayer. What a mess…

Can use a camera to render the scene with TAA to a texture and overlay the canvas over that.

Also can do more if use an open source TAA system, there is a lot in github, though mostly for URP and BiRP.

Is that really my only option? That sounds really inefficient – it’s a shame because Screen Space Overlay or even UI Toolkit renders UI outside of TAA perfectly, but both require major sacrifices. Screen Space Camera with the Canvas Scaler is perfect, but for whatever reason it cannot render using the Overlay technique.

I tried a few of these, wasn’t able to find one that worked in Unity 6 correctly.

Hi, can you try this in older versions of URP? (ex. URP 14)

You can submit a bug report if setting the Render Objects to AfterRenderingPostProcessing makes it queued after TAA in older URP, because they changed something in newer URP. (check this )

On URP 14 (2022.2.10, happened to have it installed), it is still being hit by TAA when rendered After Post Process. It seems like as long as TAA has been a part of URP, it has not been possible to use the Render Objects feature after TAA.

I have been working with two temporal AA from git, and recently converted both to Unity 6 URP and render graph.

I can test a scenario with one of them if is well defined. Though i have a feeling that the camera jitter needed will affect the after temporal stages due to pure camera motion, than a render pass in the post stack stack itself.

One of the temporal restores the camera directly in its post effect code, so might work out maybe.

Would you be able to share your modified package? If not, the test should be simple:

  • Setup a canvas using Screen Space Camera (make sure to drag and drop a scene camera into the canvas field otherwise it will render using Screen Space Overlay
  • For testing purposes, might as well add an image or two, and a TextMeshPro text to evaluate if it’s jittery
  • Layer should be UI
  • Probably need to setup the URP renderer to render UI using Render Objects
    I use AfterRenderingPostProcessing, Filter Queue is Transparent, Override Depth and Depth Test = Disabled
    Make sure to remove UI from the Renderer Transparent Layer Mask at the top

The goal is just to get TAA on the camera without jittering up the per-camera UI… all I’m really trying to accomplish.

1 Like

I tried this setup, but cant get any UI items to appear. Maybe i miss something with the render order or scaling needed in this mode ?

I use the main scene camera in the screen camera slot, default settings, if set to Overlay items appear ok. When toggle to screen space camera they disappear though.

EDIT: I made it work by add a GUI camera in ortho mode, set it to overlay and add to Main Camera. This way seems to not be affected by either of the two Temporal AA i use. Though i did not use the Render Objects in this case. Is this a needed setup and is it possible to do without use overlay ?

9845868--1417047--set1.jpg

Can I see the Render Objects renderer feature on the Universal Renderer Data asset? It should look like the attached. I use one camera, as camera stacking is not supported in deferred rendering.

9845889--1417050--image_2024-05-20_183644711.png

1 Like

Yes this as i made it also, in general even if put everything to render the gui, using the main camera in the canvas could not make it appear. If it generally is not in view the rest wont work for sure.

Apologies for the delay in response. I created a simple Unity 6 test project that demonstrates the issue, and is configured the way I’ve explained.

9849792–1418019–Canvas Test.zip (4.68 MB)

1 Like

Okay, very weird discovery. I have no idea if this is intended or an expected result.

If I override camera matrices using the “Camera” checkbox option in the Render Objects feature, we have finally escaped the TAA jitter hell! The downside is that I would like to be able to adjust the FOV of my cameras during gameplay as it’s a racing type game, so FOV cannot remain fixed. I was able to overwrite line 173 of RenderObjectsPass.cs so it would adopt the FOV of the scene camera.

from:
Matrix4x4 projectionMatrix = Matrix4x4.Perspective(passData.cameraSettings.cameraFieldOfView, cameraAspect, camera.nearClipPlane, camera.farClipPlane);

to:
Matrix4x4 projectionMatrix = Matrix4x4.Perspective(camera.fieldOfView, cameraAspect, camera.nearClipPlane, camera.farClipPlane);

If anyone from the URP team reads this, please formalize this into an option into the Draw Objects feature!

2 Likes

Nice find, this could be useful for many cases and my Temporal AA as well. Perhaps can make a Render Objects variant with this option outside the integrated one as well.

I tried to reverse engineer Render Objects and make a streamlined single-use-case version, but it relied on lots of internal methods, making a variant seemingly not workable? I’m not sure… I’m not yet well-acquainted with making custom render passes.

Surprised this is still the only solution for URP, even in 2025 :melting_face:
Please Unity, do something about this