Metahumans and hair strand issues with Object ID

Hi,

I have a custom metahuman in an empty scene. When trying to render Object ID, unreal crashes on “Assertion failed: VertexFactory && VertexFactory->IsInitialized()” under these circumstances:

  • I render only an Object ID pass with no Beauty.
  • I render Object ID together with Beauty (in multilayer exr) and I have a Sky light with Real Time Capture turned on.

It only happens with some metahumans and only when opening a new unreal instance so it’s quite difficult to debug.

Furthermore, when rendering only the Object ID, hair strands are always missing in the render.

[Attachment Removed]

Hi Vojtech,

Would you be able to provide the crash dump and console log so we can take a look at those, please?

You’ve mentioned that it only happens with some MetaHuman characters - do these characters share any common characteristics or customizations that might be relevant here (e.g. how have they been created etc)? Have you been able to replicate the problem with any of the preset MetaHuman characters?

Thanks,

Mark.

[Attachment Removed]

Hi Mark,

I have attached the relevant crash and console logs. I was able to narrow down the issue to the translucent material used on the clothes of the character so I will continue my investigation from there. (Applied to a simple sphere, it renders fine though)

Right now, the bigger problem remains that the MH hair strands are missing from cryptomatte when rendered without the beauty in exr.

Thanks,

Vojtech

[Attachment Removed]

Hi,

this is not something we have encountered in the past. Would it be possible to share a small repro project so that we can debug it on our side?

Thank you!

/Charles.

[Attachment Removed]

Hi, I managed to sort out the crash eventually but I’m still unable to render strands in a separate ObjectID pass (with no beauty) in .exr. Below is an example project, in the Content folder you can find “TestQueue” which has an exposed variable “Beauty?”. Toggling it on and off should give you the .exr renders to compare.

Many thanks,

Vojtech

[Attachment Removed]

Hi, The issue is that the ObjectID pass uses the hitproxy rendering path. This path is not very well supported by strands rendering, and only works when the main rendering happen at the same time. The reason is that the strands interpolation/update happen only on the main rendering view, not on the proxy views.

Though, you can try to change /Engine/Source/Runtime/Renderer/Private/SceneRendering.cpp line 4281 from:

if (Views.Num() > 0 && !ViewFamily.EngineShowFlags.HitProxies)to

if (Views.Num() > 0)

[Image Removed]/Charles.

[Attachment Removed]

Hi, we just tested changing the source code but we still get the same results. Is there anything else we could try?

Thanks.

[Attachment Removed]

Hi, strange that didn’t work. Apart of rendering the ObjectID at the same time, I don’t have other simple idea to test.

/Charles.

[Attachment Removed]