enhance clean pole target rig with rotation mode

Issue #455 resolved
engetudouiti created an issue

I did not see such strange issue, before, then found what cause so heavy issue, when we parent with IK foot or IK ankle.

(it is almost no difference for me.. only thing what ifeel important is, IK pole need to follow foot move, then I do not think any option is useful which can not do it, like parent with HIP etc without you set constrain to follow foot)

Then I believe I can improve more, with google around, and compare how they achive their original IK rig. but to make things simple (and improve clear)

Thomas you should need to set the pole target with distance, (almost shin length ) then parent it for foot IK (or ankle may work too, though I simply parent it for foot IK )

Then at same time I may recommend not use rotation for relation. like this

Current way

I think before you set pole target not so near. I do not remember when you make it so at all.

Then after you show somehow cool shape for the pole target, this happen. but the main reason is your position of the pole target

Easy fix way is you need to take reasnable distance = more than shin length. so the problem drastically dexreased. (i can almost ignore , only see issue with super angle)

then I now return pose mode

the limit is like this (where flip should happen)

basically if you keep distance for pole as rest pose, such easy flip never happen. At least you set distance as same as before, it really easy ease problem then of couse Pole follow foot move, so it basicaly try to show natural pose with foot move.

It is not pefect rig still, actually there was good tutorial who manage this problem I almost confirm you can enhance it with constrain, but as first step it is simple enough, if user who hope to set the pole near the knee just to eye look better, I say, you should ignore those view . most of user need stablity first.

Comments (33)

  1. Alessandro Padovani

    Yes, that’s why I prefer poles on root so flipping doesn’t happen as explained in #421 #453. I just keep the poles outside the posing area for general reference. Then I understand that having them follow the foot/hand is handsome but, as you see yourself, this way you have to take care of the poles position when you pose.

    The solution of a better start position for the poles, though it works, is subjective and it is effective only at the start of the animation when the figure is at rest pose. I myself set the start position for the poles with every new animation.

    So personally I believe there’s nothing to fix. The rig works fine and we have to take care of the poles position, depending on the animation we have to do and the parent we choose for the poles.

  2. engetudouiti reporter

    So you keep to use set parent as root or hip as you like. You actually do not understand I feel.

    It work for most of angle and foot position without problem even though I try to make yoga pose.

    I just show 2nd pic, it may tell you how many length you may need for rest pose positon for pole. then you can understand, when flip happen. if you hope to work more angle, simply get more distance for rest pose.

    Then you need not adjust it any more.

    On the other hand, If you do not parent with Foot without use any special constrain, o set parent for root or hip, it always show strange pose . because the pole remain the local position untill you everytime manually move .

    So I said such rig is actually useless for IK animation.

    Anyone complain and should recognize, to set position correctly for pole (rest pose), then set parent IK foot. it work without problem. You said, you do not like to see flip issue, the reason is just distance. which currently Thomas set the Pole (do not know why it needed ) . There was no need to change bone parent etc,, (break strucutre)

    The old way (or new options to parent with Hip or Master ) not solve anything but corrupt IK posing. So it should not be used as default option. (I do not think there is case we need to use it any more)

  3. engetudouiti reporter

    Then Thomas you can ignore the 3rd pic. because we never rotate (we can not) foot IK angle like this.

    If user do not like to see flip with such hard foot angle, you may need to make distance more. (eg set almost full leg length for blender -Y , locate 2 poles)

    Of course the more we set distance, user may feel too far, but it is not actual problem at all. we can adjust it with shape position too.

    I do not complain to remain all case for user test, but You may better not set parent for root or hip as default Enum (if you use those for setting), It simply miss read user.

    And actually set Pole as Shin + some space length may tell user the limit which we should not pose about foot angle. (f you set pole so, the problem only happen for foot pose (rotation) which we should not set so. I do not remember if there was rotation limit about IK foot bone, but if you set it correctly, flip issue may not happen any-more. with parent Foot IK .

    If I set pole like this, flip issue never happen for me. (I suppose you can set more near ,but for safety to use all hard rotation, I suppose the position is enough for all case) shin length<pole pos< full leg length

    And of course same thing you may need for hand IK poles I suppose (though I do not test it still with recent version MHX)

  4. Alessandro Padovani

    Well a better start position doesn’t harm anyway and may also help inexperienced users who may wonder why they get flippings. Then Engetudouiti tested only the legs but there’s arms too.

    If we use start positions similar to rigify it helps. That’s also the same as Engetudouiti does.

  5. engetudouiti reporter

    Locate pole with distance correctly, is not better or it not just for inexperienced user.

    I say clear We must need to set reasonable distance from Knee, when generate pole target for IK.

    or it simply not work at least with current MHX rig because it not add new bones, to adjust pole position auto

    At same time, I suppose no one need to change parent to Root or Hip. The decision was wrong for almost of all users any more

  6. Alessandro Padovani

    I just mean we have to pose the poles anyway so a better start is not strictly necessary, though I agree it’s good. As for commit 979be54 the poles seem to work fine here.

    edit. I see what you mean that the poles are not connected anymore. Though the rig works fine. Latest commit 604aa41 still doesn’t connect the poles.

    update. The poles connection is back in commit ad3b726.

  7. engetudouiti reporter

    @Thomas I saw the commit code, but I do not think it do what I menitoned. or Do I need to use Parent master?

    I see same issue still

    But as my side, the problem already solved. (as basic meaning for most of case it do not show problem anymore just I re-locate pole as I mentioned above)

    For more good rig, I hope to add you tube link and it actually work perfectly for Thomas . (though I do not think we must need it, because if we just set pole distance correctly, the flip problem are actually solved with reasonable pose range.

    If follow the link tutorial way, Thomas may need to add new bones and constrain etc for MHX rig

    https://www.youtube.com/watch?v=suP14lYWpN8&ab_channel=LevelPixelLevel

    I actually test but current MHX rig not have same rig hieralchy, then customize it for MHX (but almost do same thing), and actually it work nice. So if you have interesting, I suppose Thomas can find best aploach, with MHX rig

    But I do not think we must need it now.. (though If current version can solve other issue, and released as stable version, may request, if you can imporve MHX more.

    I suppose there should be another way, it show what we need to locate pole correctly, with follow foot pos, so if we can do same thing, it is not problem how achive it.. (Rig fy do same thing with different bones)

  8. engetudouiti reporter

    I now customize above link pole way (it is somehow too complex to generate by add on, and MHX not have same bone hieralchy so I use already MHX generated bone.

    we only need to add 2 new bone to get better pole target (stress free I feel). And I think Thomas can easy generate those rig, (when you plan to enhance current MHX rig pole target more user friendly and stable posing as IK foot)

    Untill add new bone and simple constrains, I request (and I feel it must), anyway, set pole more far from Knee to the knee foward direction please. it must need. The more you set knee pole close to leg, the more you often need to adjust it. so it is must.. (even though you do not add new bone etc,, if you set pole distance at least shin length, most of problem has gone. with parent IK foot (or hand)

    Then as premise you should change current pole position, add 2 bone and constrain. and I talk only about Left side IK leg chain (because you can do same thing for R IK chain (and hand)

    Step1 Generate new bone KneePoleA.L as child of legSocket.L like this pic

    Step2 in Pose mode, set 2 bone constrain for KneePoleA.L like this pic

    constrain 1 : dumped track target bone = ankle.ik.L Track axis Y.

    cnsotran 2: copy location target bone = ankle.ik.L set constrain weight as 0.5 (basically it work well)

    after set constrain correctly, KneePoleA.L always locate the half postion of the line and keep to look the ankle bone joint. it is important. KneePoleA.L bone only used to locate real KneePole parent bone correctly with constrain.

    Step 3: Copy KneePoleA.L bone, and rename to KneePoleP.L , and locate on the Shin bone.

    and Set the bone parent as Hip to out of IK Foot chain.

    constrain : Copy Transform target bone = KneePoleA.L mix Replace weight as 1.00

    So KneePoleP.L always locate on same place as KneePoleA.L like this pic

    Last step

    Adjust knee.pt.ik.L distance from Knee. (keep the bone direction) (as I said, you must need to get reasoonable distance, almost half of leg length) like this

    and set the knee.pt.ik.L parent as KneePoleP.L

    After that, how you pose IK foot, and rotate them , ugry bone flip or shaking knee never happen. at same time pole try to follow Knee point correctly with all pose, so user can easy adjust Knee angle when you need it. of course it should show smooth animation, after you set key, and move IK foot again.

    even though youo adjust Leg socket, KneePoleP.L foloow it and locate correctly.

    The ugry defomation, I do not use any JCM or morphs, but move socket to see what happen, so it is not rig problem.

    Same thing need for Right leg and both arms. (for arms we have sholder socket bone, and can use Any IK hand bone as dump target to locate ElobowPoleP.L I think, )

    attach blend scene only include G3 mesh (no morph import) nad customize rig, (t do same thing I described)

    so Thomas actually test please. (At current I only set leg pole) , it should work for G8 too. if you like it,, I hope when you can find time, try to generate those bone and constrain by Script please. (btw I remove strech link bone which you set un-select ,, I do not think it need anymore if you make poles like this)

    (but as I said,, locate Pole with dsitance first please ^^; (it is most priority about MHX IK rig I hope)

  9. engetudouiti reporter

    And one more…

    You sometimes not translate pole but like to use rotation to set Knee angle as same as new rigi fy pole option (default it use axis rotation to adjust pole)

    If you generate bone as I mentioned. you can offer same option. (at same time, hide the pole cone widgt) with use KneePoleA.L (have set dump constrain and copy location), Y axis rotation (Eular)

    It offer new Pole option (as same as rigi fy pole option).

    attached blend file I hide the KneePoleA.L then you should set visible in outliner. then set rotation as Euler, and use Yrotation , you may confirm it work well.

    If you like it,, you can add it as MHX pole option with smart shape, then user can choose Pole transform or axis rotation to adjust Knee angle. as MHX option. with set driver only visible user tweak bone. (hid cone or hide the KneePoleA )

    And you can adjust the axis bone position with Copy constrain weight , and you may set lock rotation for X and Z, it may offer good UI for new pole option too..

  10. Thomas Larsson repo owner

    I increased the distances in the last commit, to 40 cm for the knee and 30 cm for the elbow. I will think about your other ideas, but they don’t seem to be high priority right now.

  11. engetudouiti reporter

    Thanks, yes anyway generate pole with distance is first priority. (I do not think you hope user everytime adjust it for rest pose,, or carefully move pole to avoid issue)

    Then I confirm (really positive) if you test the customize version, you should feel it work more better ^^

    (so even though you not enhance now, I hope you test scene please then decide you will include it or not . I did not think the way offer, rotation mode so easy,, but it already worked… you can customize, or change way how set those constrain, but basic is same I suppose.

    the good thing for rotation mode, even though user move around pole drastically without consider pivot position, it restrict pole position as circle. so it never cause issue. (not forgive user miss move pole)

  12. engetudouiti reporter

    Thomas,, I did not know you tried it today ^^; Then I made covnersion script for my study, which detect bone location more perfeclty, then set each bone. automate. After generate MHX and convert it as new pole system.

    it set pole place, and new constrain 2 bonoe, more logical space. (so when user return edit mode, it locate pefectly same place (I suppose)

    And you set pole as 30 cm,, but it is not good.. (so I get length from figure leg bone and set Pole more good place.. with use link bone length.. (I suppose the link stretch bone already keep correct rotation along with leg bone)

    The difficulity thing for me was,,some bone layer I could not up-date.. so I hide non-user pose bone. (and I believe those setting should better made by you,,, so I remain bone layer for new attached bone. but add shape from your offered GMZ

    I suppose you already did correctly, but hope to check it if you could take time, (because now you commit this issue , so I hope you make it better than which I offered as scene .

    I later check your new commit,, (so if it work same or more improved, I need not use conversion script any more but if there is something better in my conversion sicript , hope you include it in commit about this issue.

    I believe you content with new way. (it offer non flip and always reasonable good pose with IK )

    About hand,, even though I use current rig, I do not think,, it cause heavy issue, then remain it as same as before. (not add new constrain bones for this conversion script)

    but if same way work for hand too, of course I apreciate it too.

    import bpy
    from mathutils import Vector
    
    rig = bpy.context.object
    defmode = rig.mode
    bpy.ops.object.mode_set(mode='OBJECT')
    rig.data.layers_protected[22] = False
    rig.data.layers_protected[31] = False
    bpy.ops.object.mode_set(mode='EDIT')
    ebones = rig.data.edit_bones
    
    klr = ebones["knee.link.R"]
    kll = ebones["knee.link.L"]
    kpr = ebones["knee.pt.ik.R"]
    kpl = ebones["knee.pt.ik.L"]
    
    ctail = Vector(klr.tail)
    print(ctail)
    klr.length = ebones["thigh.R"].length * 1.2
    ntail = Vector(klr.tail)
    vec = ntail - ctail
    kpr.translate(vec)
    
    ctail = Vector(kll.tail)
    kll.length = ebones["thigh.L"].length * 1.2
    ntail = Vector(kll.tail)
    vec = ntail - ctail
    kpl.translate(vec)
    
    spl = ebones["thigh.L"].head
    mpl = ebones["thigh.L"].tail
    epl = ebones["shin.L"].tail
    
    spr = ebones["thigh.R"].head
    mpr = ebones["thigh.R"].tail
    epr = ebones["shin.R"].tail
    
    pal = ebones.new("ikPoleAtest.L")
    pal.head = spl
    pal.tail = mpl
    pal.length  = ebones["legSocket.L"].length
    pal.parent = ebones["legSocket.L"]
    pal.use_local_location = True
    pal.use_inherit_rotation = True
    
    ipl = ebones.new("ikPolePtest.L")
    ipl.head = pal.head
    ipl.tail = pal.tail
    ipl.roll = pal.roll
    ipl.parent = ebones["hip"]
    ipl.use_local_location = True
    ipl.use_inherit_rotation = True
    
    vecl = epl - spl
    lweight = (mpl - spl).z/(epl - spl).z
    lweight = round(lweight, 5)
    ipl.translate(lweight * vecl)
    
    kpl.parent = ipl
    
    par = ebones.new("ikPoleAtest.R")
    par.head = spr
    par.tail = mpr
    par.length  = ebones["legSocket.R"].length
    par.parent = ebones["legSocket.R"]
    par.use_local_location = True
    par.use_inherit_rotation = True
    
    ipr = ebones.new("ikPolePtest.R")
    ipr.head = par.head
    ipr.tail = par.tail
    ipr.roll = par.roll
    ipl.parent = ebones["hip"]
    ipr.use_local_location = True
    ipr.use_inherit_rotation = True
    
    vecr = epr - spr
    print(vecr)
    rweight = (mpr - spr).z/(epr - spr).z
    rweight = round(rweight, 5)
    ipr.translate(rweight * vecr)
    
    kpr.parent = ipr
    
    bpy.ops.object.mode_set(mode='POSE')
    pbones = rig.pose.bones
    ppal = pbones["ikPoleAtest.L"]
    ppar = pbones["ikPoleAtest.R"]
    pipl = pbones["ikPolePtest.L"]
    pipr = pbones["ikPolePtest.R"]
    lkl = pbones["knee.link.L"]
    lkr = pbones["knee.link.R"]
    
    csns = ppal.constraints
    dpt = csns.new("DAMPED_TRACK")
    dpt.target = rig
    dpt.subtarget = "ankle.ik.L"
    dpt.track_axis = "TRACK_Y"
    
    cl = csns.new("COPY_LOCATION")
    cl.target = rig
    cl.subtarget = "ankle.ik.L"
    cl.influence = lweight
    
    csns = ppar.constraints
    dpt = csns.new("DAMPED_TRACK")
    dpt.target = rig
    dpt.subtarget = "ankle.ik.R"
    dpt.track_axis = "TRACK_Y"
    
    cl = csns.new("COPY_LOCATION")
    cl.target = rig
    cl.subtarget = "ankle.ik.R"
    cl.influence = rweight
    
    csns = pipl.constraints
    ct = csns.new("COPY_TRANSFORMS")
    ct.target = rig
    ct.subtarget = "ikPoleAtest.L"
    
    pipl.bone.hide = True
    
    csns = pipr.constraints
    ct = csns.new("COPY_TRANSFORMS")
    ct.target = rig
    ct.subtarget = "ikPoleAtest.R"
    
    pipr.bone.hide = True
    
    csns = lkl.constraints
    csns.remove(csns[0])
    srt = csns.new("STRETCH_TO")
    srt.target = rig
    srt.subtarget = "knee.pt.ik.L"
    
    csns = lkr.constraints
    csns.remove(csns[0])
    srt = csns.new("STRETCH_TO")
    srt.target = rig
    srt.subtarget = "knee.pt.ik.R"
    
    ppal.custom_shape = bpy.data.objects["GZM_Ball025"]
    ppar.custom_shape = bpy.data.objects["GZM_Ball025"]
    
    ppal.rotation_mode = "YZX"
    ppal.lock_location[0] = True
    ppal.lock_location[1] = True
    ppal.lock_location[2] = True
    ppal.lock_rotation[0] = True
    ppal.lock_rotation[2] = True
    ppal.lock_scale[0] = True
    ppal.lock_scale[1] = True
    ppal.lock_scale[2] = True
    
    ppar.rotation_mode = "YZX"
    
    ppar.lock_location[0] = True
    ppar.lock_location[1] = True
    ppar.lock_location[2] = True
    ppar.lock_rotation[0] = True
    ppar.lock_rotation[2] = True
    ppar.lock_scale[0] = True
    ppar.lock_scale[1] = True
    ppar.lock_scale[2] = True
    

  13. engetudouiti reporter

    And one thing, you offered parent options for IK pole, actually it should be useful but it should not be offered generate option..

    the option need ,after you offer reasonable (non flip IK) IK rig which follow knee position, then when posing, user change pole parent flexible, (so basically user should use pole parented by knee with constrain then, when user hope to pose foot only,, (not hope to move pole with foot or reverse toes IK foot bones rotation,) , they may change pole parent to Hip temporally… so pole can keep the place. after that user change pole parent to knee again… (though I do not test those with new pole system but basically it may work I suppose,,,)

    I may request, it if you can make it work easy,, (change pole target parent to HIp temporally, then return to default.) in pose mode, as MHX new property (UI button,,,)

    but untill I request it,, we need default reasonable option, which user content with IK posing.. (so I said, parent to Hip or to Master etc is un-useful.. it is only need as posing option which can enhance it never used as default opton for IK Pole.. )

  14. engetudouiti reporter

    Yes I suppose, if we change parent of pole in posing, for new Knee target bone to hip etc, it change current pose.

    I think to make it work without change current posing,, we may need more complex thing. If we can use the way what Alessandro link add on do, and it work with new constrain pole, it may need to consider.

    Though basically this new pole system work really well (I do not hope to return it anymore for usuall parent with Foot or Hip or Root what add on offered untill new commit) , and if we need to change foot angle,,,,change to FK then rotate foot is usuall way.

    But as future enhancement, it can be consider..

    though now I do not think, it have priority than other bug or enhancemen. If Thomas interesting it, (change parent dinamically without change posing for pole), of course I hope to test it . I may hope more tweaking, to exchange rotaion option and use pole transform.

    (may only need to hide , un hide some bones, and widgt , with rotation mode we not keep to show pole. but need to rotate constain target with Y axis and YZX euler mode. (my script set it already so but not have switch to bone visible or hide)

  15. engetudouiti reporter

    Thomas I test new commit, it actually do what I suggested with blend.file, then thank you.

    at same time actually there seems some pose which I feel somehow wrong.

    Then the reason is, what I suggested way, not set ikPoleA.R rotation (end point) accurately when generate bone. My conversion script correct it, and try to generate ikPoleP pefect position. (real center of the line with count joint position).

    so if import character leg slightly bend, it locate ikPoleP and ikpoleA best place. with auto set constrain influence. And I feel you may better set pole slightly far from current position, I locate it, by ebones["thigh.R"].length * 1.2 . then transform pole on to the postion.

    you may see the difference, when we move to up ik foot.. current add on rig, rotate it drastically, with some postion. like this pic.

    To test these,

    1. load G3 and convert MHX then from side view make this postion (only move Y and Z axis IK foot)

    next from front view, (to clear see thigh rotation,) move IK foot to up , you may see huge rotation about thign bone.

    on same blend file, add new scene. then load G3 and convert mhx. after that delete new added 4 bones ikPoleA and ikPoleP

    then select rig run my attached script.. it auto adjust pole and add new ikPoletestA and ikpoletestP. then do same thing.

    Though I can not detect what cause difference, but maybe the pole default position and how generate consrain bones (ikpoleA and ikpoleP) cause this difference. so hope you actually run script after remove 4 ikpoleA and ikpoleP from current MHX generate bone, and

    free move foot IK anc check it. (rotate , and transform as you need for every anglle, you may not see any huge rotation any more)

  16. engetudouiti reporter

    after generate MHX rig, with add on, remove 4 bones for foot ik, kneePoleA and kneePoleP (R and L), then select rig , run script please. it covnert kneePoleA and kneePoleP to kneeTestPoleA and kneeTest poleP (r and l), then auto adjust pole for rest pose. you may see more better posing with Foot IK move

  17. engetudouiti reporter

    I could find clear problem.. you do not use copy transform for the kneePoleP follow kneePoleA, but use copy Location.

    so it only set bone head postion, then not adjust angle. and not locate pole as it should be.

    Then remove copy location from KneePoleP but add copy transform then set target as kneePoleA, now it correct bad posing, (and auto locate pole correctly)

    This is the main reason why it not work with some posing. so if you correct it , basically work.

    Though there remain a few improvement about my conversion script, (auto set Pole postion more stircitly from imported rig leg and joint) but only change constrain, as I described,,,it should work better. at least current way not locate pole what I expect.. (because parent bone not along with the 2 joint line)

  18. engetudouiti reporter

    And one more thing I hope you change is,, as you know it already offer rotation mode (not move pole target bone but rotate constrain bone of parent ) as same as rigi-fy pole toggle option.

    though I did not like much the mode before, but after check those issue, I understand, rotation mode can use more strict animation to adjust elbow and knee angle without use un-necessary transform for pole target.

    So even though you do not offer mode toggle option, but show elbowPoleA and kneePOleA R and L 4 bone to rotate and adjust knee is useful. At current you do not set those bones as IK hand layer, so basically user can not rotate the bones. (they are hidden)

    To work it better,,,, change those 4 bone layer (and bone group for UI layer) and keep it visible, when user use IK mode for each limb,

    then set bone rotation mode as Euler YZX only about those 4 bones.. (it actually need not to set as quartanion I suppose) because it only rotate around Y axis always. then lock all transform , X roate, Z, rotate. but only un-lock Y rotation.

    Then user select “poleA” bones, >> “R” “R” tap, can free rotate those PoleA bones. to adjust pole. or can use rotation widgt with local orientation . (or directly input Y rotation value and key etc) (about real parent bone “poleP” need not visible always)

    Recent MHX always set armature DIsplay as wire, (I actually do not like it when I need to edit or check rig it is really difficult to select the bone.. ) so I hope you will add one of Shape for those 4 bones. (I may prefer use the joint sphere small shape, or circle. etc for poleA bones I feel knuckle shape which used for finger rotation is good, but I need to set direction again,,,,,to show user rotation direction.

    (then user can easy select and rotate it, when they hope to use rotation to set pole. I think, of course they can still move pole target as same as before.. it only depend each user favor.

  19. engetudouiti reporter

    Thomas commit 7b52f9c change length 1.2 multiple thanks.. but it still not correctly set up constrain for XXXXpoleP.R and L

    As I said you use copy location to constrain PoleP to PoleA , so PoleP only follow loation without change bone angle.

    PoleP head and tail need to locate on same world place as PoleA.

    Then it cause clear issue, with some angle. When you just transform Foot IK near the hip .

    you may see strange twist (as if knee suddenly turn direction) happen.

    If you change Copy location to Copy transform, for PoleP constrain, the problem has gone away. because PoleP head and tail locate on PoleA, so child Pole target follow the dirction.

    you may better check how PoleA , PoleB , head tail, and Ik Pole target move around with move foot IK to understand why it is wrong.

    This pic is only Copy Location active. you know, PoleP only follow the PoleA postion. then IK pole locate like this (cause issue)

    with current setting if you rotate PoleA with local Y axis, you now see Pole target turn around correctly. So You may do not think, rotation mode work at all.

    But if I activate “Copy Transform” then disable “Copy location), now PoleP head and tail on to PoleA . then IK pole move with PoleP so it work correctly. (Pole P rotate along with Pole A direction, then IK pole follow it) and you can trun around Pole by PoleA local Y axis rotation.

    Same thing happen G8 , G3. you may need it for elbowPoleP bones too. (remove Copy location but add Copy transform for PoleP)

  20. Alessandro Padovani

    @Thomas Larsson As a personal note, from an animator point of view, a rig with dynamic parenting for hands and feet would be interesting. I mean, we could parent the hands to the root if we need them fixed, as a figure standing up with hands on a table for example. Or parent the hands to the torso for a figure dancing where he/she rotates the torso and the hands follow. Not to talk about grabbing something that’s the obvious use. It would be much easier for animation.

    Then, always as a personal note, and I do understand that different people may have different needs. I don’t get this “ultimate quest for the perfect poles position”. I mean we do have to pose and animate the poles anyway, so what’s the matter ?

  21. Thomas Larsson repo owner

    Changed constraint to copy transform in last commit. Since a cone is used as the custom shape, I thought that it would be nice if its orientation had a meaning. With a copy location constraint the tip always points away from the knee, but with copy transform the orientation is more random. But no big deal.

  22. Thomas Larsson repo owner

    Dynamic parenting is usually done with the childof constraint, but I try to stay away from that since it behaves strangely imo. But I don’t think that it is meant for pole targets.

  23. engetudouiti reporter

    So from animaator point or non animator point, at current Thomas you still not try to make the rig what I suggested.

    I said with pic etc, As I said you use copy location to constrain PoleP to PoleA = wrong way

    Then you need to change Pole P constain, as copy transform.

    And I do not say, chaneg PoleA constrain way. I use dump and coply location for PoleA no need to change it as copy transform.(actually do not need or cause issue I feel)

    Though if your customize work better, what I said, it is not problem. and if it work same, I may not need tto ask again. but it not.

    Untill you start to modify something please just follow what I asked you. at least about constrain. So it work good.

    And I strongly recommend, to check those easy,, keep visiblity of armature bone as stick then actually show poleA and poleP with IK mode layer. You try to hide them, then it not clear show what is wrong. because if you test so, you should easy understand it cause problem.

    1 . for PoleP bone, set Copy Transform consrain Target bone = PoleA bone.

    2. For PoleA bone set Damped Track (target bone = ankle.ik ) and Copy Location ( Target bone = ankle IK). The influence should be circulated by length. (you seems already do it correctly)

    3 . please keep it visible the PoleA.bone (I rotate it as local Y aixs,) with IK mode.

    When I confrim those 3 I can close this topic as solved. all 3 have clear meaning why it need. about 1 and 2, without you set so, it not work.

    Then same pose auto corrected like this

  24. Alessandro Padovani

    Thomas thank you for your reply, I did some tests myself with “child of” and I agree it’s somewhat hard to control. I’ll let you know if I find a way. It would be nice to have this in animation.

  25. Thomas Larsson repo owner

    Oops, I changed the wrong copy location into copy transform. This time I changed the right constraint, the one for PoleP.

    The PoleA bones are shown on the IK layers now. However, I’m not sure how useful they are; they control the rotation of the elbows and knees, but the pole targets do that too. So they don’t really add any functionality to the rig.

  26. Alessandro Padovani

    Engetudouiti I owe you an apology. Just tested the new rig in commit c4fd9ad and there’s some magic there. I usually don’t like “smart” poles since I want to control them myself, but your system seems to work very good. Thank you.

  27. engetudouiti reporter

    I do not hope to exaggerate this issue, but I feel. MHX IK rig finally offer stable IK posing for 4 limbs as true meaning.

    Then as Thomas said “move pole target X Y Z”, or “rotate the constarin axis bone with Y” axis ,it offer same function (just set knee direction with IK chain) .

    but if I set key “rotation the axis bone with Y axis only” need only one channel. and the value range are clear -180 to 180 for me. on the other hand, if move pole target around to get knee direction, you know the transform value range have no limit,, to quick pose, I actually did not like the rig-fy default rotation way, but to set key or adjust curve , I think use roll Y axis value may better than use 3 X Y Z tansform channel value (almost no range)

    if I only use the rotation,, pole target position everytime locate with same radius circle from the controll bone. so if user not hope to move around pole free, the rotation mode is good option to adjust knee I think. (we can imagine the circle which knee rotate along with easy)

    Then to use rotation flexible, I set X, Y, rotation, X, Y, Z transform and scale locked. then may set reasonable shape. (and hide the pole target cone)

    After all as I said it is perfectly depend user, so offer both option then user may choose their like way.. some one never use rotate , some one may stop to use grab and move IK target to adjust knee I feel. Now I can close this request as solved thanks.

  28. Alessandro Padovani

    As for poles vs bone rotation, it’s different keyframes in animation. Usually I select all and keyframe a pose, that I can later shift in the timeline for timing. So keyframing poles is easier. But I agree it depends on the user.

  29. engetudouiti reporter

    Thomas about arm, you miss parent new elbow bones

    elbowpoleP (R/L) should parent with hip or other non IK chain bones. after I change parent to hip now it work correctly (you parent it with another IK bones)

    but after I set so, when I transform hand IK bone, not work correctly. Did you change something around hand IK chain?

    I did not test with hand IK , but it need to test again.

    ===

    hmmmm,, it is strange,, I just convert to mhx but this time same def G3 to test bake IK animation.., I do not see strange issue. (I change parent to hip, it work without problem though, so actually do not know if it need or not)

    maybe I over position of knee pole,, when I stretch pose,,, or something happened but I do not know what cause this problem.. only difference is with first test I import JCM s,, (with easy mode), .. so if it related with this issue..

    or I move the elbowpoleA without intention,, (it should not move, rotate only..) ..

    If you later re-check MHX rig, I request, lock location for elbowpoleA (it only used for user who rotate the bone to set pole. as same as Rig fy default). So I never miss transform the rot only bone .

  30. Log in to comment