Hi @Chirimoya,
well worth checking out some of sesi's work on constraints in chops, I had a quick rifle through $HFS/houdini/vex/include/chop_constraints.h and it's very interesting to see how that's been put together.
There's also some great vex functions in there for handling matrices, they get called in the default snippet in the Transform Wrangle in CHOPs.
Cheers
Found 256 posts.
Search results Show results as topic list.
SI Users » Custom Kinematics Solver
- friedasparagus
- 402 posts
- Offline
Technical Discussion » Rigging help
- friedasparagus
- 402 posts
- Offline
Hi guys,
I'm afraid that I've been a lazy bum on this front. I did capture the skeleton geometry to the rigs bone objects, I put together a little hda for setting the capture attribute on each disconnected bit of geo based on which capture region is most prevalent in that geometry ‘part’, which gives a 100% weight to only one bone object.
Has given me good results so far, but of course there is the overhead of using a deform sop to actually move the geometry, this is something I wrote off in the short term as the anatomical bone objects are only used in the context of FEM simulation which is so much slower anyway that the deform sop performance becomes much less significant.
The big advantage of this is that I can work on the modelling of the skeleton and have all the capturing/deformation taken care of by a node network, which is very useful for me right now as I'm yet to find out if the skeleton behaves nicely with the FEM sim down the line. So adjustments to the geometry are expected (getting enough empty space between the bones, tweaking the resolution of the skeleton mesh etc. for maximum per-form-ance ) and I've found so far that working on a single geometry object helps a lot with this.
Sorry for the extended post, if anyone is interested in that hda, it's here…
I'm afraid that I've been a lazy bum on this front. I did capture the skeleton geometry to the rigs bone objects, I put together a little hda for setting the capture attribute on each disconnected bit of geo based on which capture region is most prevalent in that geometry ‘part’, which gives a 100% weight to only one bone object.
Has given me good results so far, but of course there is the overhead of using a deform sop to actually move the geometry, this is something I wrote off in the short term as the anatomical bone objects are only used in the context of FEM simulation which is so much slower anyway that the deform sop performance becomes much less significant.
The big advantage of this is that I can work on the modelling of the skeleton and have all the capturing/deformation taken care of by a node network, which is very useful for me right now as I'm yet to find out if the skeleton behaves nicely with the FEM sim down the line. So adjustments to the geometry are expected (getting enough empty space between the bones, tweaking the resolution of the skeleton mesh etc. for maximum per-form-ance ) and I've found so far that working on a single geometry object helps a lot with this.
Sorry for the extended post, if anyone is interested in that hda, it's here…
Houdini Indie and Apprentice » IK issue (rotation broken?)
- friedasparagus
- 402 posts
- Offline
Work in Progress » Pose Scope from Capture Attribute
- friedasparagus
- 402 posts
- Offline
Here's ANOTHER fiddling about with the pose scope attributes (I will do something else at some point, honest).
This one is definitely a lot more WIP, but it can be quite magical to watch happen.
Super simple setup that clamps the input capture weights gets the path of the capture regions container and then creates a pose scope attribute which it transfers back to the properly weighted mesh. I tried this with importing a mixamo fbx, and whilst a little rough it did allow interaction with existing skinning rig in about 1 minute!
In the hip file attached, you can see the results on said fbx (all the unselectable geometry nodes have the pose scope from capture hda in them.)
Anyway, any thoughts always welcome
This one is definitely a lot more WIP, but it can be quite magical to watch happen.
Super simple setup that clamps the input capture weights gets the path of the capture regions container and then creates a pose scope attribute which it transfers back to the properly weighted mesh. I tried this with importing a mixamo fbx, and whilst a little rough it did allow interaction with existing skinning rig in about 1 minute!
In the hip file attached, you can see the results on said fbx (all the unselectable geometry nodes have the pose scope from capture hda in them.)
Anyway, any thoughts always welcome
Technical Discussion » CHOP Constraints with continuous sampling
- friedasparagus
- 402 posts
- Offline
Work in Progress » Mirror Pose Scope
- friedasparagus
- 402 posts
- Offline
Hi all,
just sharing a little tool I've made along the way on my current project. Got fed up trying to mirror across primitive selections and whatnot, so here's a little wrangle to mirror across the pose_scope attribute. It does rely on a consistently named set of controls and the suffix/prefix stuff needs to match the existing pose_scope attribute, but I've found it has sped things up a lot.
One last thing is that I think it currently needs to have the group parameter filled out with the same groups used in the upstream pose scope SOP itself, I haven't given it much testing without this.
Hope someone finds it useful
EDIT: ok, little initial fixes. Now no group is required, it tests for existing prim attrib and also for prefix matching, pose scope attributes with a matching prefix will get mirrored. Also an axis parm
just sharing a little tool I've made along the way on my current project. Got fed up trying to mirror across primitive selections and whatnot, so here's a little wrangle to mirror across the pose_scope attribute. It does rely on a consistently named set of controls and the suffix/prefix stuff needs to match the existing pose_scope attribute, but I've found it has sped things up a lot.
Hope someone finds it useful
EDIT: ok, little initial fixes. Now no group is required, it tests for existing prim attrib and also for prefix matching, pose scope attributes with a matching prefix will get mirrored. Also an axis parm
Edited by friedasparagus - March 23, 2017 09:55:21
Technical Discussion » Windows: Installing python modules
- friedasparagus
- 402 posts
- Offline
I wrestled with this too. I hate the idea of building a tool or module and then having to give a huge list of instructions for getting it working with its dependencies.
I could only get as far as the sys.path.append() thing when I looked at it before… one thought I did just have is using an environmental variable that you can reference in the append method, then you only have to get people to add it in their config. i.e. LOCAL_PYTHON_LIBS=Cblah_etc
I could only get as far as the sys.path.append() thing when I looked at it before… one thought I did just have is using an environmental variable that you can reference in the append method, then you only have to get people to add it in their config. i.e. LOCAL_PYTHON_LIBS=Cblah_etc
Houdini Lounge » Mirror point groups wrangle
- friedasparagus
- 402 posts
- Offline
Hi all,
wasn't sure where to put this, but thought somebody out there might find it useful. Mirroring groups is something that's cropped up more and more recently, so I made a wrangle for it
I pinched Tomas' code for getting point group names from here [forums.odforce.net]
wasn't sure where to put this, but thought somebody out there might find it useful. Mirroring groups is something that's cropped up more and more recently, so I made a wrangle for it
I pinched Tomas' code for getting point group names from here [forums.odforce.net]
string ptgrps[] = detailintrinsic(0, "pointgroups"); string ptingrps[] = {}; foreach(string grp;ptgrps) { if (inpointgroup(0, grp, @ptnum)){ if(grp[0] != "_") append(ptingrps, grp); } } string from_prefix = chs("old_prefix"); string to_prefix = chs("to_prefix"); vector target = @P * {-1, 1, 1}; int t_point = nearpoint(0, target); foreach(string name; ptingrps){ string new_name = to_prefix + lstrip(name, from_prefix); setpointgroup(0, new_name, t_point, 1); }
Houdini Indie and Apprentice » IK issue (rotation broken?)
- friedasparagus
- 402 posts
- Offline
Hi there,
This is a strange happening that I don't know if I ever would have come across. The issue here is that the IK solver doesn't respond well to having an IK chain parented to a bone object directly. Please see the attached file for a comparison, there's one leg roughly matching your setup and another with a null at the root of the bone chain (which behaves as expected).
A couple of things to bear in mind… Generally I would want to keep my bones free of translates, especially in the context of a chain, so if we're going to need to translate something like the hips/COG ctrl, pass this on to a null at the root of the chain. You can see this is how houdini strongly suggests we do things, as this is what we get when we use the bones tool. When you come to deforming something that you do want to drag around that isn't part of a chain (like character props or parts of a facial rig - anything without inherent length) this is when I would say use the null-containing-capture region solution.
Also be wary of your joint alignment. The left leg is in a somewhat different plane to the right one, this can also end up in deep IK confusion later on
Sorry for the extended waffle, I hope that's of some help,
Cheers,
Henry
This is a strange happening that I don't know if I ever would have come across. The issue here is that the IK solver doesn't respond well to having an IK chain parented to a bone object directly. Please see the attached file for a comparison, there's one leg roughly matching your setup and another with a null at the root of the bone chain (which behaves as expected).
A couple of things to bear in mind… Generally I would want to keep my bones free of translates, especially in the context of a chain, so if we're going to need to translate something like the hips/COG ctrl, pass this on to a null at the root of the chain. You can see this is how houdini strongly suggests we do things, as this is what we get when we use the bones tool. When you come to deforming something that you do want to drag around that isn't part of a chain (like character props or parts of a facial rig - anything without inherent length) this is when I would say use the null-containing-capture region solution.
Also be wary of your joint alignment. The left leg is in a somewhat different plane to the right one, this can also end up in deep IK confusion later on
Sorry for the extended waffle, I hope that's of some help,
Cheers,
Henry
SI Users » like ICE state machine
- friedasparagus
- 402 posts
- Offline
Ok, couldn't leave it alone… so made a slightly more interesting one
EDIT: for goodness sake attach before you submit!
EDIT: for goodness sake attach before you submit!
Edited by friedasparagus - March 22, 2017 08:48:34
SI Users » like ICE state machine
- friedasparagus
- 402 posts
- Offline
Hello,
thought I'd bung up a really simple example of using CHOPs to control this kind of thing. I've put a parm on the chop to control a constant which is used to switch the input curve on or off. When on the scrubbing the timeline will make the sphere grow.
Anyway, thought a different approach might be interesting And CHOPs are a great way of controlling things over time, and in some instances can be a lot more flexible than using solvers.
Cheers,
Henry
EDIT: forgot the file!
thought I'd bung up a really simple example of using CHOPs to control this kind of thing. I've put a parm on the chop to control a constant which is used to switch the input curve on or off. When on the scrubbing the timeline will make the sphere grow.
Anyway, thought a different approach might be interesting And CHOPs are a great way of controlling things over time, and in some instances can be a lot more flexible than using solvers.
Cheers,
Henry
EDIT: forgot the file!
Edited by friedasparagus - March 22, 2017 06:57:13
Technical Discussion » CHOP Constraints with continuous sampling
- friedasparagus
- 402 posts
- Offline
Hi jsmack,
just had a play with that and yes the only way I could find to get similar results on constrained geo to keyframed geo was to up the samples on the object offset CHOP (I was using a simple parent contraint).
There is something strange going on though, logic would seem suggest that as long as you sample at a rate equal to FPS * ‘Xform Time Samples’ you should get the same results as the keyframed geometry, but this is also not the case…
Cheers,
Henry
just had a play with that and yes the only way I could find to get similar results on constrained geo to keyframed geo was to up the samples on the object offset CHOP (I was using a simple parent contraint).
There is something strange going on though, logic would seem suggest that as long as you sample at a rate equal to FPS * ‘Xform Time Samples’ you should get the same results as the keyframed geometry, but this is also not the case…
Cheers,
Henry
Technical Discussion » Old vs. New Point SOP
- friedasparagus
- 402 posts
- Offline
I've kind of missed out on the whole transition issue from the old Point SOP. I've found wrangles a really fast way of setting these kinds of things, almost exactly like @itriix mentioned: @P.y = sin(@ptnum) for example.
Maybe I've just sucked up more programming than is good for me, but this still seems to me the most straightforward way of going about things. Am I missing any advantages to using VEXpressions vs wrangles?
Maybe I've just sucked up more programming than is good for me, but this still seems to me the most straightforward way of going about things. Am I missing any advantages to using VEXpressions vs wrangles?
Technical Discussion » Animation workflow in houdini
- friedasparagus
- 402 posts
- Offline
Hi guys,
I think he has a set of tools going for being able to take a set of baked out channels (for want of a better word) on the joints and stick a rig into the middle of that existing animation, which he can then use to modify the movement before re-applying the channels onto the joints. The idea seems to be that you only ever have keys set on the joints themselves… I have to admit, I quite like the concept.
Keying any IK/FK blending always seems a bit dirty to me, I think I would invariably end up using the IK handles to get a pose and then matching the FK to that position, always keeping the keyframes on the FK channels. I think that's closely related to the approach that Mr Lico is taking.
The changing pivot space still confuses me a bit though… maybe you're referring to the use of locators to pass around animation data? i.e. to create offsets and lag in the movement between hand and shoulder
I think he has a set of tools going for being able to take a set of baked out channels (for want of a better word) on the joints and stick a rig into the middle of that existing animation, which he can then use to modify the movement before re-applying the channels onto the joints. The idea seems to be that you only ever have keys set on the joints themselves… I have to admit, I quite like the concept.
Keying any IK/FK blending always seems a bit dirty to me, I think I would invariably end up using the IK handles to get a pose and then matching the FK to that position, always keeping the keyframes on the FK channels. I think that's closely related to the approach that Mr Lico is taking.
The changing pivot space still confuses me a bit though… maybe you're referring to the use of locators to pass around animation data? i.e. to create offsets and lag in the movement between hand and shoulder
Houdini Indie and Apprentice » wrangle function tips....not working?
- friedasparagus
- 402 posts
- Offline
Hi Nicolas,
Maybe more an RFE than bug, but I can't remember any kind of hinting when typing in wrangles
I still haven't given this one a whirl yet, but looks well worth checking out:
https://github.com/paulwinex/pw_Houdini_VEX_Editor [github.com]
Cheers,
Henry
Maybe more an RFE than bug, but I can't remember any kind of hinting when typing in wrangles
I still haven't given this one a whirl yet, but looks well worth checking out:
https://github.com/paulwinex/pw_Houdini_VEX_Editor [github.com]
Cheers,
Henry
Houdini Lounge » one character reflects another
- friedasparagus
- 402 posts
- Offline
Hi there,
are you building your rig in houdini? If so, you could always capture your different characters to the same rig and then mirror the geometry at SOP level after it's been deformed. This could be a nice way of avoiding having two rigs with channel references that may or may not mirror properly. Are you hoping to export the characters for real time use?
are you building your rig in houdini? If so, you could always capture your different characters to the same rig and then mirror the geometry at SOP level after it's been deformed. This could be a nice way of avoiding having two rigs with channel references that may or may not mirror properly. Are you hoping to export the characters for real time use?
Houdini Indie and Apprentice » Copying animated geometry to points.
- friedasparagus
- 402 posts
- Offline
I may be way off the mark here. But I made a little experiment which I think may be be the effect you're after. Unless you're dealing with deleting points and keeping track of them over time, dealing with static point IDs and such may be overkill.
All you need to do is tell the Copy SOP which points you'd like to copy to, i.e. in the Template Group parm. You can always use an expression in here to whittle them down. I used @pscale>0.0 there, which just keeps things a bit tidier than having loads of copied primitives with zero scale.
Anyway, have a look and see what you think
All you need to do is tell the Copy SOP which points you'd like to copy to, i.e. in the Template Group parm. You can always use an expression in here to whittle them down. I used @pscale>0.0 there, which just keeps things a bit tidier than having loads of copied primitives with zero scale.
Anyway, have a look and see what you think
Technical Discussion » Brush Fibermesh to Houdini
- friedasparagus
- 402 posts
- Offline
Hi Noukster,
if you know how many segments you set your fibermesh to be in ZBrush, you can import the geometry as points and use and add SOP to join ‘groups of N points’ set to what ever it was in ZBrush. I've done this with hair/fur but I don't know what kid fo setup you've got going on, so maybe it won't solve your problem.
Let me know if that works
if you know how many segments you set your fibermesh to be in ZBrush, you can import the geometry as points and use and add SOP to join ‘groups of N points’ set to what ever it was in ZBrush. I've done this with hair/fur but I don't know what kid fo setup you've got going on, so maybe it won't solve your problem.
Let me know if that works
Houdini Learning Materials » smooth bones weight procedurally
- friedasparagus
- 402 posts
- Offline
Houdini Learning Materials » Constraints in houdini
- friedasparagus
- 402 posts
- Offline
Hmm, it's really hard to know what exactly you're after without an example, but it's well worth taking a look at the lookat() function in VEX, it calculates the same things as a obj level lookat constraint but returns a transform matrix instead that you can use to modify the position or other attribute.
Hope that's useful
Hope that's useful
-
- Quick Links