Nodes/Atlas Camera/Atlas Stereo Render πŸ‘“
ComfyUI Node

Atlas Stereo Render πŸ‘“

Atlas Stereo Render πŸ‘“ β€” geometry-true stereo from real projection meshes, not a depth warp

By mikejamesvfxΒ·Created 3 months agoΒ·Updated a day agoΒ· 1
Atlas Stereo Render πŸ‘“
  • solve
  • source_image
  • stereo
  • left
  • right
  • report
β—„interocular_m0.065β–Ί
β—„convergence_m0.0β–Ί
β—„output_modesbsβ–Ί
β—„resolution1024β–Ί

AtlasStereoRender renders a stereo pair the honest way: each eye is a real render of the actual projection meshes, not a depth-warped copy. The distinction matters. The common shortcut - "depth-warp stereo" - takes the plate, shifts pixels by disparity, and hole-fills the gaps with heuristics; the result is convincing in a thumbnail and falls apart under inspection. This node offsets the eye along camera-right by Β±half the interocular, re-renders the layered projection scene through a z-buffer, and samples each layer's texture through its own projector camera's baked UVs. Occlusion comes from real geometry, not a guess. The matte-painting property - that the plate reassembles exactly from the recovered viewpoint - survives the eye offset, which is exactly what you want to check in stereo.

There's a design decision in the source worth respecting: convergence is shifted-sensor (a cx offset at the given distance), never toe-in, so verticals stay vertical. And disocclusions beyond what the layered geometry covers render as holes - that's the honest geometry-true answer, not a bug. The tooltip's advice is direct: add clean-plate bands to fill them.

Inputs

  • solve and source_image - the scene and the plate.
  • interocular_m - eye separation, default 0.065 m (human average). Only meaningful when the solve's metric scale is trusted - the tooltip explicitly tells you to check the 🩺 scene-health scale verdict first. If your scale is "assumed" and 10Γ— off, your stereo is 10Γ— off too.
  • convergence_m - 0 = parallel eyes; >0 puts that distance at the screen plane (shifted-sensor convergence).
  • output_mode - sbs (side-by-side), sbs_half, anaglyph, or separate.
  • resolution - long edge per eye (256–4096, default 1024). The pure-numpy rasterizer is O(faces Γ— pixels), so keep it moderate on dense relief meshes; it runs per eye.

Outputs: the composited stereo image plus left and right (so you can drive a real stereo display or a headset), and a report.

Why you'd reach for it

If your deliverable is a parallax-ish "living photo" or a marketing push-in, depth-warp is fine and this node is overkill. If your deliverable is actual stereo - a VR backdrop, a stereo comp, a client sanity-check on a projection - then geometry-true is the difference between "looks 3D" and "is 3D," because the occlusion relationships are real and consistent per eye. It's also a superb QA tool: render a stereo pair of your projection scene and any tear or mis-registration in the layers shows up instantly as a broken disocclusion. It's the pack's own viewport truth-teller.

Gotchas

Scale first, always - stereo is the one output that makes a bad scale visible as physical wrongness rather than just wrong numbers. And remember the holes: if your scene lacks clean-plate bands behind the foreground, don't be surprised when the offset eye shows gaps. That's the geometry telling you the truth about coverage.

Install

Core node, no extra dependencies:

cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git

Restart, or install via ComfyUI Manager ("atlas-camera"). It's under Atlas/08 Β· Look & Render, near the end of the menu's pipeline order - render-time, where it belongs.

CategoryAtlas/08 Β· Look & Render

Inputs (6)

NameTypeDefaultDescription
solveATLAS_SOLVEβ€”
source_imageIMAGEβ€”
interocular_moptFLOAT0.0650.001–1Eye separation in metres (human ~0.065). Only meaningful when the solve's metric scale is trusted β€” check the 🩺 scene-health scale verdict.
convergence_moptFLOAT0.00–10000 = parallel eyes. >0 = shifted-sensor convergence: that distance sits at the screen plane.
output_modeoptCOMBOsbs4 options: sbs, sbs_half, anaglyph, separate
resolutionoptINT1024256–4096Long edge per eye. The pure-numpy rasterizer is O(faces x pixels) β€” keep moderate for dense relief meshes.

Outputs (4)

NameTypeDescription
stereoIMAGEβ€”
leftIMAGEβ€”
rightIMAGEβ€”
reportSTRINGβ€”