Nodes/Atlas Camera/Atlas Unreal Depth Geometry (MoGe-shaped) πŸ—Ί
ComfyUI Node

Atlas Unreal Depth Geometry (MoGe-shaped) πŸ—Ί

Your Unreal depth pass, served as MoGe-shaped metric depth for the warp

By mikejamesvfxΒ·Created 2 months agoΒ·Updated a day agoΒ· 1
Atlas Unreal Depth Geometry (MoGe-shaped) πŸ—Ί
    • moge_geometry
    • report
    β—„exr_pathβ–Ί
    β—„focal_mm35.0β–Ί
    β—„sensor_width_mm23.5β–Ί
    β—„width960β–Ί
    β—„height640β–Ί
    β—„frames1β–Ί
    β—„channelFinalImageSceneDepthWorldUnitsβ–Ί
    β—„depth_scale1.00β–Ί
    β—„far_clip_m0β–Ί

    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 the SceneDepthWorldUnits post-process pass; that material divides Unreal's centimetres down so the values already arrive in metres.
    • focal_mm and sensor_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.

    CategoryAtlas/01 Β· Input & Camera

    Inputs (9)

    NameTypeDefaultDescription
    exr_pathSTRINGThe EXR Movie Render Queue wrote. Point at the file, not the directory.
    focal_mmFLOAT35.01–1000The RENDERING camera's focal length, off the CineCamera component. Not the take's lens unless they are the same camera.
    sensor_width_mmFLOAT23.51–200That camera's filmback width. Focal and filmback together give the horizontal field of view; either one alone does not.
    widthINT96064–4096Raster width. Match the frames you feed the warp.
    heightINT64064–4096Raster height. Match the frames you feed the warp.
    framesoptINT11–2048How many frames to emit. A still plate warped by a camera path needs one per frame of the clip.
    channeloptSTRINGFinalImageSceneDepthWorldUnitsLayer name inside the EXR. MRQ names it after the post-process material, so renaming the material renames this.
    depth_scaleoptFLOAT1.000.000001–1000000Multiplied onto the channel to reach metres. 1.0 for SceneDepthWorldUnits; 0.01 if you ever hand it raw centimetres.
    far_clip_moptFLOAT00–100000Mask 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)

    NameTypeDescription
    moge_geometryMOGE_GEOMETRYβ€”
    reportSTRINGβ€”