I could not solve it with the suggested at all, is simply not working.
So i hope we get some news on this, can we use it or not, will it be replaced and also will it be replaced with something that works in the same context ?
Thanks
I could not solve it with the suggested at all, is simply not working.
So i hope we get some news on this, can we use it or not, will it be replaced and also will it be replaced with something that works in the same context ?
Thanks
A fix for this is under review now and should be available in a patch for Unity 6 around a month from now.
any updates when this will be fixed, I am still seeing the error in 6.0.9f1
the camera renders correctly in the editor but not in the build and in both I have the error
Recursive rendering is not supported in SRP (are you calling Camera.Render from within a render pipeline?).
and it’s not looping it’s only debugging one time every clear, and using URP 17.0.3
and render the camera using
var requestData = new UniversalRenderPipeline.SingleCameraRequest()
{
destination = viewTexture,
};
if (RenderPipeline.SupportsRenderRequest(cam, requestData))
{
RenderPipeline.SubmitRenderRequest(cam, requestData);
}
any help??
also using the
UniversalRenderPipeline.RenderSingleCamera(context, cam);
not showing any errors but show the same result in the play mode

What Unity version is used ? Also is it in rendergraph ?
EDIT: i see is 6.0.9f1, was the RenderSingleCamera working on previous Unity 6 versions ?
If RenderSingleCamera is no longer working, then this means many assets will just outright be broken completely, i hope this is not the case.
Hi, any update on this ? Most of my assets depend on the RenderSingleCamera and is very serious issue.
Thanks
the RenderSingleCamera is giving warning being an obsolete and also give the same result as the SubmitRenderRequest both works fine on the editor and does not recursive rendering in the build.
Hey, since 6000.0.12f1, SubmitRenderRequest API can now be triggered within render loop callbacks (RenderPipelineManager.beginCameraRendering for example).
So the following case is now supported:
Camera cameraA; //our main camera that renders the scene
Camera cameraB; //camera only rendered with RenderRequest
void OnCameraRender(ScriptableRenderContext ctx, Camera camera)
{
RenderPipeline.SubmitRenderRequest(cameraB, request);
}
void Start()
{
//this adds a callback to render cameraB when main cameraA is rendered
RenderPipelineManager.beginCameraRendering += OnCameraRender;
}
Note that we still prevent full recursive rendering to avoid infinite loops, i.e. in the above case rendering of main cameraA through SubmitRenderRequest is not allowed.
Let us know how it works for you!
Seems to work without a hitch! I’ve had the required code sitting there, commented out, for over a year so it was straightforward to adopt.
Planar reflections work as expected:
I’ve put a considerable amount of effort into trying to do Planar Reflections through a ScriptableRenderPass to no avail. So this SubmitRenderRequest method is the ticket!
Using URP in Unity 6000.0.14f1, Planar reflections now work but there are some caveats.
There seems to be a difference between the game view and scene view.
I made sure they’re not both visible at the same time to differentiate.
There is also a big difference when using Direct3D11 or OpenGL on Windows. and Vulkan and OpenGL on Android.
Finally having no AA in either the URP settings or on the renderTexture makes some reflections flipped along the y-axis. This is less of a problem because AA for mobile VR is almost a must, but still, would be good to have this fixed as well.
As I want to have “Rendergraph compatibility mode” set to off (the Unity 6 default) all of these test have been done with rendergraph enabled.
When “compatibility mode” is enabled, the results are almost perfect in all combinations (except when AA is set to none, or a second recursion missing in the sceneview when SubmitRenderRequest is used).
Result: partial fail, gameview is correct but the reflection is not being rendered for the sceneview. There are errors in the console, hide the scene view and the errors stop coming.
Build on Android using OpenGL: Perfect
Build on Android using Vulkan: Partial Fail second recursion is flipped along y-axis
Result: partial fail, sceneview is now correct. No errors in the console. Gameview renders the second recursion flipped on the y-axis.
Android builds are the same as Test 1 (as to be expected)
Result: partial fail, gameview is correct, sceneview only shows the first reflection recursion. No errors in console.
Android builds are the same as Test 1 (as to be expected)
Result: Perfect
In Unity 6000.0.14f1 when developing for VR on Quest, and using the “Portals for VR” or “Mirrors for VR” assets, currently use OpenGL on Windows (so your scene previews work) and OpenGL on Android so your second recursions will not be flipped. Alternatively enable Compatibility Mode.
I realise a test project for the Unity team would be beneficial but in essence all I used is the Mirrors for VR unity asset I developed and turned unity options on and off..
Hope this helps!
Tom
Thanks a lot for the thorough and detailed testing @TomGoethals!
Could you submit a bug report with a minimalistic repro case? This will definitely help us resolve these issues faster!
Thanks
Can anyone help me out?
I’m trying to replace RenderSingleCamera() with SubmitRenderRequest(). In RenderSingleCamera(), I just pass the context and the camera I want to render. But with SubmitRenderRequest(), I don’t understand what kind of data the request parameter needs. For example:
RenderPipeline.SubmitRenderRequest(cameraB, request);
What exactly does request mean here? All I’m aiming for is to manually render my water reflection camera. I’ve assigned a render target texture, and I need it to render manually in beginCameraRendering
Here’s what I currently have:
private void PreRender(ScriptableRenderContext context, Camera cam)
{
SetupRefCam(cam);
UniversalRenderPipeline.RenderSingleCamera(context, reflectioncam);
}
How can I replace RenderSingleCamera() with SubmitRenderRequest()? Am I missing something, or is there a better approach for this? I’m a bit new to this, so if I’m making a silly mistake, please go easy on me! ![]()
Some complete example, e.g. a reflection camera script would be most welcome for this functionality, ideally for RenderGraph too.
Hey @SagarChauhan,
Did you check the RenderRequest documentation?
RenderPipeline.StandardRequest.UniversalRenderPipeline.SingleCameraRequest (no camera stacking). It’s a bit more advanced and detailed.In your case, I believe you can use any type of Request, you just need to call RenderPipeline.SubmitRenderRequest(reflectionCam, request) in a callback to beginCameraRendering. You can check my message above about that.
Regarding the request parameter, it is mostly used to set the destination texture where you want to render, assign here the render target texture that you mentioned. If you are using a classic 2D texture, just set request.destination and you should be fine.
Let me know if it helps.
Is the error mentioned above (Recursive rendering is not supported in SRP (are you calling Camera.Render from within a render pipeline?) intended to be fixed in 2022? Currently seeing this in 2022.3.28, though things seem to be working correctly otherwise.
I’ve also tried moving the code to a scriptable render pass, though ran into issues with both culling and stereoscopic rendering - is RenderRequest the recommended way of doing this kind of thing (ie, planar reflections) in the 2022 and 6 release cycles?
Hi, so request.destination will correspond to the render texture set in the camera target texture in scene for example ?
Also is there any news on how to render to a 3D texture with a replacement shader like in BiRP with set random write target ?
I assume would also need to use the new method and not RenderSingleCamera.
Thanks
Thank you, @AMoulin!
I tried the basic example with RenderPipeline.StandardRequest, and it worked like a charm! Somehow, I missed it in the docs the first time ![]()
Here’s the code in case it helps anyone. My setup renders a camera to a texture, which I then use for water surface reflections. The render texture is assigned as the target for my reflection camera, and SetupRefCam(cam); handles all the projection calculations for it, and the PreRender() is Invoked by beginCameraRendering.
private void PreRender(ScriptableRenderContext context, Camera cam)
{
SetupRefCam(cam);
RenderPipeline.StandardRequest request = new RenderPipeline.StandardRequest();
RenderPipeline.SubmitRenderRequest(reflectioncam, request);
}
Feel free to ask if anyone needs more details—I’ll help whenever I can! ![]()
For CustomRP programmers: SubmitRenderRequest will not use ProcessRenderRequests from your RP, Render(context, cameras) will be called instead right at the point where SubmitRenderRequest is called.
But only if the render request FIRST FIELD OR PROPERTY (I’m not joking) doesn’t have a value (not just the type) or RenderTexture.
Seems like a bug, because no requirements in docs, nor the interface is needed to make a render request. Same behavior with HDRP.
So render requests must be completely broken nowadays.
Unity 6000.0.38f1 Win64.
Only if try to use the new system ![]()
I still get away with the good old trusted working perfect code, thank god it still works
I hope they just leave it and never deprecate it, as it just works, at least for my systems
RenderSingleCamera is definitely not obsolete in my mind
is there an easy way to replicate the functionality of the good ol Camera.RenderWithShader() api with this renderRequest api? one that is only-code friendly, without having to manually create editor assets, assign stuff to serialized fields (don’t wanna create renderer assets, create cameras on editor time, assign the renderer to it, etc etc) just want to generate a texture on demand out of the pipeline loop, from code, without doing all that asset-based setup. Just like RenderWIthShader worked in the past. thanks in advance