no skin

Forum for users who have migrated or are migrating to Houdini
User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

no skin

Post by Mathaeus » 01 Aug 2015, 02:29

Hello,

just wanted to show my long time summer project in H. It is a parametric human body deformation system, completely based on Houdini VEX - that will be 'based on ICE' in Softimage. So, no any usual operator like envelope, shape key or lattice, exactly nothing of these. Instead, there's sequence of dedicated operators, each one is concentrated to certain body part, doing the all deformations and applying matrices taken from rig, in same time - or, forth - back chain of matrices and related deformations. For example, one operator for foots, another for leg, yet another for spine area, so on.
While I already tested some basic concepts in ICE, still it was one of things, asking for about a week of work in advance, just to see is it even feasible. Hopefully, now I'm sure it is. For now, I could see some good and bad points, compared to classic approach.
Good:
- topology independent, completely. Influences are ( mainly ) based on bone coordinates.
- adaptive, almost all parameters are relative to bones.
- pretty much closed, only processing structure. Theoretically, it should be just applied to some humanoid structure and appropriate skeleton.
- nice and precise falloffs generated by machine, almost impossible to do by painting the weights manually, or by any comparable masochism.
Bad:
- works only in dedicated 3d app, only way to export the deformations is baking the animated mesh.
- significantly slower than classic envelope-plus-shape-key method - for now, I'm getting more than 25 FPS, on around 20 K triangles ( 10K quads), on i7 quad core.
As it constantly catching the multi threading in H, thing should be faster on stronger machine. Also I believe I'd be able to squeeze the evaluation to some extent, in future.
- pretty much closed structure. If something goes wrong, only way to fix is wonderful world of matrices, 3d vectors and such, somewhere in Houdini VOPs.

Just technically, for now, it's a bunch of Houdini optransform functions for transferring the matrices from rig, imported as detail attributes onto one dummy object in H network. Then there's sequence of VOPs, serving as static setters. After that, around ten of "dynamic" VOPs. Reference pose is a dummy object, saved on disk as bgeo.

Hope I'l able to show much more, sometime in autumn or earlier. Also, I think I'd definitively try to repeat the thing in Fabric.

P.S. as it is noticeable, there's a sort of custom rig, built in H - nothing smart about this one, just made it to have something to generate matrices.

Image
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.

User avatar
Hirazi Blue
Administrator
Posts: 4918
Joined: 04 Jun 2009, 12:15

Re: no skin

Post by Hirazi Blue » 01 Aug 2015, 09:29

Impressive (as always!) :-bd
Do indeed keep us posted on any further development!
...

User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

Re: no skin

Post by Mathaeus » 27 Sep 2015, 18:41

Image
Hello,
just to show a bit more of this. For now, thing is complete at human body level, and working.
As usually, it's not so simple anymore, real time is lost - but, now I think I know from where to go 'down', in optimizing.

Here's vimeo

Forgive me animation, it's for testing, only. And, done in... Houdini :).

More about techical side at od Force thread.
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.

anhungxadieu
Posts: 175
Joined: 17 Apr 2014, 10:39
Skype: nguyenvuducthuy

Re: no skin

Post by anhungxadieu » 28 Sep 2015, 16:25

from what i understand you don't need to paint weight, right?

User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

Re: no skin

Post by Mathaeus » 28 Sep 2015, 16:53

anhungxadieu wrote:from what i understand you don't need to paint weight, right?
yeah, no need to paint weight. Nothing new as method, this is similar to bounding volumes in SI, or
capsules when it comes to Max's skin modifier - but there are some requirements, too. Things like fingers should not overlap.
If you multiply the point position vector, by inverse matrix of SI static kine state (well this sounds much more complicated, than really is) - you'll get the point position nicely aligned to particular bone, so positive X (in SI) represent the area around the bone, Y or Z are up - down or left - right. Form this point, no big deal to set some influence, by plain XYZ value of that, aligned position.
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.

anhungxadieu
Posts: 175
Joined: 17 Apr 2014, 10:39
Skype: nguyenvuducthuy

Re: no skin

Post by anhungxadieu » 28 Sep 2015, 17:38

nice work! Anto. But how did you found influence from a bone to mesh? do you use attribute transfer or something else ..?

User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

Re: no skin

Post by Mathaeus » 28 Sep 2015, 20:23

anhungxadieu wrote:nice work! Anto. But how did you found influence from a bone to mesh? do you use attribute transfer or something else ..?
As I mentioned in previous post, 'influence' is a plain point position value, when point position is moved to inverse matrix of static kine state. Let's say, get x value, put into rescale node, multiply the deformation. After that, at a bit longer distance, there's 'if' or 'filter' node, to limit the evaluation of entire part of ICE tree - this to keep the speed.

P.S. note that, once deformations are 'programmed', you won't use one compound for each bone, or something like. With a bit work on switching, there's one 'operator' to take care about all ten fingertips, another for both elbows, so on.
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.

anhungxadieu
Posts: 175
Joined: 17 Apr 2014, 10:39
Skype: nguyenvuducthuy

Re: no skin

Post by anhungxadieu » 29 Sep 2015, 02:56

hi Anto, i understand a little :) ...

User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

Re: no skin

Post by Mathaeus » 03 Oct 2015, 22:48

Image

hello

these things in pic, it is a small sample scene , Houdini hiplc, describing the deformation methods I've used. While this is a H scene, all math nodes, by nature, are almost the same as ICE or Fabric Engine eqivalents. More of technical stuff at od force thread.

For now, I'm slowly in transforming this thing in something more than experiment, which includes the all sorts of revisions.
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.

anhungxadieu
Posts: 175
Joined: 17 Apr 2014, 10:39
Skype: nguyenvuducthuy

Re: no skin

Post by anhungxadieu » 04 Oct 2015, 06:26

Mathaeus wrote:Image

hello

these things in pic, it is a small sample scene , Houdini hiplc, describing the deformation methods I've used. While this is a H scene, all math nodes, by nature, are almost the same as ICE or Fabric Engine eqivalents. More of technical stuff at od force thread.

For now, I'm slowly in transforming this thing in something more than experiment, which includes the all sorts of revisions.
Thank you a lots Anto :ymhug: i will take a look that scene you give.

User avatar
Mathaeus
Posts: 1731
Joined: 08 Jun 2009, 21:11
Location: Zagreb, Croatia

Re: no skin

Post by Mathaeus » 11 Feb 2017, 01:00

Hello,

just decided to put this thing on internet, here you can get it. Short - long description:

First of all, it's purely an experiment, I never ever used it for meeting the deadlines, making money or so. It's something I always wanted to try in ICE times: human body deformation system exclusively created by vector math and nodes. No envelope here, no shape keys, no 'weighting', almost nothing of traditional solutions. Somehow had the time during summer 2015 to do it with Houdini VOPs. Here's odForce thread.

Second, it does not playback in real time. Here, playback is around 15 FPS. There are many reasons for that, belonging mainly to my implementation, generally I wanted as much of freedom for experimenting. For real time preview, there's built in cache node, should be enough to preroll it once, H will automatically play from cache, then.
Perhaps it could be a help for SI people switching to H, complete thing utilizes only nodes, with just a bit of 'typed' stuff. I'd believe it also shows a good bit of vector math - deformation trickery typical for 3d apps.

Now a bit longer description:

Rig is a custom one, done in Houdini. Transforms are transferred as global 4x4 matrices to Point VOPs by H optransform functions. Static pose is same bunch of matrices, saved once from first frame. Static pose of rig should be a zero transform of all animatable parameters. In test animation, that's state at frame 1 (even this is not obligatory). Built in test animation takes about 500 frames at 25 FPS.

Techniques used for deformations:

Hips, shoulders, foot - leg interface: Static pose is derived from NURBS surfaces, wrapped around body parts. Effect is similar to Softimage Cage / Maya Wrap deformer, while here, NURBS surfaces are used only to create the static data. Final deformation is performed only by Point VOPs. Hips deformer has an additional sharp edge functionality at hips - legs interface, defined by "torso_edge_static" Point VOP - edge of deformation is moved, according to angle.
Legs - body and arms - body interface features a compromised 'predefined rolling': at interface, there's always the same amount of rolling around bicep / thigh bone, according to angles, gradually blended to real roll, along bone length.
Knees, elbows, fingers: multiple blends of plain rotations, scaling or shearing created by vector math. Static pose is derived by distance to appropriate bones.
Spine and neck: Rotation is quaternion interpolation of points flattened out into 2d space, between first and last position on spine / neck. Translation is performed later, by Houdini Spline VOP. This is close to traditional 'deform by curve' operator.
What's probably known as 'volume preservation by roll divisions along bones', here is assured by plain modulating of rotation angle along appropriate bone. That's similar to traditional 'Twist' deformer.
System does not use any iterative operations, like smooth repeat. In deformation stage, it does not using any spatial query for collision or such, like H XYZ Distance or such. Exception is 'attribvop_shoulders_fit' which utilizes spatial query to get a nicer shape of shoulders. "self collision" of arms and legs is sort of plain clamp in midpoint, modulated by spline gradients.

Perhaps because of very 'serial' nature, and approach of using the every Point VOP to modify the result of previous one, evaluation is generally slow - even the all Point VOPs are bounded by appropriate groups. More 'parallel' approach, where complete deformation of each body part is immediately performed in global space, should give a way better performance, but this was somehow out of level of engagement of this experiment (harder for experimenting).
Significant difference against traditional envelope / skin, is computation of deltas performed on each point, instead of bones, which makes it of course, even more slow.

Good luck!
The renderer "turtle" used by this scene, is not currently available. The "turtle" renderer will be used instead.