Cryptomatte question

In the cryptomatte pass options there’s levels amount. The manual states:

Levels

Sets how many unique objects can be distinguished per pixel.

I’m guessing this means that if an objects is obscured by a frosted glass for example, or maybe a volume, that the object/material can still be selected and edited in comp, because the glass would be one object in that pixel, and the object would be another (both represented by one pixel).

How do you access this? I only seem able to select one object per pixel in comp.

A pretty thorough answer to this question has been given by Robert Gützkow here https://blender.stackexchange.com/questions/157043/cryptomatte-what-crypto00-crypto01-crypto02-means/157159#157159

Thanks for the link, but unless I missed it, it doesn’t seem to explain how you can select anything other than the foremost object. In the image below I have a suzanne behind a windscreen, with the side window missing. I can select suzanne through the open window using the cryptomatte’s pick output plugged into a viewer, but the mask only shows the part of suzanne that isn’t occluded by the windscreen. If the data is there in the cryptomatte in several layers, how can I get the mask to include the part of suzanne that’s occluded by the glass, and how can I pick an occluded object?

Here’s the mask:

This might be a limitation of the implementation at the moment. Just came across a forum post in the VRay forum where a user asks about the same limitation https://forums.chaosgroup.com/forum/v-ray-for-3ds-max-forums/v-ray-for-3ds-max-general/1037183-cryptomatte-for-objects-behind-other-refractive-objects

Further down another user comments that Arnold seems to be the only engine at the moment supporting this. Things like depth of field and motion blur work with Blender’s implementation, refraction apparently not.

ok cool thanks, yeah I think your right, arnold does it and fstorm too I believe, although in fstorm I think Andrey wrote his own version of a cryptomatte to accomodate reflection and refraction.

@brecht, do you know if there are any plans to be able to select/manipulate beyond the foremost object stored in each cryptomatte’s pixel? Or perhaps this is somehow already possible and i’m just being a dullard? :slight_smile:

There’s no concrete plan for this. It’s not clear to me that Arnold (or other renderers) even support it, at least not from reading that forum thread. The original Cryptomatte Arnold plug-in did not support it in any case, but maybe the native implementation does now.

Cryptomatte wasn’t really designed for this I think, though maybe there is some way to get it working.

1 Like

thanks. What’s the purpose of multiple objects per pixel if they can’t be accessed/used, and is the Levels setting in the cryptomatte section and the add crypto layer in the compositor nodes options pointless? Or perhaps they work with cryptomattes saved as exr? I’m confused :smiley:

It was designed for multiple objects per pixel due to motion blur, transparency and depth of field.

2 Likes

ah ok, I think I get it now. So basically i’d only increase the levels if more than 6 objects appeared in one pixel of motion blur, and then I’d also need to increase the layer count in the compositor (x2 per level) to accomodate. For transmission it’s not designed for that currently (unless arnold has managed it). Fstorm does it through transmission using multimatte rather than cryptomatte by the way, I think this is Andrey’s own design.

by the way, if you could include the normals and albedo of refracted and reflected objects in the denoising data’s normals and albedo passes, this would make the denoiser node able to work with transmission and reflections without blurring…off topic, but whilst you here :slight_smile:

Trying to think if I could do this with a light path and a custom AOV, but I don’t think it’s possible as I can’t find a way of restricting a light path node to only affect specific AOV’s…hmm, unless I can connect a principled node into an aov output, so one principled goes to the material output and one goes into an aov output.

this doesnt work, but I guess even if it did it wouldnt be great because the quality of the result would depend on number of samples:

so I have a render like this:

want normals like this:

and albedo like this:

1 Like

How is your geometry here? 1 object (Suzanne) inside 1 glass sphere?

monkey is behind a glass sphere, it’s visible in the refraction.