Home Technical Talk

3ds Max Rigs:: Wire Parameters offset and Constraint conflicts

polycounter lvl 18
Offline / Send Message
oXYnary polycounter lvl 18
I have a biped upper arm in a master rig. I have a sub rig where the x and y rotation are separate bones (mechanical). Since bipeds wire parameters aren't really exposed AFAIK, I have a dummy object that I wired the x and y axis of these sub-objects to (works fine). Now, I attempt to orient constrain this dummy to the biped. It now moves with the biped, but has lost its wired ability to move the 2 sub rig bones.

Master Rig>>Dummy>>SubRig X n Y bone.

What is the solution to allow this since I think its having a conflict in the dummy being "the middle man" as it were. I did attempt to assign a XYZ Euler to the BipRotationlist on the biped in an attempt to bypass the dummy, however, the x/y bones will not react when I attempt to wire direct.


I also am running into this:
Per this thread:
http://forums.cgsociety.org/archive/index.php/t-892653.html
Under the "expression for <object>" box of the wire parameter where X_position (or whatever) is listed I just corrected the offset in this context:
X_Position-1.65 (or +300 or whatever)
press update and voila.

Where do I find this number to put in? I tried it a few times, but it didn't seem to match what Expose Transform gave.

Replies

  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    always freeze transformation before wiring something, that will prevent the object from moving ( unless you ask it to)

    regarding the offset conflict, ... they dont really conflict the last constraint overide the previous.

    WHy do you need a wire and a constraint at the same time? can't you do it all at 1 times using a different setup? It seems like you're overthinking it ;)
    cant you have something like: have middle dummy to control the pos
    another middle dummy to control the rotation
    and finally a dummy constrained to those 2.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ill try the freeze transform for the offset. For the dummy though, I think there may be a misundertstanding. I have to control the axis rotation individually. Hence the wire. The issue arises that the constraint rotation to the biped no longer allows the wire parameter on the dummy to the sub rigs specific one axis rotation for each bone function. Position constraint isnt the issue, I can control that with a simple link.


    I cant bypass the dummy because bipeds wiring ability is limited at best.
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    Sorry but i still cant fully understand, cant you post screenshot with some annotations

    From what I understand ....Expose TM should give you what you need

    Why do you need a wire ? Cant you use a rotation script or just parenting stuff ?
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I guess the confusion is I am dealing with 2 separate issues.

    Per the Transform Expose. Thats the thing, the listing it has does not correlate to fixing the offset if I plug in the numbers to the wire parameters from the other thread I linked. I also attempted freeze transform, and when I attempted to reset to frozen original transform, nothing would happen if It was constrained to something else.

    I digress though. First things first. This is the most important part.

    samplesetup.jpg

    Why am I not directly connecting the lowest rig to the biped? I need to retain the local xyz rotations versus them locking to the bipeds. So I thought I had to use an intermediate step of a mid mesh so I can wire to individual axis and keep local rotation directions.

    But, I have just realized I cannot. It goes into the main issue with my dummy object. Wire parameters break or do not work if I have a constrainted position, orientation, link, or a skined mesh object, the wire parameters breaks!

    I know it has something to do with the Motion Transform Rotation layering system, but I tried putting a xyz euler below the constraint with wire parameters, and it still doesn't work.

    Basically to boil it all down, think of a Universal joint. My dummy is the controller for that joint. I need my dummy now to be controlled by the master biped and keep the wire parameters to the rig.

    motiontab.gif
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    Alright, 1 more question.

    Are you trying to link the biped to the rig ? Like have the l_arm_help control the orientation of the biped arm?
    if so ? Why exactly do you need to do this?

    After a quick look it seems like you imported an FBX from another software... what is the fbx skeleton for?
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    hmm what you want to achieve is to constraint l_shoulder_y to the biped while keeping l_shoulder_y local axis orientatione ?
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Yes. And it can move in y axis, while xbone only moves in x (hence wire). No fbx. Mesh rig is made from linked dmmies. No way I could create linked bones and have their local axis follow very specific angles and pivot orientation. In any case I would still have wire conflict afaik.

    I you mean slave biped, that is simply a snapshot mesh of actual bip.

    Per why I need to do this, as upper arm in real rig is two bones in exact same spot. 1 controls x and 1 controls y. This is like a universal joint versus ball joint.
  • Mark Dygert
    Options
    Offline / Send Message
    I would throw biped out the window and create a rig from scratch. Is there some specific reason you need a biped? It's not friendly to wiring and constraints, it does what it does and that's about it.

    A universal joint is pretty easy to setup, but it can get pretty complex if you want to introduce IK/FK switching or start driving its rotation/bending through the actions of other bones.

    CAT is a little more open to this type of customization but it's still horribly buggy and I don't trust it for production use.

    I really don't understand the end goal all that well so it's hard to say how the rigging should go...
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Thats in part why I am using a biped master so I can get an ik/fk with this setup. Becausr of that though is why I have to use the mid snapshot rig to capture the bips movements and have its wire parameters open.

    Cat actually was corrupting my files so bad, max would crash trying to even open one through the merge function.
  • monster
    Options
    Offline / Send Message
    monster polycounter
    You're goal doesn't sound complex. Is this similar to what you want to do? I just used a couple of look at constraints.

    https://dl.dropboxusercontent.com/u/2904948/Tutorials/ArmRig.max
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I dont belive so. I could be wrong. I have modded your file to give a basic setup of what I have now (minus slave mesh). I need shoulderhelper to get its rotational information from the bips while keeping its original offset and still have its own x and y axis inform two different bones each axis individually.

    (If you rotate the shoulder helper manually right now you will see what I am after)

    http://207.246.157.76/ArmRig03.zip

    Edit: Forgot to upload file. Fixed.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I think I just figured it out.

    Mr.Fred, you were correct about the Expose Transform. I didn't realize you could wire through it. I thought it was just to list variables.

    Thanks for your suggestion.

    Though still unsure how to make up for offsets. - or + the Expose Transform number for the local rotation doesn't align it back to 0.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Hrm. Its still not right. How do I keep the local rotation of a wired or constrained object? As in y might be at a 45 degree angle on the master, while the y on the bone is 90 degrees. Also not at the same exact pivot spot in the world. So it doesn't use the local axis of the master object (bip) overwriting the local axis of the constrained.
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    I dont think you'll manage to get a working rig with the biped if you want to achieve this effect. I'm mostly concerned that I you manage to get it right it might not work with the IK FK system of the biped

    Your best bet is to go full custom
  • monster
    Options
    Offline / Send Message
    monster polycounter
    Forgive me, but there is something confusing me about the way you explain this stuff. From the screenshot you posted, I never would have imagined the Max file you shared.

    But to answer your questions specifically.
    oXYnary wrote: »
    How do I keep the local rotation of a wired or constrained object? As in y might be at a 45 degree angle on the master, while the y on the bone is 90 degrees.

    Your question is a little ambiguous. Do you want the Bone Y to never rotate, or to just keep it's offset in relation to the Master.

    If you just want to keep the offset there are a few ways. For constrained objects you can use "Keep Initial Offset." For wired objects you can adjust the expression to add in the offset. And for either type if you are using a list controller, just add another Euler XYZ controller at the end, and set it's rotation.

    If you want it to never rotate. I would use a single bone IK chain with a swivel target, or a look at constraint with an upnode.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I want it to rotate. In y only for ybone and x for xbone.. But I want it to respect the local y axis. The orientation offset (which I still have not figured out where I get the correct numerical data - tran exp euler info doesnt seem to be it). Also the check box just resets the bone back to its original offset. Its still seemingly using the master bones local axis rotation versus its own.

    Im having this issue now using trans exp with the dummy constrained oriented to upper bip arm. The y bone wired to the trans exp getting its info from the dummy will only raise the y bone 90 degrees+- fromits original position, then start going in the opposite direction from the bip rig until it meets it again at the other side. In short I am only getting 180 of correct movement.

    With a custom rig, I still need another rig with the ik seemngly. I attempted a hi rig from shoulder to elbow. Locked the axis for those two bones under hierarchy ik tab. Y would work, X wouldnt respond in x rotation.

    I am going to try next using a variation of your idea monster and have the dummy look at the elbow joint, and using trans exp wire my two bones through there. Not sure it will make a difference as the local euler rotational info the trans exp uses should still be the same as if I used a orientation constraint
  • monster
    Options
    Offline / Send Message
    monster polycounter
    Maybe you can try and HD Ik chain. It works well for mechanical joints. In this example grab the brown box, and move it around. The shoulder and upper arm joints have their axis disabled in the Hierarchy Panel > IK.

    https://dl.dropboxusercontent.com/u/2904948/Tutorials/ArmRigIK_HD.max
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I realized I had forgotten a rotational joint for the shoulder. So I had to go back and redo a portion. I am back now to attempting to rig. This time just going with a custom rig versus attempting the biped bit.

    However, I'm still getting stuck in some areas that I can seem to find the right search engine keyword for.

    So here are some more Q's

    Is there a way to keep the offset of a HI chain of the end bone? It will shoot the IK chain to the 0up axis if I attempt both bones (described originally above, again think universal joint) in the swivel joint of the thigh/femur.
    OR
    Is there a way with a HD Ik chain to expose the Ik goals as separate items in the scene? They seem locked into the bones.

    Edit per Hd, I think I figured it out.. Not sure will see. I use a dummy object as a end effector, which effectively acts as an IK goal.

    Edit: edit: I guess not. The effectors have to be somehow adjusted to slide and move along the joint to mimick a HI Goal., which I guess Im lost at.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok I have spent the last two days on this particular problem and cant come up with a solution. I am attempting to create a helper system for this custom rig. The tutorials I found assume a HI IK. Unfortunately while I can get a HI IK to work as a separate IK chain with the other bones attached, it cannot interpret the wire parameters correctly.

    I tried a pure HD chain, and used end effectors to attempt to get IK goals. However, they don't act the same as the Hi version, and thus the helpers do not work correctly.

    wackytaffy.jpg

    Here is a reference file.
    http://207.246.157.76/fubar.zip

    (Also all 3 axis for femur are separate.
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    I'm not sure what you're trying to do with wire but might have to do some math last time I scripted something that was depending on an Ik setup I had to do some trigonemetry to get the right angle and rotation. Maybe this was based on my setup at that time, never redid something like that since then. Maybe someone can either confirm or claim that it's a total bullshit :P

    Again maybe you need to do that with wire
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I never got pass algebra...

    Second option would make the end effectors of a HD rig act the same as a Hi IK goal. Per the HD rig works perfectly, on the actual rig versus above with using another IK'ed rig.

    Pass, not passed.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    This is the best I can do with HD with its end effectors. The helper objects do not work right since they normally rely on HI Ik goals.
    http://207.246.157.76/fubarHD.zip


    The rigging for this is from such:
    [ame="http://www.youtube.com/watch?v=OLSgqD-JWzk&quot;]Rigging the Character - Part 2 - Foot Hierarchical Links - YouTube[/ame]

    All the issues I have are because I have the X Y and Z controlled by separate bones for the femur/thigh movement.

    I can't get any further on this without a good direction. No one in hangouts uses Max to animate normally, soo.. yea. :/
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    I r eally dont want to spund arrogant or a jerk, but the way I see it is that you try to achieve something complex but lacks the tool to do it.
    Based pn what I know you either have to learn advanced rigging concept, which might include math ...or...
    You try to keep the rig as simple as possible and ask the animator to animate it the other way.
  • monster
    Options
    Offline / Send Message
    monster polycounter
    https://dl.dropboxusercontent.com/u/2904948/Tutorials/fubar01.max

    The trick isn't to rig one system that can do everything. It's to layer objects on top of the rig that isolate single axes. I didn't use anything complex, just look at constraints and HI solvers.

    This example isn't perfect. If I had more time I could probably come up with something better. And it's a little wobbly because the original dummies don't point to the next bone and are not in alignment.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Thanks Monster and Mrfred. I attempted to mimic your rig, and I must have missed an attachment somewhere, or a pivot axis I should have kept in 00 world space I instead rotated locally.

    Anyhow here is what I have. Tried to make it easy to follow. I didn't worry about hand/foot, as those are separate IK chains and work perfectly. Its just that damn shoulder/thigh.

    http://207.246.157.76/fubar01w.max


    (Also thanks for your patience)
  • monster
    Options
    Offline / Send Message
    monster polycounter
    You need to set the UpNode of the "Y LookAt Elbow" object in the LookAt Constraint Options rollout. On the leg the name of the Upnode is ThighController.

    By default the Z axis will try to point up. Notice in the GIF how in the No Upnode setup the Z axis twists to point up. In the Upnode setup I set the Y axis to point to the circle Controller.

    https://dl.dropboxusercontent.com/u/2904948/Tutorials/fubar01w.max

    Upnode.gif
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok, I see what you did. Honestly the amount of nesting has got me slightly confused, but following your specs has gotten the results I needed. So I was able to get past this hurdle.

    Thank you very much Monster.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok, I am almost done! This thread has taught me so much. So here is what I got and the two things I have yet to figure out.

    I am doing a FK/Ik mix on the arm per [ame="http://www.youtube.com/watch?v=j8UVIsjskE0&quot;]Rigging the Character - Part 12 - Arms Blending IK/FK - YouTube[/ame]

    The issue is, and maybe its unsolvable using the 50/50 constraint. The lower arm gets out of alignment. The only thing I can think of that might work would be a lookat? While deleting the 50/50 constraints. Issue is Im not quite sure which bone to do this with. Possibly the arm twist, but from some tests I did, it would align to the upperarm, the wrist would still be off set. I attempted one with the pink pivot on the left side (facing back, engine imports weird).


    heh.jpg


    The other one is I am trying to make a reaction controller for a Boolean. Namely,turning the elbows constraint on/off on the IK goal to choose from it and the swivel. I have a parameter set up already on the left side (again facing back). However, I see no direct way of getting the reaction manager to do 0/1. How do I plug into that Boolean operation on the IK goal via a parameter editor checkbox?

    http://207.246.157.76/almostreal.zip (Max2010 format)
  • Mrfred
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Not sure I follow. I tried the script on the page you sent, and it does create a box that averages between the three points..

    So, to translate, do I create a point at the axis of each fk and Ik joint? Then make them children of that joint. With the third point orientation and position constrained to those two 50/50? Then constrain the bone in question to that box?
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    You can use this code to place the ik elbow upnode in the right angle / spot when switching. Using to normalize part and the matrix part will give you a transform matrix. Use it to place the upnode target
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Maybe we are talking past one another.

    Are you speaking about this? "IK_l_arm_elbow_control". Thats only being used as a swivel goal. Which I was just trying to figure out how to turn on/off that boolean in its options through parameters.

    Or do you mean with IK elbow upnode, making on the slave rig thats looking 50/50 between the IK/FK (hidden behind the boxmeshes above), a lookat on the upper arms swivel (the joint right before the elbow - just called Bone004 for now). Have it look at its upper arm joint (since you mention the upnode is on the elbow), then having this node being a lookat node target?

    Is that correct? Then where do I put the points from the script since it calls for three. Attach one to the FK elbow, one to the IK elbow. While the third is put??? Then using the plane the script creates as the lookat node for the upperarm twist on the slave mesh?

    This would bring up an issue though, I have if you look at my IK control for the arm, a Reaction Manager to make the slave rigs percentile between the FK/IK change for the whole arm. How would I get this lookat node (if above is correct) to also change its percentile. Is that what the third point from the script you linked would be used for? It having the 50/50 constraint.

    EDIT: Just attempted what I described above and it didn't work. Also think I found a bug with that transform script. If you make it a constraint or lookat for any other object, it starts moving in space versus local coordinates. As best probably would nee a expose transform on it to another object, but even then you would be limited to 180 degrees for the wiring.
  • Mrfred
    Options
    Offline / Send Message
    Mrfred polycounter lvl 4
    Cant check your file my comp is broken, but the point are your fk control....
  • monster
    Options
    Offline / Send Message
    monster polycounter
    So the usual way I would fix this is to set the Orientation constraint's Transform Rule to Local > Local. However, this won't work for your model because there is an offset (the constrained bones have +X point to the next joint, and the FK and IK bones use -Z) so you are using "Keep Initial Offset".

    I was able to fix it by adding a couple of point objects that have the same starting orientation as the constrained bone. Then calculating the interpolation between them in the parent space of your previous target joints, using a rotation script instead of an orientation constraint. Sorry I know that's a mouthful, but here's the file. Check out the rotation script.

    https://dl.dropboxusercontent.com/u/2904948/Tutorials/almostreal01.max

    Another example, here is a file that has the problem your having in the center, and the Local > Local fix on the left, and the rotation script fix on the right.
    https://dl.dropboxusercontent.com/u/2904948/Tutorials/ArmTwists.max
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    Thanks Monster for taking the time, I finally got back to it today. Unfortunately your script locked the twist to the upper arm, versus twisting in union with the elbow. I have enough controls that I can just do a 1 to 1 between the IK and FK and not worry about percentages, was just trying to offer as much functionality as I could for animation controls.
  • oXYnary
    Options
    Offline / Send Message
    oXYnary polycounter lvl 18
    I started finally animating and realized I forgot the squash n stretch movement for the neck/head (think spring). The issue is the head twists, the neck does not.

    So in other words I need a squash controller starting from the head, but have the twisting motion as a separate controller.

    sns.jpg


    First Rig: Green Dummies and the purple spline (captures orientation with separate head twist)
    Second Rig: The Orange points (captures position for Z, uses first rigs splines to give the squash controller a path.)

    The issue is that I cant get them to line up. Yes, I could make a third rig and try to do a average between the two rigs, but rather would like to see if possible to have the second rigs path conform to the first while still having the squash in stretch controller.

    Rig example:
    http://207.246.157.76/headtwistnsquash.zip
Sign In or Register to comment.