Atlas Unreal Depth Geometry (MoGe-shaped) πΊ
Your Unreal depth pass, served as MoGe-shaped metric depth for the warp
- moge_geometry
- report
Say your scene is a solved photograph that you then dressed in Unreal - a castle dropped on the hill, figures placed, all the things you built rather than photographed. The camera-solve's relief mesh only knows the terrain that was in the photo. Render a move against that and the castle rasterises at the hill's depth, warping like paint on a slope instead of a thing standing on it. The fix is to use the depth Unreal itself rendered - which has the build and the ground in one pass.
Atlas Unreal Depth Geometry πΊ turns that rendered pass into the moge_geometry shape the CrossView-Warp / LTX workflow wants: metric depth per pixel, a validity mask, and intrinsics. Point it at the EXR Movie Render Queue wrote, and out comes geometry that cannot disagree with the pose path recorded in the same Unreal scene - they're one measurement, made by the same camera, in the same world space. A monocular estimate of the same frame would be a second opinion with its own scale and its own recovered focal, and nothing downstream would ever check the two against each other. That's the whole argument for this node: no second opinion.
What you feed it
exr_path- the 32-bit EXR from Movie Render Queue. Point at the file, not the directory. Feed it theSceneDepthWorldUnitspost-process pass; that material divides Unreal's centimetres down so the values already arrive in metres.focal_mmandsensor_width_mm- off the rendering CineCamera's component. Focal and filmback together give the horizontal field of view; either alone does not. Defaults are 35 mm and 23.5 mm - change them if your camera isn't that.width/height- raster size, matching the frames you feed the warp.
Optional but worth knowing: channel defaults to FinalImageSceneDepthWorldUnits, which MRQ names after the post-process material - rename the material and you rename this. depth_scale is there for the day the values stop being metres (0.01 if you ever hand it raw centimetres). And far_clip_m is the quiet lifesaver: an ImagePlate standing in for sky is real geometry to the renderer, comes back at the card's distance, and the warp will happily parallax it like a wall. Clipping past it puts the sky back where it belongs - masked out, magenta, for the LoRA to fill.
The output
moge_geometry feeds the warp exactly like the relief-based sibling would, plus a report with the depth range and coverage. The one thing to verify yourself: trust the channel name only so far. Check once against something whose distance you know rather than assuming the units - the author's own note says exactly that.
Installing
This is one of the LTX-camera nodes in atlas-camera:
cd <ComfyUI>/custom_nodes
git clone https://github.com/mikejamesvfx/atlas-camera.git
Restart, done - no extra pip deps for reading EXR here (the pack's core is dependency-free). The real prerequisites are outside ComfyUI: a dressed Unreal scene and a Movie Render Queue pass rendered to EXR.
Gotchas
The focal_mm and sensor_width_mm belong to the rendering camera - not the take's lens, unless they happen to be the same camera. Mixing them up silently changes the field of view your depth is interpreted through. And frames (optional, default 1) must be one per frame of the clip if you're warping a moving plate; a still render repeated across the clip only ever has frame 0, which is a different and legitimate setup - just don't feed a one-frame geometry to a 121-frame clip and expect the warp to figure it out.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| exr_path | STRING | The EXR Movie Render Queue wrote. Point at the file, not the directory. | |
| focal_mm | FLOAT | 35.01β1000 | The RENDERING camera's focal length, off the CineCamera component. Not the take's lens unless they are the same camera. |
| sensor_width_mm | FLOAT | 23.51β200 | That camera's filmback width. Focal and filmback together give the horizontal field of view; either one alone does not. |
| width | INT | 96064β4096 | Raster width. Match the frames you feed the warp. |
| height | INT | 64064β4096 | Raster height. Match the frames you feed the warp. |
| framesopt | INT | 11β2048 | How many frames to emit. A still plate warped by a camera path needs one per frame of the clip. |
| channelopt | STRING | FinalImageSceneDepthWorldUnits | Layer name inside the EXR. MRQ names it after the post-process material, so renaming the material renames this. |
| depth_scaleopt | FLOAT | 1.000.000001β1000000 | Multiplied onto the channel to reach metres. 1.0 for SceneDepthWorldUnits; 0.01 if you ever hand it raw centimetres. |
| far_clip_mopt | FLOAT | 00β100000 | Mask out anything at or beyond this depth, in metres. 0 keeps everything. Use it to drop a backplate card standing in for sky. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| moge_geometry | MOGE_GEOMETRY | β |
| report | STRING | β |