Your passes didn’t disappear. You picked the wrong EXR.
Blender’s Output Properties dropdown has two entries with OpenEXR in the name, plus a compositor node that can save EXRs in two more ways. Four routes, three of which look almost identical from the file extension alone. Pick the wrong one and your Cryptomatte, your Z-depth, your light groups, all the ingredients you carefully enabled, never make it into the saved file. The renderer computed them. The format you chose just had nowhere to put them.
This lesson is about that choice. If you’re still fuzzy on what an EXR is and why PNG can’t hold the same data, start with What the hell is an EXR file in Blender? first. This one assumes you already buy the EXR pitch and want to know which flavor packages your passes.
A Multi-Layer EXR is one file holding many named sub-images
Here’s the structural picture nobody draws for you.
A single-image EXR holds one image. RGB, alpha, scene-linear values that go above 1.0, the works. One header, one slab of pixel data.
A Multi-Layer EXR holds many named sub-images inside the same file. Each render layer and each pass becomes a named slice, all sharing one frame’s metadata. Think of it as a zip of EXRs glued together under a single header. When the compositor opens it, it doesn’t see “an EXR.” It sees a list: Combined, DiffDir, DiffInd, GlossDir, CryptoObject00, Z, Vector, Mist, every channel addressable by name.
The file extension is still .exr. The library reading it is still OpenEXR. But structurally, multi-layer is a container that exposes a directory of named images, not just a fancier single image.
That’s the part people miss when they say “I picked EXR but my passes are gone.” They picked the format that holds one image. Of course only one image showed up.
There’s a workflow reason this format exists. Compositors need every pass for a single frame to arrive together and addressable by name. Otherwise you’re matching Glossy_0042.exr to Combined_0042.exr to whatever else by hand for every frame, and the moment one file is out of sync the whole shot drifts. Multi-Layer EXR’s job is to keep that bundle synchronized in one file: same frame, named slices, no plate-juggling on the comp side.
One image vs many
OpenEXR = one HDR image per frame. OpenEXR MultiLayer = a container that bundles every enabled render pass into one file per frame. Same extension, very different file structure inside.
The four EXR-flavored output routes
You enable render passes in View Layer Properties (the icon below Output Properties in the Properties panel) → Passes. Tick the boxes you want. Whether those passes survive the save depends on which of the four routes below you pick.
The four split along one conceptual axis: who writes the file? Two of them live in Output Properties and write the raw render pass stack, whatever you ticked in Passes is what lands in the file. The other two live in the compositor’s File Output node and write whatever the comp tree is feeding into it. That second distinction matters when your comp graph is doing real work (denoising, masking, splitting light groups) and you want the saved file to reflect the post-comp result, not the raw render.
| Route | Where you set it | One file or many? | Passes preserved? | Pick when |
|---|---|---|---|---|
OpenEXR | Output Properties → Output → File Format → OpenEXR | One per frame | No (just the Combined image) | You want HDR but don’t need the pass stack |
OpenEXR MultiLayer | Output Properties → Output → File Format → OpenEXR MultiLayer | One per frame | Yes (every enabled View Layer + pass) | The default I reach for when comp is downstream |
File Output node, Image mode | Compositor → Add → Output → File Output, default mode | Many (one per input socket) | Per-plate, you decide | Pipeline wants explicit named plates |
File Output node, Multi-Layer EXR mode | Same node, Format → File Format → OpenEXR MultiLayer | One per frame | Yes (whatever sockets you wire in) | The compositor decides what gets packaged |
Two File Output footguns to know up front
The File Output node only fires if Use Nodes is enabled on the compositor. Switch to the Compositing workspace and tick Use Nodes at the top of the editor, otherwise your render sails right past the node and the file you expected never appears.
In Image mode, slashes in input socket names build folders. A socket named passes/diffuse writes to a passes/ subfolder; masks/object_01 writes to masks/. No slash means everything dumps in one folder. That’s how you end up with either a tidy plate tree or a giant flat pile, depending on how you named the sockets.
Knowledge check
You enabled Cryptomatte Object, Mist, and Z passes in View Layer Properties → Passes. Then you set Output Properties → File Format to OpenEXR (not MultiLayer) and rendered. What landed in the saved file?
+
You enabled Cryptomatte Object, Mist, and Z passes in View Layer Properties → Passes. Then you set Output Properties → File Format to OpenEXR (not MultiLayer) and rendered. What landed in the saved file?
+Just one image: the Combined beauty. Cryptomatte, Mist, and Z are render passes, and they were computed correctly. But OpenEXR is the single-image route, so only the Combined channel got written. Switching to OpenEXR MultiLayer is the fix. Nothing about the passes themselves was wrong.
Why your passes “disappeared”
Three real causes show up in community posts. They all look the same from the outside (passes computed, file saved, passes gone) but the fixes are different:
- Wrong format in
Output Properties. PickedOpenEXRinstead ofOpenEXR MultiLayer. The renderer computed your passes; the format you chose only stores one image. Fix: change the dropdown toOpenEXR MultiLayerand re-render. File Outputnode inImagemode when you wanted packaged. The node did exactly whatImagemode means: one file per input socket. If you wired five passes in, you got five separate files, not one bundle. Fix: switch the node’sFormat → File FormattoOpenEXR MultiLayer.- Path collision between
Output Propertiesand theFile Outputnode. Both wrote to the same place with overlapping filenames. One overwrote the other, and it looks like Blender lost the passes. Fix: give theFile Outputnode a distinct subfolder, or disable theOutput Propertieswrite if the node tree is now the source of truth.
The third one is the sneaky one. Multi-Layer EXR is a format choice, but it’s also a path-and-ownership choice. Two systems writing to the same path is the actual bug, not the format. Knowledge check Output Properties is set to write shot_0001.exr to /renders/. You also added a File Output node, set its Format to OpenEXR MultiLayer, and pointed it at /renders/shot_0001.exr. You hit render. What ends up on disk? One file at /renders/shot_0001.exr. Blender doesn’t merge the two outputs; one writer overwrites the other, and you can’t reliably get the file you actually wanted. Fix: give each writer a distinct filename or subfolder, or disable the Output Properties write if the node tree is now the source of truth.
Reach for Multi-Layer EXR when
- You want one file per frame instead of a folder full of plates.
- The shot will be composited later, in Blender or elsewhere.
- You want masks, data passes, and beauty contributions to travel together.
- The receiving compositor (Blender’s, Nuke, Fusion, Resolve, anything that reads multi-layer EXR) will pull what it needs by name.
This is the format that makes the next lesson cluster easier. Combining render passes, isolating objects with Cryptomatte, pulling Z-depth for fog, all of it assumes the passes survived to disk. Multi-Layer EXR is how that happens.
When separate plates beat Multi-Layer EXR
Multi-Layer is elegant. It’s not always the right choice.
Separate files (the File Output node in Image mode) work better when:
- The receiving app or plugin is picky about Multi-Layer EXR support. Some tools choke on layered EXRs or only read the first layer.
- A teammate wants explicit beauty / mask / data files they can drop into a track without parsing layers.
- Different outputs need different formats or compression. Z-depth might want full float; beauty is fine in half float; masks could be 8-bit PNG.
The main downside is weight
Multi-Layer EXR isn’t a quality compromise. It’s a size compromise.
One frame can carry beauty, light passes, masks, depth, vectors, Cryptomatte, denoising data, and whatever else you ticked. That’s a lot of pixels per frame, and bit depth multiplies it: full float doubles the storage of half float for the same passes.
If frames are getting unreasonable, the first question is whether you actually need Float (Full) precision on the packaged file. For most beauty comp work, Float (Half) is plenty. Reach for full float when a specific pass needs the precision (depth, motion vectors, position data), then consider whether that pass should live in its own file at full float while the rest stays packaged at half.
Try this in Blender
6 minRender one frame with Diffuse Direct, Glossy Indirect, and Cryptomatte Object enabled in View Layer Properties → Passes.
Predict what shows up in the saved file if you pick OpenEXR versus OpenEXR MultiLayer in Output Properties → File Format. Save both. Verify by reopening each in any tool that reads multi-layer EXR (Blender’s compositor Image node, Nuke, DJV, OIIO’s iinfo). One file holds one image. The other holds a list of named layers.
Now reproduce the sneaky failure. Add a File Output node in the compositor, set its Format to OpenEXR MultiLayer, and point it at the same path Output Properties is using. Render. Check the file. One writer wins, the other gets ignored, and from the outside it looks like Blender lost half the work. Fix it by moving the File Output node to a distinct subfolder.
One more file vs. interpretation gotcha
When you load a saved .exr back into Blender’s Image Editor, it may look more saturated or washed out than the Render Result you remember. The file is fine. Blender just isn’t applying the render View Transform to it by default. To match: in the Image Editor, press N, open the Image panel, tick View as Render. The display snaps to whatever Color Management → View Transform is set to (AgX, Filmic, etc.). The bytes on disk haven’t changed. Blender’s interpretation of them just did.
Bottom line
Two things to take from this:
- Multi-Layer EXR isn’t “better quality EXR.” It’s a container format that bundles named sub-images in one file. The pass stack survives because the format has somewhere to put it.
- When passes seem to vanish, check the format dropdown first, the
File Outputnode mode second, the file paths third. The renderer almost certainly did its job.
Once your passes are landing in the file correctly, the next move is doing something with them. That’s How do I combine render passes in Blender?. For the basic EXR setup (codec, depth, the one-time settings you’ll keep) see How do I set up EXR output in Blender?. And the prerequisite on what passes even are lives at What are render passes in Blender?.