Jump to content

[SOLVED][Kinefx] Weight/Skin Geometry Based on Attributes/Grouping for Blocking?


bentraje

Recommended Posts

Hi,

By default (at least most tutorials), they use a biharmonic capture node that is equivalent to a standard/automatic/initial skinning in C4D/Maya.
It works. But my workflow is to block each joint influence 1 by 1 and not let an algorithm decide it for me.Then later just smooth things out per region.

I was thinking of two step
1) Create attributes/groups for each section of joint influence
2) Use attribute wrangle for an if else logic. (if you contain this attribute/group, full 1 weight otherwise, zero)

Step #1 is easy enough. Just use attribute wrangle or a group node.
Step #2 is tricky.

The main reason is its a bit hard to access the attributes. With the help of this tokeru website under the procedural skinning section, I was able to get close.
My remaining problem is "packing" weights for the bone deform consumption.


See attached file below:

Is there a way around this?


 

weight_base_on_attributes.jpg

weight_based_on_attributes_group_v1.2.hipnc

Edited by bentraje
Link to comment
Share on other sites

I'll take a look at this this afternoon and see why you're getting the out of range error, but just out of curiosity, is there any reason you're not using the proximity capture Matt and I suggested earlier? It seems like it does what you're trying to do with a single node. It doesn't allow for per point manual selection of the bone, but honestly that seems overkill for blocking, since you're still going to have to do a round of capture layer paint to blend the weights.

 

proximity.hipnc

Edited by madebygeoff
Link to comment
Share on other sites

I think you're getting an error because you are missing the necessary metadata that the capture pack node needs. At the very least you need the list of joint names (the capture path) that reference the _index point attribute.

Take a look at Matt's file under that procedural weighting section you linked to. Look at the "set_detail_attribs1" wrangle. That's where he's setting all the detail attributes that the pack SOP uses as metadata.

You should be able to adapt that node to your setup and it should work.

Link to comment
Share on other sites

  • 2 weeks later...

Thanks for the prompt response @made.by.geoff
And sorry for the late reply. Something came up.

RE: any reason you're not using the proximity capture Matt and I suggested earlier
I'm using it actually for most of the task. Just wondering if I can also brute force it using the point/attribute selection.

RE: honestly that seems overkill for blocking,
Yes, it is :) Nevertheless I'm interested in the future since there are cases there are polygon selection from other DCC models and it would be nice I can use them for blocking.

RE: Look at the "set_detail_attribs1" wrangle.
It took me some time to check it again since the example is in .hip (rather in .hipnc / .hiplc).

Yea, it seems like this is a missing piece but I'm quite confused how it was set up since there is a hard coded data.
You can see what I mean below.

detail_attrib.jpg

Link to comment
Share on other sites

This is getting into the dark rabbit hole of how Houdini stores its capture weights and I admit, I don't fully understand it.

One thing you can do to start to reverse engineer it is just make a simple capture set up with the bone proximity node and then unpack it and take a look at what happens. Try adding a capture layer paint and mess around with the weights and then see what happens after the unpack. I attached a simple scene below.

I think that 20 element array is a weird 4x5 matrix that is holding info about the skeleton points and their associated capture regions. It's basically a 4x4 transform matrix of each point/joint in the skeleton, plus an additional 4 elements that hold information about the size of that joint's capture region.

Since in Matt's example, he starts with 18 points/joints all at the origin with the same orientation, the matrix is essentially the same for each joint.

If you want to dig further into it, you can check this out:

https://www.sidefx.com/docs/hdk/_h_d_k__geometry__capture.html

Or maybe @mestela can weigh in? I'll try to dig into it a bit more tomorrow and see if I can help more.

simple_capture.hipnc

Link to comment
Share on other sites

@made.by.geoff

RE: I think that 20 element array is a weird 4x5 matrix
Ah gotcha. That make sense. Silly me haha.
I used to see it in columns and rows haha
like this

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 0
1 1 1 1

With that said, I was able to make it work (not quite fully procedural). But I got the basic idea working. Will tag this thread now solved.
Thanks for the help!

 

weight_based_on_attributes_group_v1.4.hipnc

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...