6
$\begingroup$

I always render my animations in OpenEXR MultiLayer format with various render passes turned on. Is there a way with Blender's integrated paint editor to paint to the render passes of such an .exr file? It seems I can only paint to the "combined" pass, which I am not using at all though. If I try to paint to any other render pass of the .exr file I get the error message "Image requires 4 color channels to paint".

enter image description here

Purpose: Often I just have to correct few pixels in a particular pass of a rendered .exr file. I could also add a complex node network to the compositor just to correct those few pixels, but in such cases editing/painting the pixels of the respective render pass inside the affected .exr file would be much faster.

I saw there is now also a plugin for Gimp, which allows to import OpenEXR files. Has somebody tried it with multi-pass .exr files? Does the Gimp plugin work reliably without screwing something? Because I still need it to be in multi-layer .exr format after editing for the subsequent compositor stage.

$\endgroup$
  • $\begingroup$ If you mean this plugin it seems like it does not provide the option to export multi layer .exr files. It can only import them to Gimp layers. Also the colors will be converted to 8 Bit format, so it is not feasible for HDR images. $\endgroup$ – maddin45 Dec 5 '14 at 16:30
  • $\begingroup$ Yes, that's the Gimp plugin I meant. But if it does not export back to .exr then it's no option at all. Regarding Blender paint: it looks like a bug to me. Probably because Blender is checking the max. amount of channels of all layers in the .exr file. The combined pass takes 4 channels (RGBA), whereas most other render pass layers use less channels. $\endgroup$ – Blub Dec 5 '14 at 17:05
4
$\begingroup$

I just grabbed Blender 2.72b source files to check this issue.

In short: with current Blender (2.72b and older) it is only possible to draw to the "combined" and "vector" passes of a multilayer OpenEXR file with Blender's paint tool.

Reason: Blender's low level paint tool C algorithms (filling, painting a stroke, etc.) are all solely working on 4 channel interleaved float buffers internally. The "combined" and "vector" passes are always stored as 4 channel layers to .exr files by Blender, so those are fine, but most other render passes are stored as 3 channel layers or even 1 channel layers to .exr files and when Blender opens those other layers from .exr files it allocates 3 channel (or 1 channel respectively) interleaved float buffers internally for them.

It also does not make any difference BTW whether you select "RGB" or "RGBA" in the render settings, you will get the same .exr file and end up with the same problem.


UPDATE: I wrote a patch against Blender 2.72b which solved this problem for me. Feel free to test it, forward it to Blender developers or whatever you think might be appropriate. Please note that this patch is neither optimized, nor thoroughly tested, so make sure you have a backup of your .exr file(s) before painting to them.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.