Re: Technical Introduction update ?
Karl Rasche <[email protected]> Mon, 28 Mar 2016 16:43:39 -0700
| Newsgroups | gmane.comp.video.openexr.devel |
|---|---|
| Message-ID | <CAD5HwvTyh1hfd_iX=fa16xpRO=r8c-JzA9XoGW0JXZLTU7WAcA@mail.gmail.com> |
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 <[email protected]> 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 <[email protected]> wrote: > >> >> So.. what's the issue at hand then? >> >> On Mon, Mar 28, 2016 at 4:17 PM, Deke Kincaid <[email protected]> >> 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 < >>> [email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> >>>>>> 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 < >>>>>>> [email protected]> 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 < >>>>>>>> [email protected]> 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: [email protected] >>>>>>>> Blue Sky Studios http://www.blueskystudios.com >>>>>>>> 1 American Lane, Greenwich, CT 06831-2560 >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Openexr-devel mailing list >>>>>>>> [email protected] >>>>>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Openexr-devel mailing list >>>>>>> [email protected] >>>>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>>>> >>>>>>> >>>>>> >>>>> _______________________________________________ >>>>> Openexr-devel mailing list >>>>> [email protected] >>>>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>>>> >>>>> >>>> >>> >>> _______________________________________________ >>> Openexr-devel mailing list >>> [email protected] >>> https://lists.nongnu.org/mailman/listinfo/openexr-devel >>> >>> >> > > _______________________________________________ > Openexr-devel mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/openexr-devel > > _______________________________________________ Openexr-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/openexr-devel