Why Movie Render Queue Object ID with "Full" Id Type has no material ids in the exr file

When I Use Movie Render Queue to render a sequence, I choose Object id with type “full” to get the full information, but in the exr output files i cannot find the material id layers, but when I choose the type “material id”, I can get these. Shouldn’t the “full” type contain all informations? And in the C++ code, the switch case of “full” type doesn’t try to get materials from the input primitive component. How could I get both actor ids and material ids?

1 Like

Has it been solved? :dotted_line_face:

After I read the code of MRQ, in my opinion the “full’ id is just the details info of an object. The line
“StringBuilder.Appendf(TEXT(”%s.%s[%d.%d]”), *InActor->GetActorLabel(), *GetNameSafe(InPrimComponent), InMaterialIndex, InSectionIndex);"
gives only the material index(just a number), and an actor can be separated as several components. The "full’ id is not a combination of actor id and material id.

Can you provide a solution?Thank you.

And in C++, it will detect if an actor is hit in the user interface, the class of the result is called HHitProxy, each proxy has a proxy id. During the MRQ process, it will record the hit actors and for each actor it will call the function “ResolveProxyIdGroup” to get a proxy id name which is finally shown in the exr file as a layer name in Adobe PS. The proxy id name and the proxy id are recorded as a pair in a map/dictionary, so that each id(the key) has only one value(therefore the proxy id name), so the relationship is a one-to-one relationship. The material id is multi-to-one, actor id is also multi-to-one, full id is one-to-one, if I want to output an exr file with both material id and object id, the relationship is multi-to-multi(e.g. two actors have same material but different class of actor).
The conclusion is that the c++ code is not designed as a customizable module, I am not a UEC++ master so I can not solve it now. I also hope somebody could help me to solve it.
If you just want to split them, you can use the “stencil layer”, for example, your scene has 5 actors, you can make 5 layers that each layer contains an actor, and render the sequence with object id “material id”, so you can get exr files with separated actors and materials.

1 Like

thanks :cowboy_hat_face: