I figure this is important to riggers and I can’t find a clear consensus because of all the cross-platform terminology. So in a non-platform specific way, here’s what I want to do.
I have an Empty (Plain Axes) object that I’ve rotated 90 degrees on Z. In this new orientation I’d like the Z rotation to show 0, and if I manually enter 0 (or “Clear Rotation”) I’d like it to return to this new position.
I’ve tried Apply Rotation, Apply Visual Transform, and all the “Origin to …” commands but they don’t appear to do anything in this situation.
Clear Rotation and Align to Transform Orientation just appear to undo the rotation I’ve introduced.
… and that exhausts my knowledge of Blender so far.
Oh, great. It looks like “Empty” objects are a special case, heh. I just confirmed Apply Rotation works as desired on the default Cube and “Apply Pose as Rest Pose” seems to be the equivalent for bones.
Ok, so what’s a better object to use as an empty transform node?
I’ve often relied on Dummy helper objects (3ds Max) or Locator objects (Maya) for special purposes in character rigs or as invisible parents to scene objects, but Empties don’t seem suitable for these cases if you can’t alter their default transform. Kinda surprised they don’t just act like every other transform in this regard.
Calbar, there is no issue with the Empty object, it’s just how mathematic of 3d space works, so it can’t exist an object with that characteristic, you can’t alter its default transform, it can either be transformed or not but not both; please, reflect about it.
Other types of objects have a form, that is some components such as vertices edges and faces, which can be transformed respect to the system of reference of the object itself, but a system can’t be transformed respect to itself.
Depending on what you are after, maybe you can make use of parenting to an Empty.
Calbar, you are indeed not on the same page as sourvinos, because I think you don’t understand how Empties work. An empty is a holder for rotation, location and scale data at an object level. The only reason you can rotate a mesh object then apply its rotation to set the rotation to 0 while keeping the object’s new position is that it contains mesh data. The mesh within the object has been rotated, but by applying the rotation you are essentially telling it that this orientation is the mesh’s new un-rotated position.
An empty contains no mesh data. It is only object level rotation. There is no mesh rotation data to be applied. The whole purpose of an Empty is to hold object level information, usually for the purpose of somehow applying that transformation to another object. An empty is either rotated or it’s not rotated. I think what you’re imagining is a case where you could rotate an empty, then apply it so that the rotation handles are displayed in a rotated orientation, but the Empty itself is not rotated. But those rotation handles are just a visual display of that object level rotation data. If the Empty’s rotation is 0, so is its visualization.
Now the real question: given all this, why would you even want to apply the rotation of an Empty in the first place? What are you actually trying to accomplish here?
@K Horseman: Ahhh, I see. Thanks, that’s a great explanation! In response to your question, I have an Empty that is parent to a whole bunch of lights. I want to move that Empty to a new position and make that new position its “zero position” so I can always Clear Transforms and have it return to that position.
Bottom line is I’m looking for Maya’s “Freeze Transformations” functionality in Blender.
Freeze transformations makes the current transformations on the selected objects be the objects’ zero position.
The closest thing I’ve found in Blender is “Apply Pose as Rest Pose” for bones. In fact, this is exactly what I’m looking for, but it appears to be a bones-only feature. I’m trying to do exactly this at the Object level.
With a better understanding of the Object/Data system, I’m starting to believe this might be counter to how Blender works. Unfortunately, it’s such an integral part to the way I’ve worked and rigged that I’d really have to rethink my process without it. Any suggestions are appreciated.
On a side note, it turns out my understanding of Apply Transforms was incorrect. It will keep your geometry where it is, but return the pivot to the origin. I’d like to keep my geometry AND pivot where it is, but have the transforms all read 0.
You can always parent an Empty to an Empty… then the first Empty now exist in the Second Empties “Space” then all you have to do is hide “H” the first empty in what ever Rotation you have set it too… and I’m pretty sure that when you select “all” “A” then hit Alt+R to clear Rotations… anything that has been Hiden doesn’t get effected…
I have been using Maya for a few years now; starting with Blender has proved unsettling… I’ll try to explain it as best as I can.
Blender handles location very differently than Maya : parenting will not quite exactly put the child into the parent’s frame of reference like it does in Maya. Someone once used a good analogy to describe it, on this very forum iirc : it’s like someone holding a dog with a leash. The transforms that happened to the child before the parenting will stay but not relatively to the new parent’s frame of reference, no, no, relatively to the world reference, and any new transforms will be added to that. Moving the parent will then move the child without affecting its transforms, as expected.
This is because Blender “does not cheat” : an object will always display its translate values relative to the world origin if it does not have a parent. And since you don’t use objects in a rig anyway, you don’t actually need it to work like Maya… now I’ve completed my first rig and believe me it’s a breeze… once you’ve gotten the hang of it it works really well.
It opens some new possibilities : in the object tab (or bone tab) in the properties panel, you’ll get to set which transforms are affected by the parenting : you’re allowed to say that a parent’s scaling or rotation will not affect its children’s scaling or rotation.
Now you don’t use anything else than an armature inside a Blender rig. No empties, no curves, nothing outside the armature itself. The bones themselves serve as controllers for other bones. This is where it becomes interesting : in edit mode, you can change the bones’ orientations and roll (which is always the y axis), then when you switch to pose mode, every bone’s transform will be zeroed out automatically and oriented like you decided back in edit mode (as if, in Maya lingo, each one of them had a parent compensating for their transforms).
I hope it cleared up things a bit for you, as I struggled with this thing myself a few weeks ago only.
To be clear, you can use other objects like empties and curves, even other meshes (though that’s usually silly) to control parts of an armature, but in almost every case, you can probably accomplish your goal with only bones. If you do use empties or curves, they are outside objects, not strictly a part of the armature. Spline-IK is the only thing I can think of that requires a separate (curve) object. Other than that one exception, it’s just an option that most people just don’t bother to use, since bones are generally more than sufficient.
Yes… 100% agreement with Hadriscus and K Horseman the Armature (bones) structure in Blender is fantastic… who ever coded it really knew what they were doing… most 3D software have ‘broken’ Rigging systems based on ideas created back when Rigging was young and no body really knew what they were doing… most 3D software companies struggle to Revamp the Rigging component of the software while making it backward compatable as possible with older versions… (which rarely works)… Blender on the other hand being open source has not had to do that… so the the Rigging component has stayed very state of the art and been kept very clean by someone who knew animation and how to make a Rigging system that ‘worked’… (not that it doesn’t have it’s problems now and again) (everything does)
Also… yes the use Bones for most things unless it’s just a really simple Rigg… and there are a few instances when it make since to use an empty or an object as part of a Rigg in Blender… but not very often…
like for instance having an Character pick up and place an object…
Thanks for the great discussion everyone. This really helps clarify Blender’s transform / rigging paradigm.
My big takeaway from all this is that Blender bones are sufficiently powerful and I should stop chasing the transform functionality I’m used to in lieu of them. I have to admit, it sounds like creating a “naked rig” if we’re talking bones-only, but I look forward to being pleasantly surprised!
Anyway, I think I’ll mark this thread as solved in say, a week, in case anyone else feels like chiming in or if you want to correct me on my conclusions above.