Crypto AOV forces 32-bit full precision output, blurred cryptomatte

Crypto AOV forces 32-bit full precision output, blurred cryptomatte

vincenzoACPST
Contributor Contributor
227 Views
4 Replies
Message 1 of 5

Crypto AOV forces 32-bit full precision output, blurred cryptomatte

vincenzoACPST
Contributor
Contributor

Hi there,

It's been a while since Arnold changed his behavior.

 

Simple scene, CPU render, crypto enabled, Windows 11:

 

Until version 5.4.5 you can render 16-bit half-precision exr when crypto_* AOV is enabled, lower filesize, no problem.
Since version 5.4.6 driver is forced to render at 32-bit full precision when crypto_* is enabled, big filesize and a strange blurred crypto_* AOV output.

 

Tried version 5.5.1, same problem, and this is the message inside Maya:

 

// Warning: WARNING | Cryptomatte 'crypto_object' cannot be set for driver 'defaultArnoldDriver/driver_exr.RGBA' which is using half precision. Switching to full precision


Is this the "new" behavior since 5.4.6, when "Optimized Cryptomatte and GPU support" enhancement was introduced?
I think the blurry crypto AOV is a bug.

Half-precision exr rendered correct if crypto_* AOV is disabled.


Does anyone have this behavior?

 

To sum up:

Arnold_545_VS_551.png

Differences:

Arnold_5.4.5_VS_5.5.1.jpg

0 Likes
Accepted solutions (1)
228 Views
4 Replies
Replies (4)
Message 2 of 5

Stephen.Blair
Community Manager
Community Manager

Hi

 

They both look blurry to me.

 

Even with the old cryptomatte, the cryptomatte AOVs are all float.
Only the deprecated, unused preview AOV was left half.

Here's the oiiotool -v --info channel list for a render with Arnold 7.3.4 (MtoA 5.4.4)

The channels with 00, 01, and 02 are where the cryptomatte data lives.


channel list: 
    
R (half), G (half), B (half), A (half), 
crypto_asset.R (half), crypto_asset.G (half), crypto_asset.B (half)
crypto_asset00.R (float), crypto_asset00.G (float), crypto_asset00.B (float), crypto_asset00.A (float)
crypto_asset01.R (float), crypto_asset01.G (float), crypto_asset01.B (float), crypto_asset01.A (float)
crypto_asset02.R (float), crypto_asset02.G (float), crypto_asset02.B (float), crypto_asset02.A (float)
crypto_material.R (half), crypto_material.G (half), crypto_material.B (half)
crypto_material00.R (float), crypto_material00.G (float), crypto_material00.B (float), crypto_material00.A (float)
crypto_material01.R (float), crypto_material01.G (float), crypto_material01.B (float), crypto_material01.A (float)
crypto_material02.R (float), crypto_material02.G (float), crypto_material02.B (float), crypto_material02.A (float)
crypto_object.R (half), crypto_object.G (half), crypto_object.B (half)
crypto_object00.R (float), crypto_object00.G (float), crypto_object00.B (float), crypto_object00.A (float)
crypto_object01.R (float), crypto_object01.G (float), crypto_object01.B (float), crypto_object01.A (float)
crypto_object02.R (float), crypto_object02.G (float), crypto_object02.B (float), crypto_object02.A (float)

 

Just for my own future reference, here's where the old cryptomatte code did the check for half precision:
https://github.com/Psyop/CryptomatteArnold/blob/master/cryptomatte/cryptomatte.h#L1079



// Stephen Blair
// Arnold Renderer Support
0 Likes
Message 3 of 5

vincenzoACPST
Contributor
Contributor

Thanks for your reply.

 

The problem is in non-cryptomatte outputs, they are all rendered in full float, resulting in size gain, even if in Maya half-precision is checked.
I've added some other AOV. Here's the oiiotool -v --info channel list for both images:


Mtoa 5.4.5. Mixed precision, only crypto are full.


600 x 600, 58 channel, half/half/half/half/half/half/half/half/half/half/float/float/float/float/float/float/float/float/float/float/float/float/half/half/half/float/float/float/float/float/float/float/float/float/float/float/float/half/half/half/float/float/float/float/float/float/float/float/float/float/float/float/half/half/half/half/half/half openexr

 

channel list:


R (half), G (half), B (half), A (half),
coat.R (half), coat.G (half), coat.B (half),
crypto_asset.R (half), crypto_asset.G (half), crypto_asset.B (half),
crypto_asset00.R (float), crypto_asset00.G (float), crypto_asset00.B (float), crypto_asset00.A (float),
crypto_asset01.R (float), crypto_asset01.G (float), crypto_asset01.B (float), crypto_asset01.A (float),
crypto_asset02.R (float), crypto_asset02.G (float), crypto_asset02.B (float), crypto_asset02.A (float),
crypto_material.R (half), crypto_material.G (half), crypto_material.B (half),
crypto_material00.R (float),crypto_material00.G (float), crypto_material00.B (float), crypto_material00.A (float),
crypto_material01.R (float), crypto_material01.G (float), crypto_material01.B (float), crypto_material01.A (float),
crypto_material02.R (float), crypto_material02.G (float), crypto_material02.B (float), crypto_material02.A (float),
crypto_object.R (half), crypto_object.G (half), crypto_object.B (half),
crypto_object00.R (float), crypto_object00.G (float), crypto_object00.B (float), crypto_object00.A (float),
crypto_object01.R (float), crypto_object01.G (float), crypto_object01.B (float), crypto_object01.A (float),
crypto_object02.R (float), crypto_object02.G (float), crypto_object02.B (float), crypto_object02.A (float),
diffuse.R (half), diffuse.G (half), diffuse.B (half),
specular.R (half), specular.G (half), specular.B (half)


Mtoa 5.5.1. All channels forced in full precision.


600 x 600, 58 channel, float openexr

 

channel list:


R, G, B, A,
coat.R, coat.G, coat.B,
crypto_asset.R, crypto_asset.G, crypto_asset.B,
crypto_asset00.R, crypto_asset00.G, crypto_asset00.B, crypto_asset00.A,
crypto_asset01.R, crypto_asset01.G, crypto_asset01.B, crypto_asset01.A,
crypto_asset02.R, crypto_asset02.G, crypto_asset02.B, crypto_asset02.A,
crypto_material.R, crypto_material.G, crypto_material.B,
crypto_material00.R, crypto_material00.G, crypto_material00.B, crypto_material00.A,
crypto_material01.R, crypto_material01.G, crypto_material01.B, crypto_material01.A,
crypto_material02.R, crypto_material02.G, crypto_material02.B, crypto_material02.A,
crypto_object.R, crypto_object.G, crypto_object.B,
crypto_object00.R, crypto_object00.G, crypto_object00.B, crypto_object00.A,
crypto_object01.R, crypto_object01.G, crypto_object01.B, crypto_object01.A,
crypto_object02.R, crypto_object02.G, crypto_object02.B, crypto_object02.A,
diffuse.R, diffuse.G, diffuse.B,
specular.R, specular.G, specular.B

 

Please, take a closer look at the image I sent, it's a screenshot from Nuke and the 2 images are zoomed in, but the second seams the first with a blur size of 2.
Anyway I have uploaded both images and scene. Look at the different size 10.073 Kb vs 2.378 Kb and check the cryptomatte output.


Thanks.

0 Likes
Message 4 of 5

Stephen.Blair
Community Manager
Community Manager
Accepted solution

Ok, I logged a ticket for "Cryptomatte changes all AOVs to float" issue



// Stephen Blair
// Arnold Renderer Support
0 Likes
Message 5 of 5

vincenzoACPST
Contributor
Contributor

Great, thank you so much!

0 Likes