Epic MetaHuman sculpt workflow.

   4614   3   2
User Avatar
Member
12 posts
Joined: Oct. 2020
Offline
I feel a bit outside of my comfort zone on this one (and probably biting off more than I can chew), so I thought I'd ask for some advice from some of you more knowledgeable folk:

As of right now, there doesn't seem to be a well put together sculpt workflow for the Epic (UE4) MetaHuman Creator rigs.
Exporting the head to Zbrush and back to UE4 (while maintaining the same topology) breaks the rig, as the bones will not be in the proper positions anymore and the skin weights will be messed up.
Houdini seems to be well suited for dealing with this, but not being a character rigger by trade, I thought it might be worth asking if I'm missing something obvious and if this sounds like a fool's errand.

The current idea/ progress:

Export a MetaHuman from the Quixel Bridge -> Load in UE4 -> Export the head FBX (with all LODs)
Import the MetaHuman head mesh in Houdini, blast the LODs, rig, groom, all attributes, etc.
Send to Zbrush -> sculpt while keeping the same topology, prim and point count, etc.
Import back to Houdini -> attribute copy back everything from the original mesh (apart from the boneCapture) -> attribute transfer the boneCapture points from the original mesh to the sculpt (this should work well due to both heads having the same point/prim/vert count).

Current problem to solve:
Move (or lengthen maybe?) the bones based on vertex ID to fit the new sculpt from Zbrush

This could be done via VEX: find closest point to the mesh on the bone -> move the pivot to that point -> lerp() from old to new mesh -> move bones based on distance from the closest point's former location to the new location

https://drive.google.com/file/d/1DnuNlSOiJZZJ0RmSv5_g_BqSR-VMRxZO [drive.google.com] - File if anyone wants to play around with this.

Questions:
Would it be better to move or lengthen each bone?
Would using KineFX's IK solver to pull on the entire bone hierarchy as I move the bones closer to the new target mesh location be better/worse than just moving or lengthening them?




edit: Will on the Discord suggested using "the old and new geo to point deform the rig. The only trouble would be the bind pose" as a possible option

Any other thoughts or ideas?

Cheers.
/rant
Edited by volodXYZ - Nov. 14, 2021 05:45:39

Attachments:
23bad0a3cef6217f1b69cd3366e33a58 (1).gif (8.3 MB)
unknown (1).png (177.9 KB)

User Avatar
Member
5 posts
Joined: Dec. 2013
Offline
This is Awsome .

Thanks for Sharing your Hip experiences file

Houdini Unreal users really need this ...
Iv been asking Around and no one to help solve The Adjust rig to mesh morph

A Expert given me some tips
https://www.toadstorm.com/blog/?p=465 [www.toadstorm.com]

But i dont really know how to apply it

There are some people doing this in maya with scripts ...

https://youtu.be/qF-z1aZQUYE [youtu.be]
https://youtu.be/UzuRvIz0v0Y [youtu.be]

Maybe those can give some ideas
How to use same funtions in Houdini

This is so much needed ...
But this forum seams have few people helping ...
Maybe Asking at Oddforce foruns ?
https://forums.odforce.net/ [forums.odforce.net]

Keep Sharing your Houdini Scenes tests If you can improve it

THANK YOU SO MUCH
Edited by Silva Dinis - Nov. 25, 2021 17:21:40
User Avatar
Member
5 posts
Joined: Dec. 2013
Offline
SOME MORE INFORMATIONS
ON METHODS TO SOLVE
RIG ADAPTING TO MORPH

How do you get bones/joints to follow mesh deformation.

what works quite well so far - is to grab a joint's
position in space based on its nearest primitives (with the respective UV position on the primitive to cater for LARGE prims). By copying the
rotation angles of the primitive's normal you can rotate the "ray" from those "anchoring" primitives to the joint's position. Since the
primitives will probably stretch in deformation, you need to put the deformed joint's position into the center of the "sphere from rays" you
get. This works very reliably.

If you can be sure that your deformed mesh has the same pose as the
original mesh, you can "go cheap" and shoot rays to world axis: Shoot
rays from your joint's position along x/y/z in positive and negative
directions and copy at least two axis' hit points over to the deformed
mesh. The joint's new position in space is where the deformed hit
primitives axis-parallel rays meet.
This works if your
deformation isn't too extreme.

about "many dozens of head bones"
There I would look at two alternative approaches:
a) head bones most likely end CLOSE to ONE primitive of the mesh. Why
not use THAT position to position the joint after deformation, that
should work 99% of the time for head bones.
b) why not us the FBX exported joints positions and adjust them based on
their respective WEIGHT MAPS (rig weight) copying POINTS positions
(read: You have a joint position and you have points that are weighted
to that joint. Now you deform the points in space, but their weights are
preserved. You only need to calculate the new joint's position based on
the preserved weights - you could even get away with a subset of points!)

So, as for the finding uv positions on primitives, one page I strongly
recommend you to read (aside from Houdini's documentation, obviously) is
https://www.toadstorm.com/blog/?p=465 [www.toadstorm.com]
It doesn't cover "all of it", but you should get the idea of how to
shoot a ray from a joint's position (a joint being the "tip" of a bone).

What I suggest is "forget" about bones for the moment, concentrate on
joints. FBX is joints, Unreal is joints, kineFX is joints. Bones are -
in this specific context - really only connections between joints. And
since joints are simply points, dealing with them is way easier than
having to think about bones' directions.

So you basically have to pinpoint a joint's position BASED ON ITS
SURROUNDING primitives (or points, doesn't really matter). Since that
joint will HAVE TO BE at the same relative position once your
deformation happened, you really only need to project backwards from the
deformed state to the joint's new position. The idea is really simple -
how you create that in your specific setup depends on how flexible you
want your system to be.

Hope someone can test
And share some files
On this concepts

GOOD LUCK
THANK YOU
User Avatar
Member
5 posts
Joined: Dec. 2013
Offline


Found some Sample Hip Files at odforce on How to Transform And Stick Point to Geometry From uv Space to World Space ...

https://forums.odforce.net/topic/19570-how-to-transform-p-from-uv-space-to-world-space-in-sop/ [forums.odforce.net]

Sadly im a Nob ...
Have No idea how to Apply that to your File with Metahumans Hundreds Joints ...

https://drive.google.com/file/d/1DnuNlSOiJZZJ0RmSv5_g_BqSR-VMRxZO [drive.google.com]

I think we are very close
Hopefully Someone can Help ..

Cheers
  • Quick Links