Anim: Align new bones with the world axes #113138
No reviewers
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
7 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#113138
Loading…
Reference in New Issue
No description provided.
Delete Branch "dr.sybren/blender:pr/align-default-bone-to-y"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Test builds are available at: https://builder.blender.org/download/patch/PR113138/
This PR consists of two commits that are intended to be kept separate. They are related enough to be in one PR though.
Adding a single bone will now align that bone with the world axes. This means it is added with its tail at
(0, length, 0)
, such that the bone is oriented along the world Y-axis. Previously Blender would align bone-Y with world-Z.This adjusts the following operators:
Note that this only applies when using 'Align To: World' (in the operator options resp. the Editing preferences).
Side-note: there is no 'Local' alignment option, only 'World', 'View', and '3D Cursor'. This is why adding a bone to an existing armature will always counter the armature object's rotation, and align the bone with the world. This behaviour is left as-is in this PR.
I think this makes sense and will benefit the workflow of a few cases:
@blender-bot package
Package build started. Download here when ready.
As an alternative, we could have different alignment options for the default bone placement. Note that the redo panel options of the object-mode Shift+A > Armature will only align the Object, and not the bone inside of it. However, the user preference Editing > New Objects > Align To does (in
main
) influence that default bone orientation.I feel that there's room for improvement here. Some possibilities:
Personally I kinda like option 1. What do others think?
Maybe worth noting that if we went with #2, the edit mode behaviour could be customized by editing the keymap entry. This won't work for object mode though because that Shift+A just summons a list.
I also prefer #1, but I think the option fits better in Editing->Objects->New Objects.
I see no real benefit of adding a new option if it's not going to be the default. And if it's the default it will break all tutorials in existence and be less useful for actual rigging (there is a reason why the bones are added upright!). It's fixing one thing by breaking another.
Option 4: What if we change bones to roll on Z for Blender 5.0? :)
Would you care to expand on that? It's hard to use this feedback now, when there's little more info than just "nope".
Would this new preference be on by default?
What type of user is this preference trying to benefit?
I never got what the benefit is of having the bone at any rotation other than zero by default. Feels like a legacy thing.
In my opinion, there is no technical benefit and it adds confusion for new users. So I'd vote to have new bones aligned with the world like all other object types. And I also don't see a reason to add options to have them rotated by default.
Thank @dr.sybren for taking care of this. I was so used to it that never questioned why it was like that.
This would solve more than one issue with unexperienced users. Doesn't make sense to me to create a bone not aligned with the world. Do we have a general idea of why bone was added Y upwards originally? usually having some context can lead to better design decisions.
option 1 seems quite reasonable to me, but I'd prefer to have a world orient as default.
I didn't just say "nope". What i said is this is fixing one problem (misalignment with world) by introducing another (un-intuitive, less useful default that can't be properly seen from front view). The right solution would be to switch bones to Z roll.
Tutorials are not a relevant concern for development.
What sort of rigging? Breaking what? Why un-intuitive, why less useful? This stuff is frustrating to read. Please make actual arguments. I've raised two real use cases above where the proposed change would be more intuitive and more useful. (camera constraining and assigning bone shapes)
And the current default can't be properly seen from top view.
I assume your point is that front view is the most convenient and most often used when placing bones. I think this is a valid point, but it's not clear if this is actually the reason why you're mentioning this.
Obviously, the benefit is that if you want fresh bones to be properly seen from front view, you can choose that, and if you want fresh bones to align with bone shapes and cameras, you can choose that.
If you mean that it's not worth the added UI clutter in the Preferences, then I agree that we should only add more preferences when a change is really controversial enough to warrant it. You seem to feel quite strongly about keeping things here the way they are, while we want to change them, so, adding a preference seems to make sense to keep everybody happy.
And yes, bone roll being along Z would be nice, but that will break everything for real. This is just a tiny quality of life change. And I still believe this PR is a net positive.
I understand and share your frustration. Bone orientation IS wrong and it's not my fault nor yours. And it can't be fixed by turning bones 90 degrees on their "back".
If an architect made the same mistake in a house's blueprint, would it be fixed by building the house sideways?
Of course it wouldn't. You would have to correct the root problem which is the blueprint.
That is the essence of my frustration. This PR does not fix the problem, only moves it further.
I've tried to be as clear as I can. I will step out of the conversation now.
We all agree we want bones to no longer have Y as their length axis. But that's way beyond scope for this PR.
I think it would still be nice to avoid these scenarios:
So, I agree with Ivan, that I would make the World Aligned option the default in the preference.
I wonder what people think of having the preference in
Editing->Objects->New Objects
rather thanAnimation > Armature > Default Bone Orientation
.I think that actually might make more sense, yeah. Although Armatures are typically used for animation, ultimately they're just objects and can be used for non-animation things as well (like statically posing characters for a still render).
This 1 bone scenario falls apart with any sort of actual rig (a chain of more than 1 bone)
Let's use the simplest example of a rig (multiple bones) that I can think of. A hose.
Would you rig it like this?
Or like this?
I think everyone knows the correct answer is the second.
So will the world aligned custom bone shapes match in this case? NO!
You see, the custom bone shapes can not match because the bone orientation is simply wrong (as we have already established and agreed on).
With your hypothetical single bone new user rig example you're teaching the new user the wrong way of using armatures, only to match custom bone shapes.
We shouldn't make a rigging decision based on a single bone scenario.
I agree! So the user story would be something like this:
At no point did the bone shape fail to match the bone orientation, nor did a new user learn anything wrong.
90 degrees of rotation on the bone resulting in 90 degrees of rotation on the bone shape is an intuitive outcome.
I'm with @Mets in this case.
Although there will certainly be plenty of vertical-ish bones in a rig, in practice very few (if any) are actually going to be precisely vertically aligned. For example, spines have a curve to them, so none of the bones are actually vertical. So I'll have to adjust their orientation regardless. And even then, most are going to be extruded, not manually rotated into place. So having the new-bone orientation be on its side doesn't make much of a workflow difference there.
Where it does make a difference, however, is when creating new bones for controls like pole targets, eye targets, the root bone, etc. In those cases, the current vertical orientation of new bones just creates work for me, because I have to manually rotate them all to be precisely world-aligned. Which is annoying. Whereas if they were created already world-aligned that would save time and make the workflow much smoother.
I agree that it feels weird to have new bones be on their side. But I think that's just revealing a real weirdness to users that currently we try to sweep under the rug: that bones use the Y axis as their long axis. And I think trying to sweep that weirdness under the rug rather than put it front-and-center causes more confusion than it solves.
I think this is still overly simplified, as an equally simple case can be used as a counter-example: a hose. But then one that's modeled as an actual hose, laying on the floor instead of magically standing straight up like no hose ever does.
True, which is easy enough if you rotate the bone by 90° to point upwards, and then subdivide / extrude it to create the other bones.
Indeed. It's my hope that, because you had to do that 90° rotation yourself to orient the bones like that, it may make more intuitive sense that you see a similar rotation pop up somewhere else.
There's little sense beating this dead horse. Even Ton acknowledges that the current bone orientation was an arbitrary choice back in the day, and that it wasn't well thought-out (and, indeed, inconsistent with the rest of Blender and very annoying because of that).
It's not just to match custom bone shapes, as you can see from Demeter's examples. It's various places where a sudden 90° rotation pops up.
The bigger issue here is that of priorities. Changing the bone axes from Y=roll to Z=roll will break everything, so that shouldn't be done. Introducing adjustable bone axes is IMO the right way to go, as for existing rigs those can default to the existing orientation and for new rigs default to the sensible orientation. That will be a lot of work in order to get it done well and in all the places where this should be taken into account. It's a massive amount of work. We simply don't have the developer power for this, if we also want to do layered animation and all the other things we want to do.
So that's why I thought this PR might be a relatively minor amount of work, and still bring us some level of clarity. As I describe above, it should reduce the number of unexpected 90° turns, because the initial placement of new bones aligns with Blender's axis orientation.
I was planning to leave this topic alone but the misunderstandings should be cleared.
My example doesn't fall apart; it works regardless of the orientation.
Here's the hose laying on the ground:
Bones do have an intrinsic UP side, which is dictated by any kind of chain. The Up of each bone is it's Local Y, because it's the only way a chain can be formed.
For example, this is not a valid Blender chain, even if hierarchically it's the same.
You certainly don't rig like this
You rig like this
So in essence, for any bone (regardless of it's orientation) Local Y is Up. This doesn't match the rest of Blender, we all know that and this patch doesn't fix that, it's just encouraging users to rig incorrectly by pretending a Bone's Local Z is Up.
I think this is also a misunderstanding. Local Y isn't actually up for bones, it's just the lengthwise axis. Bone axes don't have any intrinsic relationship to up (or left, or forward, or any other direction).
Having said that, I do agree that conceptually it feels better to have the lengthwise axis point up for new bones. In 3d space, up is in some sense the "not like the others" axis (both other axes are horizontal, whereas up is vertical, which is special from a human perspective). And similarly a bone's lengthwise axis is also its "not like the others" axis. So having those match when first creating a bone feels right.
But I would still argue that it's more practically important for the actual axes (in terms of XYZ) to be aligned when creating a new bone, as I outlined elsewhere in this thread. It's just really unfortunate that we have to make a choice between those two things in Blender, due to the mismatch between its z-up and y-lengthwise conventions.
Checkout
From your project repository, check out a new branch and test the changes.