- Home /
how to do a simple multi-pass rendering?
Hi there,
I would like to do a relatively simple two-pass rendering in Unity. I'm used to use OpenGL, where I could setup a multi-pass rendering rather fastly. Unfortunately I'm kind of perturbed in Unity3D. Especially, I cannot find a simple example.
What I want to do is
Render object with Shader1 from camera1 perspective into a RenderTexture. I create a mask here (stencil). This actually works and is fairly easy to setup.
I want to composite the mask (render texture) with another texture using Shader2 and display the result. Shader2 is again fairly simple, two texture lookups and simple computation. So I set up a second camera2 orthographic and a plane with the attached shader material that takes as input the mask (render texture) and a second texture.
Problem is the output is totally wrong. I'm not even sure the first pass is done before the second. I set camera depth of camera1 to 0 and depth camera2 to 1, so they should be in order. Do I have to disable a camera, when the other camera is doing its rendering? How can I be sure that rendering is done in the right order so that the output is coherent?
I can't find clear instructions or examples on that topic. I also looked into the ImageEffects, but it didn't help a lot.
Thanks for any comment
Answer by ScroodgeM · Jul 20, 2012 at 08:50 AM
you simply can disable cameras and render frames on it using Camera.Render() so you'll be sure your camera already renders a frame
Answer by mcroswell · Aug 18, 2014 at 10:19 PM
I'm interested in more efficient ways to do multi-pass as well. Hopefully, someone knows some low-level methods.
My approach:
Shut off the main camera, and using an array of cameras, did cams[i].Render() (as per ScroodgeM's answer above) in the Update() of a singleton script attached to the ortho camera using an array of RenderTexture's as targets. In that script, I added a OnRenderImage(src, dst) call-back (Pro Only) and did a blit in there. Seems to work, but a bit of a hit in efficiency.
I'd love it if anyone else knows of possibly more efficient ways.
Your answer
Follow this Question
Related Questions
how to do a simple multi-pass rendering? 0 Answers
Using Color.Lerp with Lightweight Render Pipeline 1 Answer
Layer Dependent Reflections 1 Answer
How to remove URP from the project 0 Answers