[3ds Max] Seeking Advice About Spine Rigs

Hello,

Like the title suggests I’m wanting to know more about spine rigs in 3ds Max, specifically for games (as an aside does that necessarily mean they have to be non-stretchy?), are there any particular good examples you’ve seen or created? I guess the most obvious examples would be Biped and CAT spines, are these liked by animators good or just accepted? I’m fond of Spline IK, unfortunately you can only define one up node for the entire chain in 3ds Max which doesn’t make it very useful.

Thanks,
-Harry

I’d also like more info on this topic, as I’ve been struggling with spines for a while now.

If you mention biped within the radius of 100m of an animator, you will hear screams… Biped animators no likey.
CAT seems to be ok.

After trying many different spines (mostly variations of double-spline upnode spine, dabbled a bit in recreating isner and coming up with different bezier spines through expressions) and then having to go back and animate them, I’ve noticed that a lot of what looks cool from a rigging perspective may turn out useless or even frustrating in animation. It is especially true for any solutions that aren’t easy to understand and control through curves. As a result we ended up sticking to really simple variants, depending on the style of the model:

A. a straightforward FK spine (most often 4 bones + head + pelvis): position and scale of controllers NOT locked, scale inheritance fixed so that any of these controls can be scaled in any axis. This allows the animator to cheat a lot in terms of silhouette and is very easy to control through curves.

B. a stretchy-only spine, with a stretch factor indicator, and a FK/IK switch for the top control, pelvis attached to the spine, not part of it. The spine itself is made of two skinned splines, one holds the path-constrained bones, the other slightly offset spline holds the upnode points for the bones’ lookAt contraints (lookAt upnode, not axis alignment).

C. (mostly for quadrupeds) a combination of B above and a switch to splineIK chain for non-stretchableness. (And FK/IK switches removed so as to passive-aggressively force the animators to animate quadrupeds properly…)

They have their own problems, but they often get the job done with a minimal hit on performance.

Hi Zhalktis, thanks for the reply,

I’ve heard that Biped as an overall system is not particularly well liked anymore, but what do you think about the spine setup? It allows overall rotation and twisting as well as local rotation and twisting if you change the Bend Links. I’ve worked with CAT in a few personal projects and was very frustrated by the random bugs that kept popping up, in terms of rotation I think the Biped and CAT spines are similar but the CAT spine allows for translation as well.

It seems like your A, B and C spines all allow for stretching, is that allowed in the newer game engines? Is spine B the same as Louis Marcoux’s? For C are you using 3ds Max’s Spline IK solver? I’ve found that the range of motion you can achieve before the bones start twisting is quite limited, I created my own Spline IK solver which is very similar to Maya’s, so you can define two upnodes to control the twisting at the start and end.

Thanks,
-Harry

[QUOTE=hazmondo;24675]I’ve heard that Biped as an overall system is not particularly well liked anymore, but what do you think about the spine setup? It allows overall rotation and twisting as well as local rotation and twisting if you change the Bend Links. [/QUOTE]
That functionality is readily available on the most primitive FK spine. An animator just needs to switch to local or gimbal and use pivot point centers - easy twist/bend, including more control depending on which parts selected. In addition: 1. an FK spine offers more control with position (and scale, in cases where it’s not for games) axis unlocked, 2. FK spine doesn’t require to switch to motion panel to access the functionality, in case of biped, if you have sliders in modify panel for other parts of the rig, this would force the animator to switch them often unnecessarily, and that breaks flow, 3. I may be wrong for parts, but afaik biped is problematic when you want to make your rig scalable, i wouldn’t be surprised if biped spine doesn’t deal well with it. 4. FK spine = proper euler curves, without the mess of biped keys and TCB controllers (those two are the main reasons animators hate biped).

[QUOTE=hazmondo;24675]I’ve worked with CAT in a few personal projects and was very frustrated by the random bugs that kept popping up, in terms of rotation I think the Biped and CAT spines are similar but the CAT spine allows for translation as well. [/QUOTE]
I admit, I haven’t looked deeply into CAT, can’t comment much. We did a few test rigs early on and the stability problems scared us off easily. It may have been fixed in later versions, but we’re stuck with 2013 and it has been more pain than gain, so we just moved forward without it.

[QUOTE=hazmondo;24675]It seems like your A, B and C spines all allow for stretching, is that allowed in the newer game engines?[/quote]
Most of our rigs are for pre-rendered uses, so that’s usually not an issue. Since it’s a bunch of path constrained bones and a very primitive system, it’s not too difficult to make the chain use translation in stead of scale, afterwards it’s only a matter of adjusting the skin so that it would stretch properly through bone translation. I don’t have that much experience with realtime, yet so far that approach hasn’t backfired on us.

[QUOTE=hazmondo;24675]Is spine B the same as Louis Marcoux’s?[/quote]
Very similar. Except it’s one consecutive bone chain, instead of many bones with nubs. And skin to manually created points instead of splineIK modifier for the controls.

[QUOTE=hazmondo;24675]For C are you using 3ds Max’s Spline IK solver? I’ve found that the range of motion you can achieve before the bones start twisting is quite limited, [/quote]
SplineIK is really rubbish, the main reason we ever use it is as a component for a fast way to make a non-stretchable spine. It’s been a very long while since the last rig involving such a set up, but I seem to remember it was a splineIK with another bone chain posConstrained to it, and the later’s twist was controlled through a wire from the control’s Euler X rotation (order left at XYZ) to the bones. Another version involved taking bone lengths from spline IK while keeping rotations from the Marcoux’s-like spline.

[QUOTE=hazmondo;24675]I created my own Spline IK solver which is very similar to Maya’s, so you can define two upnodes to control the twisting at the start and end.[/quote]
It looks very good from the video. If it works properly with track view, and multiple components attached to it, and it handles back-transform well (skin/linkedXForm with back-transform on, and WSM FFDs are sometimes easy to mess up), and it doesn’t have glitches like not updating under some circumstances (on undo, for example), I don’t see why you shouldn’t use it.

That functionality is readily available on the most primitive FK spine. An animator just needs to switch to local or gimbal and use pivot point centers

what I meant was when a Biped spine is in Twist Individual mode you can twist one of the spine bones without it effecting the twist of it’s children which prevents counter-keying.

an FK spine offers more control with position (and scale, in cases where it’s not for games) axis unlocked

Do you mean if the bones are set to be stretchy or do you mean the moving a child bone rotates the parent?

it’s not too difficult to make the chain use translation in stead of scale

And that type of spine could be exported into a games engine?

Very similar. Except it’s one consecutive bone chain, instead of many bones with nubs. And skin to manually created points instead of splineIK modifier for the controls.

I haven’t noticed a difference, is it easier to script using the Skin method?

If it works properly with track view, and multiple components attached to it, and it handles back-transform well (skin/linkedXForm with back-transform on, and WSM FFDs are sometimes easy to mess up), and it doesn’t have glitches like not updating under some circumstances (on undo, for example), I don’t see why you shouldn’t use it.

I’m not entirely sure what you mean, but all the scripting was done on some point helpers to essentially create an advanced path constraint, so the controls transform values can be read from the track view and everything works with undo.

-Harry

[QUOTE=hazmondo;24696]what I meant was when a Biped spine is in Twist Individual mode you can twist one of the spine bones without it effecting the twist of it’s children which prevents counter-keying.[/quote]
Ah yes, that’s a nifty function. From an animator’s perspective I cannot say it is a much needed or used function, though. In effect it is still counter-animation, except done auto. Even when animating a biped, I’ve found it’s just faster to pickwalk through the single links and counter animate by hand (as you have to go and adjust every bone there anyway), than having to go enable/disable the links mode.

[QUOTE=hazmondo;24696]Do you mean if the bones are set to be stretchy or do you mean the moving a child bone rotates the parent?[/quote]
No, those solutions wouldn’t give intuitively predictable results. I mean a straightforward position/rotation constraint to the control object (if scale allowed, the scale i just instance into a scale list from the control object and the main control, and make the chain not inherit the parent’s scale) and bone stretch set to none, so that the bone lengths aren’t affected when rotated away from the child. In effect - moving bones around.

[QUOTE=hazmondo;24696]And that type of spine could be exported into a games engine?[/quote]
I do believe a game engine that can move bones, not just rotate them, can handle such a setup.

[QUOTE=hazmondo;24696]I haven’t noticed a difference, is it easier to script using the Skin method?[/quote]
Yes. But the main reason is that it’s easier to adjust the positions/rotations of the points and reinitialize the skin. This is an issue when you want to align the point a certain way, so that when you wire/instance one of it’s axis’ scale to a slider on a control object, you get predictable results controlling the tangents. Overall, going back to fix or add something is much easier with skin, so is copying the spline to make an offset upnode spline - just reinitialize the skin and it’s done.

[QUOTE=hazmondo;24696]I’m not entirely sure what you mean, but all the scripting was done on some point helpers to essentially create an advanced path constraint, so the controls transform values can be read from the track view and everything works with undo.[/QUOTE]
For example: A common issue with trackView we had on many spine setups was that adding and editing keys in TV caused several second long lockups, yet it worked fine in the viewport. It was a very serious problem when the animation had to be polished. This was not noticeable on the spine alone, but became more severe with more structures linked to it and more keys in the animation. Later we learned it was the back-transform checks that took so long, disabling the back transform on splines and adjusting the rig’s hierarchy to accommodate the change mostly fixed that problem.

That was a speciffic issue with spline-based spines and structures, yet we scrapped plenty spines involving scripted/expression controllers and expose transforms for similar glitches.

Expose transforms in particular had a tendency to cause lack of update on undo, and only update on manipulate, depending on what in the hierarchy they exposed and where it was used afterwards.

Man, I wish you guys made this thread three weeks ago! I was making an auto spine rigger for a uni assignment. I roughly came to the same results that you guys have mentioned on here (after trying a lot of really stupid things of course).

The end result I came up with was a 2 spline variant. One had a series of points constrained to it via splineIK (for no-stretch), and the other had path constrained points for stretch. Then it was just the usual stuff involving upnodes. It has some issues with the upnodes causing flips when the spine reaches a ‘C’ shape though. I never considered using an offset spline for the upnodes … I might give that a shot. Nice one zhalktis!

Also, hazmondo- that custom splineIK you made looks really good. Any chance of a little tutorial or a video?

Are you at Bournemouth University? I thought you guys used Maya and mainly went into the London VFX scene?

I enjoy making video tutorials, but I’m not sure about creating one for the SplineIK, not at the moment anyway, I haven’t tested it extensively.

That offset spline technique for up nodes is pretty nice, in the video Marcoux uses a spline with Smooth vertex tangent types which are probably the best option but they do have a problem which is that they don’t support local changes to the curve, so transforming one vertex change the shape of the entire curve, not just the region you want. I followed the videos and recreated the spine and when you rotate, say, the second top control clockwise it actually rotates the start of the bone chain anti-clockwise slightly because of the Smooth tangents, so that’s a draw back of using that setup.

-Harry

Yeah, I’m at Bournemouth but I took a pretty non-standard route to it. I started off doing a foundation degree at a partner college (they taught 3DS Max there). Then I did a BSc top-up at the same place, and finally I started doing a masters degree at the real uni. The end result is that I know XSI and 3DS max, but not Maya.

I’ll have a go at recreating that setup too if I manage to scrape some free time out of somewhere. There always seems to be one bug or another popping up from these bloody spine setups!