Home Technical Talk

Still Confused. Shoulder Details

polycounter lvl 18
Offline / Send Message
oXYnary polycounter lvl 18
Ok so its starts in this thread:

shouldertry2.png

My questions after all of that is this.

1. Rick I had a helper bone on the shoulder already (see attached picture). Did you want a twist bone specific for the clavicle alone? Or that I should use the twist bone instead of the helper.

If so to either for the clavicle twist. How do I constrain the rotation to 1 axis per making a "twist bone"? I cannot find a way to make a rotation link without it accessing all three axis.

2. Per Professor talking about wrong placement of edge loops for correct joint collapsing. Can someone give me a better idea of what he meant? I honestly couldn't understand what he was specifically saying (if that make me stupid, so be it). A visual overlay would work best to make it click.

Replies

  • animatr
    Offline / Send Message
    animatr polycounter lvl 18
    the edge loops look fine i think. i've had to deal with worse at work.
    the bone placement looks fine.

    for helper bones, this is the setup i use (maya speak)

    -on my upper arm bone(the one you have highlighted in the pic), i have another bone right on top, with the same orientation and everything. and I call it upperArm_Xcontrol.
    because, it will be the bone that takes the x rots.
    as far as contraining in max, it's been too long and i can't help.
    as far as the expression for the xcontrol (This is MEL mind you):
    "L_Armu_XControl.rotateX =-1*(L_Armu.rotateX)"

    so, hope that helps. sorry, it's been years since I've been in max.
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    I have two twists/rolls, but thats just how I do it and doesn't make it any better or worse than other solutions.

    Both my twists effectively clones of their parent, taking the same position and almost the same rotation as the parent -the only change is a modification to the X axis on both.

    I have a twist on the upperarm which takes only 50% of the X rotation of the upperarm. This creates a dead zone at the top of the arm.

    I have a twist on the clavicle that ALSO takes 50% of the upperarm rotation. This means that as the clavicle moves around in space, it inherits a little bit of arm rolling. THis is NOT the same as skinning to the upper arm, becuase it's only taking the rolling motion in one axis. Get it? If I had blended in the arm onto the clavicle, then if I raise the arm more than the clavicle (you shouldn't do this, but animators often will), then you get a dip where the arm weighting is pushing the mesh downwards into the chest.

    The other benefit that I have found with having these roll bones is that you can skin the non twist bones to have a hard crease under the armpit and across the front of the shoulder (like the inside of an elbow or the back of the knee). This stops you mesh ballooning out too much in the lats, or collapsing when the arms are forward (like a pistol aim).

    You can then use the rollbones to soften the blending between the bones.

    It is important that you get a fairly solid skinning job UNDER the rollbones too, and use them to enhance the underlying work.
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    (New post to keep it distinct from above)

    You'll want a good test animation.

    Erik (Thermidor) has created an EXCELLENT test animation for us at work that really pushes the rig to the limits - then a wee bit beyond. It does it for every joint and joint region in the body and it's fairly anamtomically correct. By this I mean that when the arm moves into a certain position, the hand and shoulder move to compensate as well as they can.

    The body twists in it migrate through all the spine links and the neck, so you don't get unnatural body shears where one part of the spine moves too far and another not far enough.

    It was a fairly short animation, a few hundred frames, which I've appended several dozen real game animtions to - idles, walk, run, sprint, jump, climb, hang, crouch, combat etc.

    With a good test animation like this ur rigging method is pretty much as follows:

    - Apply a skin or skin wrap.
    - While in figure mode, quickly paint all the weights. You can do this in 5 to 10 minutes with some practice
    - Come out of figure mode, stepping through the join tests and adjust weighting. You'll have less to do than you think with a bit of practice. A good portion of this will be weight blending. Do a joint, then move on.
    - Get to the in game animations and refine them.

    Now, here is the rub - when you adjust weights for one pose, especially in the shoulders, you'll break some of the other poses a little, so it's an iterative process. Skin a load of shoulder poses, then so back to the first one and refine it, step through them all.

    Repeat a few times, the adjustments become minimal, but you CAN'T get them all looking correct the first time.
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok, you've gone a bit beyond where I am. Let me see if I can match up what your saying to what I'm doing.

    1. I have a twist bone in the upper arm. Currently those bones are shoing as links to make it easier to see. Is that what you are refering to with "I have a twist on the upperarm which takes only 50% of the X rotation of the upperarm. This creates a dead zone at the top of the arm.".

    2. As far as the shoulder joint itself. I was trying to give an additional twist for the clavicle (green bone). Is that what you mean by two twists?

    If so, how? I mean I cannot figure out how to make the clavicle twist only get it one axis of rotation influence from the upper arm. The only reasons the twist in the upper arm work is they were created by the biped rollout.

    3. The highlighted bone is one I mimicked from a rig Poop sent me showing how he did his. The command panel rollout is showing how that bone is constrained. That is not a twist bone as more a helper bone as per the rollout its influence is all rotations from clavicle and upper arm. <u>Is this bone necessary?</u> Or does your (Ricks) twist/roll bone suggestion for the clavicle (assuming that I can figure out how to make it roll in one direction alone) makes this helper bone obsolete?

    4. Do I need them both actually? If so, where does each influence? Since they are so close and have overlaps. With only 4 weights per bone, thats going to need very, very precise weighting. Since I will still need to add influence for the upper arm, spine, and some places the normal clavicle, neck, and even upper arm twist. Thats 6 total potentials out of only 4 choices each.

    (Animator don't talk about Maya or Mel script right now, once you do that my eyes glaze over and I curl up in a ball rocking and sucking my thumb. I have enough problems telling my right from my left. wink.gif )
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    1. Yes
    2. Yes
    3. You don't need it with my setup, but as I keep saying, that's how *I* do it. An inbetween bone that simply takes 50% of the surrounding area helps the skinner, bus doesn't overly affect the deformation ( a string of them prevents sweetie wrapper syndrome)
    .

    4. Do you need them both? As I keep saying, that's how *I* do it. That may or may not be right for you. I did explain what the function of each one was. 4 bones? Yup, same here. upper arm are has upper arm bone, upper arm twist, a little clavicle roll, no spine or neck. The arm doesn't get affected by the neck or spine.
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok, cool beans. Now I'm on track (I hope). I like your clavicle twist idea better, and its already a complicated rig with the facial stuff, so no need for two extra bones.

    The thing is though I just cant figure out how to get that bone to roll on one axis as constraining it to the upper arm effects all three. There doesn't seem to be a option on the drop down to only use one axis.
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    You need to use the wireparameters to take 50% of the X axis, but since you are using biped you need to use Expose Transform nodes.

    Yes, it's a pain.

    ET nodes basically query the bone and report back on what it's doing. So, you can't access rotations directly, you need to set up an etn for everything you want to look at.

    You can put these helpers anywhere in your scene - have a nice line of them at the feet if you want. I place them close to the joint they are reporting on, just because I do.

    I create one for each rollbone, but I suppose it would make much more sense to create one for each bone you are reporting on.

    Now, you need to point these transformation reporters at something to report on.

    Maxscript is your friend. It's very easy to link an expose transform to a biped bone. Create the node, link it with script. I taught myself the script for this because we were setting up the same rolls on a few hundred models.

    The syntax is transformNodeObject.exposenode = theBone YouNeedInfoOn

    Assuming you have created an expose transform node called eTm_RArm to spy on the right arm bone....

    $eTm_RArm.exposenode = $'Char R UpperArm'

    maybe you've made an ET called leftClavTwist?

    $leftClavTwist.exposenode = $'Char L UpperArm'


    Easy? Yes. Let's move on. (Thank you Rick, I'll buy you a pint.)

    Finished! NO. Bugger.

    All you have done at this stage is created a helper object to report your Biped bones rotations. You then need to tell you roll/twist bones what you want to do.

    This involves using the max wiring system to link constraint of one object to another. This is all doable via menus, but I've NEVER liked how max does this. Whilst dealing with dozens of models it made a lot of sense to learn how to script this, and to be honest I think the scripting is easier than the max menus.

    Lets use script to wire this shit up!

    So, your upper arm roll bone is taking half the rotation of the upper arm?

    Use the wire command (paramWire.connect), tell it where it can get the rotation from (the expose node you created and the axis you want to roll on), the rollbone you want to affect, and the thing you want to do.



    Heres an example relevant to you:

    paramWire.connect $eTm_RupArm.baseObject[#Local_Euler_X] $'R ArmRoll'.rotation.controller[#X_Rotation] "Local_Euler_X*0.5"
    paramWire.connect $eTm_RupArm.baseObject[#Local_Euler_Y] $'R ArmRoll'.rotation.controller[#Y_Rotation] "Local_Euler_Y"
    paramWire.connect $eTm_RupArm.baseObject[#Local_Euler_Z] $'R ArmRoll'.rotation.controller[#Z_Rotation] "Local_Euler_Z"


    See?

    I told it that my rollbone for the right arm takes the same rotation in Y and Z as the right arm does, but that the X axis needs to be halved.


    Yes. Script. I write a lot of it for stuff like this. Prevents mistakes once you have several dozen models to work on.

    How do you learn it? You use the listener and the help files, and search on the interweb for stuff, and make occasional posts asking for some help. And sometimes you ask the tools programmers at work.
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    Edited above for loads more info.

    Anyone got a beer?
  • Eric Chadwick
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    That looks great. Almost a spatchcock.
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Thanks Rick. Though I felt like a insect trying to decipher Japanese, I am going to have a programming friend try to help me understand whats being said.

    Your talking to someone who couldn't even get past basic.
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    Copy n paste.

    It got me through uni.
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok, well I got stuck. I never even know what Expose nodes where/existed to this post. I managed to find it and created a script. Now Im confused.

    A: Do I need to do any constraints to the twist bone other than have it as a child of the clavicle?
    B: Do I attach the script to the bone, or etm, or scene? Either way, how??

    <font class="small">Code:</font><hr /><pre>
    $etm_LArm.exposenode = $'Poop L UpperArm'

    paramWire.connect $etm_LArm.baseObject[#Local_Euler_X] $'L Clavicle Helper'.rotation.controller[#X_Rotation] "Local_Euler_X*0.5"
    paramWire.connect $etm_LArm.baseObject[#Local_Euler_Y] $'L Clavicle Helper'.rotation.controller[#Y_Rotation] "Local_Euler_Y"
    paramWire.connect $etm_LArm.baseObject[#Local_Euler_Z] $'L Clavicle Helper'.rotation.controller[#Z_Rotation] "Local_Euler_Z"
    </pre><hr />

    etm.gif

    Result:

    "Runtime Error: connect requires subAnims"
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    Sorry, dunno!

    Too little info.


    What bit is crashing it? The etm linking working?
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Selecting either the et or the clavicle twist and then going to the maxscript pulldown menu and choosing to run script from file.

    Then max gives a pop up error with that message.

    Im sure this is something simple that I just am overlooking since again I know nothing about nothing about maxscript other to load in plugins. Possible how to attach a maxscript to an object or scence.
  • Mark Dygert
    Since you're not really as much as a code monkey as Rick, I wonder if rigging this up using reaction manager instead if that would be more friendly for you? Not exactly a tutorial tailored to your specific needs but it should give you the basics and get you moving in the right direction? It's the 3ds Max equivalent of Maya's Driven Keys.
    http://www.aldenfilion.com/tutorial/face_rig/facial_rig.htm
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    Ok I spent a bit looking it over. Part of the problem is somehow the arm was unlinked from the clavicle. I changed the null object to a a bone object for the twist just in case.

    Not the same error now. But still is erroring. I was reading up on wiring in max 9 and noticed a mention of it being changed from older versions. I'm wondering if its the scripts terminology??

    http://www.oxynary.com/downloads/bonefuck.zip

    Totally taking a shot in the dark with that one.


    Vig, I looked briefly over the link and the reaction manager. Slightly confused as if its dealing with morphs alone? Or could work for one bone getting its data from another's? The tutorial showed two objects, not bones interacting.
  • Eric Chadwick
    Reaction manager is great to setup any entity getting data from any other entity and reacting to it. Give it a try, much easier to parse than script, ultimately not as powerful, but much more accessible.
  • Mark Dygert
    The reaction manager isn't well documented outside of the Max help files which can be confusing, and that tutorial was the best I could find, but yes like Eric said it will watch any object, or property of an object and change any other object based on that data and the limits you set. If bone01 rotates 15degrees move and rotate bone02 bla bla bla.
    For me wire parameters is hard to work with and feels like what E-Mesh is to E-Poly.

    At the top left of the reaction manager you have buttons to;
    - Select the master object, this is the object you're going to pull data from.
    - Select a slave object.
    When you select the objects by clicking on them a pop up menu comes up and you choose the parameters you wish to watch/change. Then you create your states in the window below. I delete the states it creates automatically and build new ones so both objects are in the same state. Then find data extremes by moving those objects around and noting the data you want to watch/change. There are more complicated ways to capture the exact data but its convoluted and unnecessary for what you're doing.
    - Drop that data into your states and watch the magic happen, or in case you get something wrong watch in horror as your rig destroys itself heh =P

    I'm not sure this works so well with biped as it has some funky rules, but it looks like you're using a custom rig made up of default bones so you should be fine.
  • oXYnary
    Offline / Send Message
    oXYnary polycounter lvl 18
    I wasn't having too much luck with the reaction manager. Im sure its something I'm overlooking. Possibly dealing with trying to hook into a biped arm. I guess because of what Rick is saying. The nodes? are hidden. Maybe I needed to make the master the Expose Transform Helper for it.


    Anyhow, taking ideas from both. I got it to work I think correctly Rick? I did it with your expose transform helper, and then used the wire paramaters and made a connection from the ETH local rotation into the clavicles twist helper. Then adjusted the script below with the 50% value from your original script.

    I attached a sample just to make sure this is the same idea you meant.

    http://www.oxynary.com/downloads/bib_test.zip
  • Rick Stirling
    Offline / Send Message
    Rick Stirling polycounter lvl 18
    I'll have a look next time I boot into a max workspace, but it sounds like you've go it working.

    Now just get to work on the skinning, remembering to concentrate on getting the skinning to work well WITHOUT the rollbones before you use them to make it work better.
Sign In or Register to comment.