Why The UVN Deformer Is So Useful

There's a lot of stuff on my website about sliding joints along a nurbs surface to approximate the UVN deformer that Blue Sky had developed. The UVN deformer has 2 major advantages over the skinCluster approximation.


The Volume Issue:


The first one is that it's much better for volume preservation. Imagine a side view like this. If you joint travels straight down, the vertices on the arced part of the surface (the characters forehead), will also be pulled straight down, instead of sliding along the curve. If the joint travels up along that arc, then all the spans below it will be pulled up and get rotated out which looks bad. You could add more joint spread out vertically to try and combat this but it adds complexity that can be hard to maintain. You can actually see a technique kind of like that in Stephen Candell's reel https://www.youtube.com/watch?v=1epCXLpyzM8, when he shows off the Brent rig from "Cloudy with a Chance of Meatballs".


The Macro Micro Issue:


The second advantage is harder to explain, which is why I'm making a post dedicated to explaining it.

A super basic brow rig would be three joints (inn,mid,out) that just translate up and down (I'm ignoring the left and right movement in this example). If you were to paint skinWeights for this rig you would ignore the mid and out at first, and paint the entire brow to move with the inn joint until it looked nice, then you add weight to the mid and out joints while removing weights only from the inn joint in order to ensure that when they all move together it creates the same result you created when you painted weights only for the inn joint.

That's a very wordy way of explaining something even very inexperience riggers have done, but here's a question. Why does it work? What about that setup ensures that the deformation caused by the three controls adds up to the deformation you defined using one control? The answer is that it's because all three joints move in the same way so it doesn't matter how the weight is distributed among them, but let's generalize that.

If the deformation that all three controls drive is the same then you can split weights among them any way you want and still get the same deformation when you move them all together. Sometimes I like to think of that principal in terms of a formula, but if that written description already makes sense then ignore this:

Being able to paint one weight map for the macro movement and then split it up into the micros makes rigging much faster (especially if you use the weightSplitter system I've mentioned elsewhere on this blog). So let's try and identify all the deformations that fit this requirement.

We already know that applying the same translation deformation works, and having the same rotation (and pivot) would also work (good news for eyelid rigging), and applying the same scale (from the same pivot) also works. In-fact as long as joints have the same transformation (translate/rotate/scale) relative to their starting position/orientation (and they have the same starting position so that pivot stuff doesn't get wonky), we can move the joints any way we want and still be able to split the overall weighting among them with ease. But is that really all that useful?


The Same Curve Issue:


So since we can apply any transformation that means having three joints travel along the same curve would work, right? That's true, but it has to be the same curve, which can be quite limiting.

Take Landon Grahams Papa Ram rig for example. The brow uses joints sliding along curves, but as you can see the curves have to all be the same otherwise it breaks our requirement of the joints move in the same way. The curves are offset along the X-axis but because the joint only rotate along the X-axis, that doesn't matter.

But we're still dealing with the volume issue but let's pretend we replaced the joints sliding on the curves with a custom deformer that actually slides the individual points along the curve. That would solve our volume issue, and it would still meet our requirement because the same deformation is being applied by all three curves (inn, mid, out).

But what if our character doesn't have a wide flat brow like the ram. On a human the outer edge of your brow is noticeably further back than the inner edge. If we were to shift the outer curve further back along the Z-axis then those curves wouldn't be the same anymore and our requirement would be broken, and we'd have to deal with carefully and manually adjusting the falloff between the three curves to try and achieve the desired overall shape, and that's not ideal.


Here's a visually representation of the problem, the colored surfaces show the path each curve will move the points along, and obviously they're not the same, if we could somehow make those three surfaces be the same...


The Surface Solution:

Instead of using three curves what if we just used one surface? It might not be obvious that having all three controls slide points along a surface would fit our requirement from before. But if they're sliding them the same way along the same surface then it does meet our requirement!

So that's the real superiority of the UVN deformer, it's the only method that solves the volume issue, can fit to any shape, and meets the requirements for the animCurve-based weightSplitter. Really the only tradeoff is performance, but that's a topic for another time.









Featured Posts
Recent Posts