OK, after some fumbling around I found a workable, if a bit hacky, solution for this.
The main issue here is that Blender's compositor was designed assuming all frames and image are the same size, and thus wasn't really made for handling differently sized pictures or composing images of arbitrary dimensions.
Anyway it's a bit of a involved process that will rely on a three scene system Scene A
, Scene B
and scene Size
- Create you scene
Scene A
regularly (set up your render objects, meshes, lights, etc)
- Make sure you add all objects to a certain group with Ctrl + G (that we shall call for the sake of example
Group
) including lights but excluding your camera objects. (Use a purpose made collection for this goal in Blender 2.8+)
- Make sure this group's center is at the scene
0,0,0
coordinate
- Create your camera object wherever desired but do not add it to this group
- Set up your render size and render preferences all as desired
- Now add a new scene
Scene B
to your blend file using the option Copy Settings
- In the new scene add a new group instance of the previously created
Group
- Make sure this group instance center is also at the scene $0,0,0$ coordinate
- Make sure the new scene is using the same World shader and all other scene settings match, so that the two renders are alike.
- Go back to
Scene A
select your camera object and link it to Scene B
by pressing Ctrl + L > Make Links > Object to Scene > Scene B
- Go back to
Scene B
and select the linked camera and make it's object unique by pressing U > Object. For Blender 2.8+ go to Object > Relations > Make Single User > Object. This will keep the camera settings linked and in sync with the previous one, but allow you to move them independently.
- Now Place this camera as many units to the side as desired. If you want them both centered, you may want to consider moving one $X$ units in one direction in
Scene A
and the other one $-X$ units in the opposite direction in Scene B
. If they are somehow rotated in global coordinates you may double press X > X to move them in local $X$ axis. If they are animated consider parenting them both to a helper empty object, and animate the parent object instead.
Your scene should now be setup, now you need to setup the rendering system to automate image assembly.
Add a third empty scene called Size
using the New option from the menu. This scene will only exist as a hack to setup an image size. Disable everything in the render layers so it will render instantly. The only important thing to do here is to make sure you setup render size double the width of the previous Scene A
and Scene B
.
Say if scene A and B have both a rendering size of 800 x 600
(and this must be kept in sync manually) scene Size
must have a rendering size of exactly 1600 x 600
so images can be correctly combined side by side.
Add a camera to the scene Size
(anywhere is fine, it won't be used much anyway) and set it as active.
Now you must specifically set up compositing in scene Size
and configure your compositing nodes as shown bellow, so Blender will automatically fetch the renders from the other scenes and compose them into one large stereoscopic image.
Add two additional Render Layer nodes, and for each change the Scene dropdown menu to pick both Scene A
and Scene B
and combine them using Alpha Over nodes after transforming them half their with in the X axis.
You must always render from scene Size
from now on to obtain your stereoscopic images automatically, and you will probably have to update each scene's render manually from the little rendering buttons in the nodes themselves (instead of just pressing F12) to render from other scenes, otherwise Blender will probably render them in the incorrect size because it was never meant to render this way.