Aller au contenu

Z to World Pos Node

By Kriss Norde

The World node converts a Z-depth channel (per-pixel distance to the camera) into a full World Position (world space XYZ) using the inverse camera parameters. It lets you use Volume Fog / Volume Mask on renders that only export Z, without a P AOV. An essential bridge for 3D-aware workflows on limited footage.

Overview

World rebuilds, for each pixel, the world 3D position from: (1) the Z depth read from the Z-depth channel, (2) the pixel coordinates in the image (which, combined with the camera FOV, give a ray direction), (3) the position and rotation of the camera. The result: a reconstruction of the full Position channel.

Essential when a render only exports Z-depth (common with Cycles, EEVEE, or game engines) - without the native Position channel, you cannot use Volume Fog or Volume Mask. The World node fills that gap.

Where to find this node

  • Effects Library: Tools > Position > World
  • Quick add: right-click in the Node Editor → Add Tool > Position > World

Z-depth vs Position

Z-depth (Z, depth)
Scalar distance from the pixel to the camera. A single value per pixel. Often exported by default by 3D engines.
World Position (P, world_pos)
XYZ coordinates of the pixel in the 3D scene space. Three values per pixel. Richer, but it needs a dedicated AOV.

Conversion: Z-depth + camera parameters → World Position. The World node does exactly that, by inverting the camera projection.

Inputs

  • Image (orange) - an image containing the Z-depth channel.
  • Camera (green) - optional, but strongly recommended: a connection to a Camera 3D node whose parameters are read for the conversion. Otherwise, set them manually in Controls.
  • Effect Mask (blue) - optional.

Setup

Z-depth → Position for Volume Fog:
EXR (Z only) → World (Camera connected)
            → Volume Fog (Position channel)
            → MediaOut

Game engine workflow (Unreal, Unity export):
Game render → Z buffer
            → World (camera parameters matched)
            → Volume Mask
            → localized Color Corrector
            → MediaOut

Camera 3D + World for automation:
Camera 3D ─┐
           │
EXR Z ──── World ── Volume Fog → MediaOut
   (camera transform read automatically)

Controls tab

Camera Position X / Y / Z (defaults: 0,0,0)
Position of the camera in the 3D scene. It must match the render camera exactly. Read automatically if the Camera input is connected.
Camera Rotation X / Y / Z (defaults: 0,0,0)
Euler rotation of the camera. Critical for precision: even a slight mismatch skews every reconstructed position.
Field of View (default: 50)
The camera's angle of view (in degrees or focal length depending on the convention). It must match the render. 50° ≈ a 35mm focal length on full frame.
Z Channel (default: Z)
The source channel for the Z-depth. Depending on the naming: "Z", "depth", "z_depth" (varies by engine).
Z Mode (default: Distance)
Type of incoming Z-depth. Distance = Euclidean 3D distance, Linear Depth = linear Z component of the camera coordinate (varies by engine convention).

Use cases

  • Renders without a P AOV - game engines, EEVEE, older Cycles: the World node lets you generate the Position from the available Z.
  • Reusing archives - old files exported with Z but no Position: World makes them compatible with Volume Fog/Mask.
  • Saving bandwidth - export Z (1 channel) rather than P (3 channels) → lighter EXR files, and you rebuild P when needed.
  • Match Move + Position reconstruction - Camera Tracker + Z-depth Estimation + World = a reconstructed position for 3D-aware compositing on live action footage.
  • Hybrid 2D/3D pipeline - 2D compositing enhanced with 3D capabilities through Z + World, without all the overhead of a full deep workflow.

Tips

  • A connected Camera 3D node = ideal - it avoids duplicating the parameters by hand. Import the render camera through FBX or match the position/rotation/FOV manually.
  • Check the Z Mode - Distance vs Linear Depth differ by engine: Cycles uses distance by default, EEVEE linear Z, Unreal normalized linear Z. Test it in visualization before using it.
  • An exact FOV is critical - even 1° of error distorts the whole reconstructed position. Get the precise value from the EXIF or the 3D project settings.
  • 32-bit float Z required - in 8/16-bit, the Z is quantized and the reconstruction creates 3D banding that shows up in Volume Fog.
  • Prefer native P when available - if the render exports the Position channel directly, use it rather than rebuilding it through World. More precise (no camera rounding error).
  • Visualize to debug - after World, connect a Position node in Visualization mode to check that the reconstructed coordinates are consistent (a clean gradient on all 3 axes).
  • For live action workflows + AI Z estimation, World can be used on Z generated by MiDaS / DPT for pseudo-volumetric 3D-aware effects without a 3D render.