Ahh got it. I thought exrheader would explicitly say "zip, individual scanlines" next to those parts and not "dwa, small scanline". blocks". Is there a way to introspect the compression for each part that dwaa is doing auto-magically?
Richard: sorry for hijacking your thread 😈 It appears a lot of this is explained in the header for ImfDwaCompressor.cpp. Most of the time the top of the EXR source is just copy-write data and basic comments so I didn't realize there as a whole book chapter in there on the topic. 😀 On Mon, Mar 28, 2016 at 4:43 PM, Karl Rasche <karlras...@gmail.com> wrote: > > Ahh; I see what you are saying. > > The filtering we're talking about happens internally when you set the > compressor = DWAA or DWAB. You won't see the affect in exrheader. > > So in your example there are multiple parts, all set to DWAB. But only > part 3 will be lossy compressed, and of that, only the A channel. > > Parts 0-2 will be lossless. > > Karl > > On Mon, Mar 28, 2016 at 4:35 PM, Deke Kincaid <dekekinc...@gmail.com> > wrote: > >> The channel filtering you and Piotr mentioned as being automatic does not >> occur. Every part whether it has XYZ, UV, Z, etc... is written with dwa >> compression. >> >> On Mon, Mar 28, 2016 at 4:29 PM, Karl Rasche <karlras...@gmail.com> >> wrote: >> >>> >>> So.. what's the issue at hand then? >>> >>> On Mon, Mar 28, 2016 at 4:17 PM, Deke Kincaid <dekekinc...@gmail.com> >>> wrote: >>> >>>> They must be implementing something incorrectly then. Below is a >>>> truncated exrheader on a file out of Nuke with the "interleave" knob set to >>>> "channels" which means each layer is put into a separate part.. >>>> >>>> file testMultiPartChannelsdwaa.exr: >>>> >>>> file format version: 2, flags 0x1000 >>>> >>>> part 0: >>>> channels (type chlist): >>>> x, 16-bit floating-point, sampling 1 1 >>>> y, 16-bit floating-point, sampling 1 1 >>>> z, 16-bit floating-point, sampling 1 1 >>>> chunkCount (type int): 34 >>>> compression (type compression): dwa, small scanline blocks >>>> dataWindow (type box2i): (0 240) - (2047 1315) >>>> displayWindow (type box2i): (0 0) - (2047 1555) >>>> dwaCompressionLevel (type float): 45 >>>> lineOrder (type lineOrder): increasing y >>>> name (type string): "N.left" >>>> nuke/full_layer_names (type int): 0 >>>> nuke/node_hash (type string): "368b9d1b87a4b787" >>>> nuke/version (type string): "9.0v8" >>>> pixelAspectRatio (type float): 1 >>>> screenWindowCenter (type v2f): (0 0) >>>> screenWindowWidth (type float): 1 >>>> type (type string): "scanlineimage" >>>> version (type int): 1 >>>> view (type string): "left" >>>> >>>> part 1: >>>> channels (type chlist): >>>> x, 16-bit floating-point, sampling 1 1 >>>> y, 16-bit floating-point, sampling 1 1 >>>> z, 16-bit floating-point, sampling 1 1 >>>> chunkCount (type int): 34 >>>> compression (type compression): dwa, small scanline blocks >>>> dataWindow (type box2i): (0 240) - (2047 1315) >>>> displayWindow (type box2i): (0 0) - (2047 1555) >>>> dwaCompressionLevel (type float): 45 >>>> lineOrder (type lineOrder): increasing y >>>> name (type string): "P.left" >>>> pixelAspectRatio (type float): 1 >>>> screenWindowCenter (type v2f): (0 0) >>>> screenWindowWidth (type float): 1 >>>> type (type string): "scanlineimage" >>>> version (type int): 1 >>>> view (type string): "left" >>>> >>>> part 2: >>>> channels (type chlist): >>>> Z, 16-bit floating-point, sampling 1 1 >>>> chunkCount (type int): 34 >>>> compression (type compression): dwa, small scanline blocks >>>> dataWindow (type box2i): (0 240) - (2047 1315) >>>> displayWindow (type box2i): (0 0) - (2047 1555) >>>> dwaCompressionLevel (type float): 45 >>>> lineOrder (type lineOrder): increasing y >>>> name (type string): "depth.left" >>>> pixelAspectRatio (type float): 1 >>>> screenWindowCenter (type v2f): (0 0) >>>> screenWindowWidth (type float): 1 >>>> type (type string): "scanlineimage" >>>> version (type int): 1 >>>> view (type string): "left" >>>> >>>> part 3: >>>> channels (type chlist): >>>> u, 16-bit floating-point, sampling 1 1 >>>> v, 16-bit floating-point, sampling 1 1 >>>> chunkCount (type int): 34 >>>> compression (type compression): dwa, small scanline blocks >>>> dataWindow (type box2i): (0 240) - (2047 1315) >>>> displayWindow (type box2i): (0 0) - (2047 1555) >>>> dwaCompressionLevel (type float): 45 >>>> lineOrder (type lineOrder): increasing y >>>> name (type string): "motion.left" >>>> pixelAspectRatio (type float): 1 >>>> screenWindowCenter (type v2f): (0 0) >>>> screenWindowWidth (type float): 1 >>>> type (type string): "scanlineimage" >>>> version (type int): 1 >>>> view (type string): "left" >>>> >>>> part 4: >>>> channels (type chlist): >>>> A, 16-bit floating-point, sampling 1 1 >>>> B, 16-bit floating-point, sampling 1 1 >>>> G, 16-bit floating-point, sampling 1 1 >>>> R, 16-bit floating-point, sampling 1 1 >>>> chunkCount (type int): 34 >>>> compression (type compression): dwa, small scanline blocks >>>> dataWindow (type box2i): (0 240) - (2047 1315) >>>> displayWindow (type box2i): (0 0) - (2047 1555) >>>> dwaCompressionLevel (type float): 45 >>>> lineOrder (type lineOrder): increasing y >>>> name (type string): "rgba.left" >>>> pixelAspectRatio (type float): 1 >>>> screenWindowCenter (type v2f): (0 0) >>>> screenWindowWidth (type float): 1 >>>> type (type string): "scanlineimage" >>>> version (type int): 1 >>>> view (type string): "left" >>>> >>>> >>>> >>>> On Mon, Mar 28, 2016 at 3:16 PM, Piotr Stanczyk < >>>> piotr.stanc...@gmail.com> wrote: >>>> >>>>> +1 .. there is nothing that the client code really has to do. It's >>>>> purely based off the channel names. >>>>> >>>>> -Piotr >>>>> >>>>> >>>>> On 28 March 2016 at 15:05, Karl Rasche <karlras...@gmail.com> wrote: >>>>> >>>>>> Deke - >>>>>> >>>>>> All the channel rule setup should happen automagically; there isn't >>>>>> anything for Nuke to setup. >>>>>> >>>>>> That said, if your channels are all named RGB going into the write >>>>>> node, they'll all be handled the same by the compressor. >>>>>> >>>>>> Karl >>>>>> >>>>>> On Monday, March 28, 2016, Deke Kincaid <dekekinc...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Thanks for the info Karl. Currently Nuke doesn't follow these rules >>>>>>> and when you pick DWAA and just compresses all channels the same >>>>>>> instead of >>>>>>> selectively based on channel names. So we are having to write some >>>>>>> hackery >>>>>>> to work around it at the moment. >>>>>>> >>>>>>> I'll put this into my feature request/bug to the Foundry. >>>>>>> >>>>>>> On Mon, Mar 28, 2016 at 2:15 PM, Karl Rasche <karlras...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> >>>>>>>> This won't help on the documentation front, but for your question >>>>>>>> about how channels are handled... >>>>>>>> >>>>>>>> This is setup in initializeChannelRules() >>>>>>>> <https://github.com/openexr/openexr/blob/master/OpenEXR/IlmImf/ImfDwaCompressor.cpp#L3120>. >>>>>>>> That logic is basically saying: >>>>>>>> >>>>>>>> >>>>>>>> - If the channel name is A, use a lossless RLE compression on it >>>>>>>> - If the channel name is {Y, BY, RY}, and the data is {FLOAT, >>>>>>>> HALF}, lossy compress the channel >>>>>>>> - If the channel name is {R, G, B}, and the data is {FLOAT, >>>>>>>> HALF}, lossy compress the channels. >>>>>>>> - If we have R, G, and B channels, convert to a color >>>>>>>> difference format prior to quantization. Otherwise, deal with the >>>>>>>> channels >>>>>>>> independently as-is. >>>>>>>> - Otherwise, use a lossless compression on the data >>>>>>>> >>>>>>>> So channels named {y, u, U, v, V} should not be lossy compressed. >>>>>>>> >>>>>>>> The rule set that Jonathan is referring to is in >>>>>>>> initializeLegacyChannelRules() >>>>>>>> <https://github.com/openexr/openexr/blob/master/OpenEXR/IlmImf/ImfDwaCompressor.cpp#L3149>, >>>>>>>> and are slightly different from what 2.2 does by default. >>>>>>>> >>>>>>>> Most of this is hold-over from the time before multi-part files >>>>>>>> allowed more control over compression on different channel sets. >>>>>>>> >>>>>>>> Karl >>>>>>>> >>>>>>>> On Mon, Mar 28, 2016 at 1:56 PM, Richard Hadsell < >>>>>>>> hads...@blueskystudios.com> wrote: >>>>>>>> >>>>>>>>> There has been discussion on the [nuke-prerelease] e-mail list >>>>>>>>> about DWAA and DWAB compression with OpenExr 2.2. I checked the >>>>>>>>> OpenExr >>>>>>>>> Technical Introduction, but was disappointed to see that it has not >>>>>>>>> been >>>>>>>>> updated since November 2013. Is there any chance that someone is >>>>>>>>> working >>>>>>>>> on an update? >>>>>>>>> >>>>>>>>> It is not difficult to use DWAA and DWAB compressions, which are >>>>>>>>> available in the compression header. That is not the problem. The >>>>>>>>> questions that I would like to see answered pertain more to lossy vs. >>>>>>>>> lossless compression. The [nuke-prerelease] discussion included >>>>>>>>> interesting information like this: >>>>>>>>> >>>>>>>>> On Thu, Mar 17, 2016 at 1:03 PM, Jonathan Egstad < >>>>>>>>> jonathan.egs...@dreamworks.com> wrote: >>>>>>>>> ... >>>>>>>>> > 3. Does the lossyness cause issues with data aov's, motion >>>>>>>>> vectors, uv, position, normals, etc...? >>>>>>>>> >>>>>>>>> Yup - it will destroy data AOVs like normals, positions, etc. I >>>>>>>>> believe the codec recognizes typical color-channel names like >>>>>>>>> 'r/R/red/RED', etc and only lossy compresses those. Channels it >>>>>>>>> doesn't >>>>>>>>> recognize will get lossless compressed with I believe ZIP - alpha for >>>>>>>>> example is lossless compressed. >>>>>>>>> One gotcha is I think it traps 'Y/y, u/U, v/V' as valid color >>>>>>>>> channels and lossy-compresses those, which is a problem for xyz and uv >>>>>>>>> channels... >>>>>>>>> This is how our internal codec works so you might want to check >>>>>>>>> that the one in the official OpenEXR2.2+ release has these behaviors. >>>>>>>>> ... >>>>>>>>> (end quote) >>>>>>>>> >>>>>>>>> It would be great to see a list of those special channel names. >>>>>>>>> Are they the only channels that are compressed with DWAA/DWAB? What >>>>>>>>> compression would be applied to the other channels? Does this >>>>>>>>> behavior >>>>>>>>> apply to all lossy compressions? >>>>>>>>> >>>>>>>>> I hope to see answers to these questions in an updated Technical >>>>>>>>> Intro (eventually). >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Dick Hadsell 203-992-6320 Fax: 203-992-6001 >>>>>>>>> Reply-to: hads...@blueskystudios.com >>>>>>>>> Blue Sky Studios http://www.blueskystudios.com >>>>>>>>> 1 American Lane, Greenwich, CT 06831-2560 >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Openexr-devel mailing list >>>>>>>>> Openexr-devel@nongnu.org >>>>>>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Openexr-devel mailing list >>>>>>>> Openexr-devel@nongnu.org >>>>>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>>>>> >>>>>>>> >>>>>>> >>>>>> _______________________________________________ >>>>>> Openexr-devel mailing list >>>>>> Openexr-devel@nongnu.org >>>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>>> >>>>>> >>>>> >>>> >>>> _______________________________________________ >>>> Openexr-devel mailing list >>>> Openexr-devel@nongnu.org >>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>> >>>> >>> >> >> _______________________________________________ >> Openexr-devel mailing list >> Openexr-devel@nongnu.org >> https://lists.nongnu.org/mailman/listinfo/openexr-devel >> >> >
_______________________________________________ Openexr-devel mailing list Openexr-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/openexr-devel