Page MenuHome

OpenEXR and OpenEXR-Multilayer data inconsistencies.
Closed, ArchivedPublic

Description

System Information
Ubuntu 14.04.2 LTS 64-bit
AMD A8-5550M APU with Radeon(tm) HD Graphics × 4
AMD Radeon HD 8550G

Blender Version
Broken: 'Blender V2.55.1 and newer' as the OpenEXR file states; yet it can be any version.

Short description of error
Case scenario: Rendering an image of X and Y size (here being 1920 x 1080 in example image).

Rendering a scene (with or without all passes enabled) yields expected results for the "dataWindow" and "displayWindow" variables.
Both are set to -> (0, 0) - (1919, 1079).

'dataWindow': (0, 0) - (1919, 1079),
'displayWindow': (0, 0) - (1919, 1079),

Rendering a scene with [ bpy.context.scene.render.use_border = True ] and setting the render border should yield two different results. The Variable "displayWindow" should stay exactly the same as it represents the render size of 1920 x 1080 and "dataWindow" should represent the render border region.

'dataWindow': (0, 0) - (959, 539),
'displayWindow': (0, 0) - (1919, 1079),
}

Data dump.

{
	'BlenderMultiChannel': 'Blender V2.55.1 and newer',
	'compression': NO_COMPRESSION,

	'dataWindow': (0, 0) - (1919, 1079),
	'displayWindow': (0, 0) - (1919, 1079),

	'channels': {
		'RenderLayer.Combined.R':      FLOAT (1, 1),
		'RenderLayer.Combined.G':      FLOAT (1, 1),
		'RenderLayer.Combined.B':      FLOAT (1, 1),
		'RenderLayer.Combined.A':      FLOAT (1, 1),

		'RenderLayer.Depth.Z':         FLOAT (1, 1),

		'RenderLayer.Shadow.R':        FLOAT (1, 1),
		'RenderLayer.Shadow.G':        FLOAT (1, 1),
		'RenderLayer.Shadow.B':        FLOAT (1, 1),

		'RenderLayer.AO.R':            FLOAT (1, 1),
		'RenderLayer.AO.G':            FLOAT (1, 1),
		'RenderLayer.AO.B':            FLOAT (1, 1),

		'RenderLayer.Normal.X':        FLOAT (1, 1),
		'RenderLayer.Normal.Y':        FLOAT (1, 1),
		'RenderLayer.Normal.Z':        FLOAT (1, 1),

		'RenderLayer.Vector.W':        FLOAT (1, 1),
		'RenderLayer.Vector.Y':        FLOAT (1, 1),
		'RenderLayer.Vector.X':        FLOAT (1, 1),
		'RenderLayer.Vector.Z':        FLOAT (1, 1),

		'RenderLayer.IndexOB.X':       FLOAT (1, 1),

		'RenderLayer.UV.U':            FLOAT (1, 1),
		'RenderLayer.UV.V':            FLOAT (1, 1),
		'RenderLayer.UV.A':            FLOAT (1, 1),

		'RenderLayer.Mist.Z':          FLOAT (1, 1),

		'RenderLayer.Emit.R':          FLOAT (1, 1),
		'RenderLayer.Emit.G':          FLOAT (1, 1),
		'RenderLayer.Emit.B':          FLOAT (1, 1),

		'RenderLayer.Env.R':           FLOAT (1, 1),
		'RenderLayer.Env.G':           FLOAT (1, 1),
		'RenderLayer.Env.B':           FLOAT (1, 1),

		'RenderLayer.IndexMA.X':       FLOAT (1, 1),

		'RenderLayer.DiffDir.R':       FLOAT (1, 1),
		'RenderLayer.DiffDir.G':       FLOAT (1, 1),
		'RenderLayer.DiffDir.B':       FLOAT (1, 1),

		'RenderLayer.DiffInd.R':       FLOAT (1, 1),
		'RenderLayer.DiffInd.G':       FLOAT (1, 1),
		'RenderLayer.DiffInd.B':       FLOAT (1, 1),

		'RenderLayer.DiffCol.R':       FLOAT (1, 1),
		'RenderLayer.DiffCol.G':       FLOAT (1, 1),
		'RenderLayer.DiffCol.B':       FLOAT (1, 1),

		'RenderLayer.GlossDir.R':      FLOAT (1, 1),
		'RenderLayer.GlossDir.G':      FLOAT (1, 1),
		'RenderLayer.GlossDir.B':      FLOAT (1, 1),

		'RenderLayer.GlossInd.R':      FLOAT (1, 1),
		'RenderLayer.GlossInd.G':      FLOAT (1, 1),
		'RenderLayer.GlossInd.B':      FLOAT (1, 1),

		'RenderLayer.GlossCol.R':      FLOAT (1, 1),
		'RenderLayer.GlossCol.B':      FLOAT (1, 1),
		'RenderLayer.GlossCol.G':      FLOAT (1, 1),

		'RenderLayer.TransDir.R':      FLOAT (1, 1),
		'RenderLayer.TransDir.G':      FLOAT (1, 1),
		'RenderLayer.TransDir.B':      FLOAT (1, 1),

		'RenderLayer.TransInd.R':      FLOAT (1, 1),
		'RenderLayer.TransInd.G':      FLOAT (1, 1),
		'RenderLayer.TransInd.B':      FLOAT (1, 1),

		'RenderLayer.TransCol.R':      FLOAT (1, 1),
		'RenderLayer.TransCol.G':      FLOAT (1, 1),
		'RenderLayer.TransCol.B':      FLOAT (1, 1),

		'RenderLayer.SubsurfaceDir.R': FLOAT (1, 1),
		'RenderLayer.SubsurfaceDir.G': FLOAT (1, 1),
		'RenderLayer.SubsurfaceDir.B': FLOAT (1, 1),

		'RenderLayer.SubsurfaceInd.R': FLOAT (1, 1),
		'RenderLayer.SubsurfaceInd.G': FLOAT (1, 1),
		'RenderLayer.SubsurfaceInd.B': FLOAT (1, 1),

		'RenderLayer.SubsurfaceCol.R': FLOAT (1, 1),
		'RenderLayer.SubsurfaceCol.G': FLOAT (1, 1),
		'RenderLayer.SubsurfaceCol.B': FLOAT (1, 1),

		'Composite.Combined.R':        FLOAT (1, 1),
		'Composite.Combined.G':        FLOAT (1, 1),
		'Composite.Combined.B':        FLOAT (1, 1),
		'Composite.Combined.A':        FLOAT (1, 1)
	},

	'lineOrder': INCREASING_Y,
	'pixelAspectRatio': 1.0,
	'screenWindowCenter': (0.0, 0.0),
	'screenWindowWidth': 1.0
}

Exact steps for others to reproduce the error
1 - Setup a render border inside camera,
2 - Select OpenEXR or OpenEXR-Multilayer image formats,
3 - Render,
4 - Save render as a file.

Optional steps:
5 - Install python2 or 3 OpenEXR bindings,
6 - Dump the file header using code below:

import OpenEXR as exr

file = exr.InputFile("filename")
print(file.header())

Suplied .blend:

Event Timeline

Oren Titane (Genome36) raised the priority of this task from to 90.
Oren Titane (Genome36) updated the task description. (Show Details)
Oren Titane (Genome36) edited a custom field.

It appears that Imf::Header.dataWindow() is not set at all (at least not with the render border size). But I'm not sure how to get that info into the OpenEXR API.

Sergey Sharybin (sergey) changed the task status from Unknown Status to Unknown Status.Aug 6 2015, 12:41 PM
Sergey Sharybin (sergey) claimed this task.

ImBuf in Blender is not aware of the border rendering and can't set data window. Surely it's possible to support such a feature but it's not considered a bug. Thanks for the report anyway.