Gaffer 1.6 - merge exr issue

97 views
Skip to first unread message

s.des...@gmail.com

unread,
Sep 2, 2025, 8:42:24 AMSep 2
to gaffer-dev

Hello,

I'm testing the new features of Gaffer 1.6, especially the Merge EXR feature.
I’ve created a simple setup where I define some default outputs that all share the same file path. This setup works fine, and I can see all the layers in my EXR.

However, when I try to customize my outputs by changing the filter or preserve layer name parameters, I get the following errors:

ERROR   [Render] Render.task : Mismatch in combined output driver for file name ".../renders/gaffer_simple_setup_v001/layer01/multiExr.0001.exr" : value of parameter "filter"
ERROR   [Render] gaffer execute : executing Render : See previous message for details
ERROR   [Render] Execution failed for frame 1

It seems that all the outputs must share exactly the same parameters to avoid errors.

This is problematic because I want to include denoised AOVs in my EXR using a variance filter.

Am I missing someting or is it a limitation ?

Thx,


Seb


John Haddon

unread,
Sep 2, 2025, 9:23:24 AMSep 2
to gaffe...@googlegroups.com
Hi Seb,

When multiple outputs are all targeting the same driver (filename), we do some checks to verify that the outputs don't have conflicting parameters. Some output parameters are actually driver settings, so if two outputs have different opinions about those, they can't both get what they want. The `preserve_layer_name` parameter is an example of this - if you run `gaffer env kick -info driver_exr` you'll see that it is a parameter of the driver itself, so all outputs need the same value.

For the `filter` parameter this check doesn't seem appropriate though, because it's not a driver parameter and can be varied from output to output. So that part at least looks like a Gaffer bug to me.

Daniel might know more, as he was the one who implemented the feature. He's out this week, but perhaps you could open a GitHub issue for us to track, and he can take a look when he's back?

Cheers...
John


--
You received this message because you are subscribed to the Google Groups "gaffer-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gaffer-dev+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/gaffer-dev/deb47a0e-b5e7-4682-81dc-afd987038509n%40googlegroups.com.
Message has been deleted

s.des...@gmail.com

unread,
Sep 2, 2025, 11:50:14 AMSep 2
to gaffer-dev
Hello John,

Thx for the reply. I open an issue on GitHub.

Seb

s.des...@gmail.com

unread,
Sep 25, 2025, 12:05:57 PMSep 25
to gaffer-dev

Hello John,

I’ve tested the new Gaffer 1.6.1.0 and the EXR merge seems to work fine. I can merge multiple AOVs and denoise them with the Arnold Noice command line.

There’s only one thing I can’t get to work as expected. If I enable layerPerLightGroup in my beauty AOV to generate the light groups, the RGBA channel doesn’t appear in the EXR file.
When I check the file in Nuke, I can see the light group channels, but the rgb and rgba channels are empty.

I found a workaround by creating a custom output with Arnold light path expressions, which makes the rgb and rgba channels visible. However, this breaks the EXR channel metadata and the denoiser no longer works.

Do you have any idea how I can fix this, or is it a bug?

Thanks,

Seb

John Haddon

unread,
Sep 26, 2025, 4:54:36 AMSep 26
to gaffe...@googlegroups.com
Hi Seb,

Unless I've missed something, you can get what you want by adding a second `rgba` output with `layerPerLightGroup` turned off, as in the screenshot below :

image.png

Does that work for you?
Cheers...
John

s.des...@gmail.com

unread,
Sep 29, 2025, 4:48:52 AMSep 29
to gaffer-dev
Hello John,

It was simple as that... I had indeed created a layerPerLightGroup attribute for the lightgroup output, but I hadn’t created it on the beauty, thinking it wasn’t necessary.
Now it works perfectly !


Just one last question:

I guess the outputs are written and merged into a single-part EXR by default, otherwise Arnold Noice wouldn’t work.
But is there an option in Gaffer to merge the outputs into a multi-part EXR? In Maya, there is an option to render the EXR as multi-part.

If I use the Arnold denoiser, I have to write another EXR file, and then I can choose multi-part EXR. But if I don’t need the Arnold denoiser, it would be nice to render directly to multi-part EXR to avoid the extra post-process step.

Thx,

Seb

John Haddon

unread,
Sep 29, 2025, 6:31:55 AMSep 29
to gaffe...@googlegroups.com
On Mon, Sep 29, 2025 at 9:48 AM s.des...@gmail.com <s.des...@gmail.com> wrote:
It was simple as that... I had indeed created a layerPerLightGroup attribute for the lightgroup output, but I hadn’t created it on the beauty, thinking it wasn’t necessary.
Now it works perfectly !

I'm not sure the `layerPerLightGroup` is actually necessary on the beauty - I think the important thing is that `data` is `rgba` , whereas before you had mentioned you'd used an LPE of some sort instead. In any case, I'm glad it's working!

But is there an option in Gaffer to merge the outputs into a multi-part EXR? In Maya, there is an option to render the EXR as multi-part.

Arnold's `driver_exr` has a boolean `multipart` parameter (that defaults off). So if you add a `multipart` parameter to all your outputs and turn it on, then I would expect Arnold to write multipart. I haven't tested though - let us know how you get on...

Cheers...
John

s.des...@gmail.com

unread,
Sep 30, 2025, 5:18:26 AMSep 30
to gaffer-dev
Hello John,

Thx, I’ll give multi-part a try to see if it works.

I’m also trying to see if I can get the Arnold Noice denoiser to work. It works fine as long as I don’t use the temporal flags, but when I do, I get this warnings in the logs:

- Frame numbering from metadata is not consistent, using default indices.

I checked, and it seems Noice uses the  "EXR/arnold/frame" metadata for temporal denoising. When I inspect my EXR metadata, the "EXR/arnold/frame" value stays at 0 across all frames.

Is there a way to fix this? I checked in Maya, and the "EXR/arnold/frame" metadata is dynamic there, I can see the correct frame number.

Thx,

Seb

John Haddon

unread,
Sep 30, 2025, 8:15:01 AMSep 30
to gaffe...@googlegroups.com

Is there a way to fix this? I checked in Maya, and the "EXR/arnold/frame" metadata is dynamic there, I can see the correct frame number.

Sounds like this is something we should fix in Gaffer, but I think you can work around it for now. If you use a CustomOptions node to create an `ai:frame` float option, and use an expression to set it to the right value, that seems to carry through to the EXR metadata.
Cheers...
John

s.des...@gmail.com

unread,
Oct 1, 2025, 8:35:43 AMOct 1
to gaffer-dev
Hello John,

Thx for the metadata workaround !

I 've also tested the multipart parameter, and it seems to work.
I just have one remark about it: since the multipart parameter must be the same for all outputs in case of merge exr, wouldn’t it be a better idea if the multipart option lived in the Arnold render options instead of in each output?

Thx,

Seb

John Haddon

unread,
Oct 1, 2025, 11:55:48 AMOct 1
to gaffe...@googlegroups.com
Thx for the metadata workaround !

No worries - I've made the proper fix now too : see https://github.com/GafferHQ/gaffer/pull/6619

I just have one remark about it: since the multipart parameter must be the same for all outputs in case of merge exr, wouldn’t it be a better idea if the multipart option lived in the Arnold render options instead of in each output?

I can see how that would be convenient for the most common use cases, but it would stop someone from making a combination of multi-part and single-part outputs. It's our general policy to expose each renderer's options in as direct/literal a way as possible, and since the `multipart` parameter is on `driver_exr` in Arnold rather than the `options` node, it maps most naturally to output parameters in Gaffer.
Reply all
Reply to author
Forward
0 new messages