There’s a bug though: Unity Issue Tracker - The view renders black when using Framebuffer Fetch with Foveated Rendering in a Player for Meta Quest
Whole thread on how to do this with a custom pass and MSAA and what you cannot do: How to Import color backbuffer to read on Meta Quest 3 + Vulkan
On-Tile Post Processing for all platforms just landed in 6000.5.0a9
.
Make sure to turn on “Tile-Only Mode” on the URP Renderer (more on that soon).
We’d love to hear from you with regards to the performance impact in your project of using On-Tile Post Processing instead the regular one. It will help to reduce the GPU bandwidth usage on Tile-Based GPUs. It might also help with performance, but that is application and device specific.
I’m using Unity 6000.3.11f1, but I found a way to get this working to an extent.
The oculus fork of URP allows for tile-based post-processing and depth buffer sampling.
Usually effects that need the depth buffer add the Copy Depth render pass and prevents the opaque, skybox and transparent passes from being merged, but this can be avoid by using subpasses.
Although they only provide branches with subpass support for Unity 2022.3 and 6000.0, I was able to get the 6000.0/17.0.4-subpass branch to work in Unity 6000.3.11f1 with a few commented out lines and some NativeArrays reinterpreted from int to EntityId or vice versa. Ideally, the changes they made to URP 17.0.4 should be ported to URP 17.3.0.
I can get the DepthInputSubpassSample project to work in Unity 6000.3 with just 6 passes. All of the rendering in this sample can be done with just the
Backbuffer color and Backbuffer depth resources if you disable shadows. Enabling MSAA adds _CameraTargetAttachmentA and _CameraDepthAttachment and needs 7 passes, and enabling Depth Texture adds those as well as _CameraDepthTexture and uses 8 passes.
This is on a desktop so it doesn’t need to be a tile-based GPU to work. Maybe it’s too late to add this to 6000.3, but it would be good to see it adopted in future versions of URP.
There’s also the PostProcessSubpassSample project, although I haven’t compared it to Unity’s on-tile renderer feature.
Is possible use on-tile post processing while passthrough is active?
I finally managed to get the tile post-processing working but passthrough doesn’t work with post-process flag enable on camera.
I was able to port these changes to URP 17.3.0. You can try the branch yourself here:
Both samples work in Unity 6000.3.12f1 and post-processing supports subpass merging when only the compatible overrides are applied. Remember to change the Packages/manifest.json file of each sample so that the correct branch is being used:
"com.unity.render-pipelines.core": "https://github.com/Torgo13/Graphics.git?path=/Packages/com.unity.render-pipelines.core#6000.3/staging-subpass",
"com.unity.render-pipelines.universal": "https://github.com/Torgo13/Graphics.git?path=/Packages/com.unity.render-pipelines.universal#6000.3/staging-subpass",
"com.unity.render-pipelines.universal-config": "17.0.3",
"com.unity.shadergraph": "https://github.com/Torgo13/Graphics.git?path=/Packages/com.unity.shadergraph#6000.3/staging-subpass",
It modifies the existing URP post-processing setup so the On-Tile Post Processing for Untethered XR renderer feature should not be used in this branch. This works with the Vulkan-compatible Windows and Android devices I’ve tested and not just XR Android devices.
Disabling MSAA and HDR rendering can avoid a final bit to the backbuffer as there’s no need to resolve MSAA samples or perform colour conversion.
