Armature Display: Bone relationship lines #105489

Closed
opened 2023-03-06 14:45:24 +01:00 by Sybren A. Stüvel · 23 comments

Relationship lines between parent and child bones are currently drawn from the head of the child to the tail of the parent. This makes sense when the child is positioned in a 'continuation' of the parent bone. If that is not the case, however, the relationship lines become more of a distraction.

Pull Request: #105427

Current situation in Blender

image

Left: somewhat sensible. Right: starting to get messy.

Note that the off-by-90-degrees situation is very common when importing armatures from software that aligns the X- or Z-axis with the bone.

Proposal

This design task proposes to change the line drawing to expand its usefulness to different situations.

Proposal: to use the location of the bone's coordinate axes as the start & end point of the parent-child relationship lines. This is shown below.

image

Such a change is also necessary to make the new armature drawing mode introduced in #106230 possible.

Test Build for the simple proposal of using the coordinate axes as start/end points (#105427).

To Discuss

  1. The position of the coordinate axes can currently only be set globally for the entire armature. Is this enough for the relationship lines? Or should this be set per bone? We could even go as far as to have a default setting per armature, and then allowing to override this per bone, although that could make things unnecessarily complex.
  2. Should this use the coordinate axes position setting? Or should there be separate sliders for axes position and relationship line position?
  3. Should there be separate options for the parent side and child side of the relation?
  4. Do we want to have an option that maintains the old behaviour? If so, we could have that as a special case, or if the answer to 3. is "yes", simply have the versioning code set those settings to keep the same drawing style.
Relationship lines between parent and child bones are currently drawn from the head of the child to the tail of the parent. This makes sense when the child is positioned in a 'continuation' of the parent bone. If that is not the case, however, the relationship lines become more of a distraction. Pull Request: #105427 ### Current situation in Blender ![image](/attachments/9c78b05d-7fc2-4ccb-acbd-5d22ddce26b2) **Left:** somewhat sensible. **Right:** starting to get messy. Note that the off-by-90-degrees situation is very common when importing armatures from software that aligns the X- or Z-axis with the bone. ### Proposal This design task proposes to change the line drawing to expand its usefulness to different situations. **Proposal:** to use the location of the bone's coordinate axes as the start & end point of the parent-child relationship lines. This is shown below. ![image](/attachments/522d0e80-bc0e-4166-8702-b82a9869be8c) Such a change is also necessary to make the new armature drawing mode introduced in #106230 possible. **[Test Build](https://builder.blender.org/download/patch/PR105427/)** for the simple proposal of using the coordinate axes as start/end points (#105427). ### To Discuss 1. The position of the coordinate axes can currently only be set **globally for the entire armature**. Is this enough for the relationship lines? Or should this be set **per bone?** We could even go as far as to have a default setting per armature, and then allowing to override this per bone, although that could make things unnecessarily complex. 2. Should this **use the coordinate axes position** setting? Or should there be separate sliders for axes position and relationship line position? 3. Should there be separate options for the **parent side and child side** of the relation? 4. Do we want to have an option that **maintains the old behaviour?** If so, we could have that as a special case, or if the answer to 3. is "yes", simply have the versioning code set those settings to keep the same drawing style.
156 KiB
156 KiB
Sybren A. Stüvel added the
Type
Design
label 2023-03-06 14:45:25 +01:00
Sybren A. Stüvel added the
Module
Animation & Rigging
label 2023-03-06 15:07:52 +01:00
Sybren A. Stüvel added this to the Animation & Rigging project 2023-03-06 15:07:56 +01:00

I don't often use relationship lines because I find the display too messy with them there.

That being said, I tried out your build and I found it actually really intuitive. So I'm all for a default of them being in the location of the display axis, but then giving the ability to offset them if you want, same as you can with the axis.

I don't think you need to have the ability to control the position of the child side of the relationship, because drawing that line to the tail of the bone would be super confusing.

hope that's helpful,
Jason

I don't often use relationship lines because I find the display too messy with them there. That being said, I tried out your build and I found it actually really intuitive. So I'm all for a default of them being in the location of the display axis, but then giving the ability to offset them if you want, same as you can with the axis. I don't think you need to have the ability to control the position of the *child side* of the relationship, because drawing that line to the tail of the bone would be super confusing. hope that's helpful, Jason

The new display doesn't distinguish between child and parent. It is not clear which one is which. It would get worse if one put the parent and child side by side.

Proposal: use of arrows (OR) gradient colored lines

The new display doesn't distinguish between child and parent. It is not clear which one is which. It would get worse if one put the parent and child side by side. Proposal: use of arrows (OR) gradient colored lines
Author
Member

I don't think you need to have the ability to control the position of the child side of the relationship, because drawing that line to the tail of the bone would be super confusing.

@JasonSchleifer do you mean something like this?

recording-2023-03-06_17.56.13.mp4

The new display doesn't distinguish between child and parent. It is not clear which one is which. It would get worse if one put the parent and child side by side.

Proposal: use of arrows (OR) gradient colored lines

@Jam3D I can see that this can get more confusing now that both lines can be on the same side of the bone (i.e. from head to head). I'll talk with @fclem about adding some shading.

> I don't think you need to have the ability to control the position of the child side of the relationship, because drawing that line to the tail of the bone would be super confusing. @JasonSchleifer do you mean something like this? [recording-2023-03-06_17.56.13.mp4](/attachments/db41d479-645e-45f3-a0ac-041b45d0db11) > The new display doesn't distinguish between child and parent. It is not clear which one is which. It would get worse if one put the parent and child side by side. > > Proposal: use of arrows (OR) gradient colored lines @Jam3D I can see that this can get more confusing now that both lines can be on the same side of the bone (i.e. from head to head). I'll talk with @fclem about adding some shading.

@dr.sybren interesting - I was thinking two separate sliders to keep it clear what each does. By having the relationship lines change by using the slider w/out clarifying in the UI, it would be confusing to the user.

I like @Jam3D 's note about clarifying child and parent by using gradient lines.. that could be useful.

@dr.sybren interesting - I was thinking two separate sliders to keep it clear what each does. By having the relationship lines change by using the slider w/out clarifying in the UI, it would be confusing to the user. I like @Jam3D 's note about clarifying child and parent by using gradient lines.. that could be useful.
Author
Member

I was thinking two separate sliders to keep it clear what each does

That's a good one too. Simple to implement, just have to build it.

Just for clarity, we're talking about this, right?

  1. Existing slider for the position of the coordinate axes.
  2. New slider for the position of the relationship line on the parent side.
  3. Child-side of the relationship line is always at the bone head.

I like @Jam3D 's note about clarifying child and parent by using gradient lines.. that could be useful.

I talked with @fclem and it's not that easy, unfortunately. In any case, this should probably be done for object relationships as well then, which makes it a bigger topic to discuss separately.

> I was thinking two separate sliders to keep it clear what each does That's a good one too. Simple to implement, just have to build it. Just for clarity, we're talking about this, right? 1. Existing slider for the position of the coordinate axes. 2. New slider for the position of the relationship line on the parent side. 3. Child-side of the relationship line is always at the bone head. > I like @Jam3D 's note about clarifying child and parent by using gradient lines.. that could be useful. I talked with @fclem and it's not that easy, unfortunately. In any case, this should probably be done for object relationships as well then, which makes it a bigger topic to discuss separately.

honestly I think the relationship lines are a big mess as a concept mostly when you have a rig, for 4 5 bones works great, but when you have a bunch of bones on top of eachother then its unusable, how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ?

honestly I think the relationship lines are a big mess as a concept mostly when you have a rig, for 4 5 bones works great, but when you have a bunch of bones on top of eachother then its unusable, how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ?

how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ?

Your suggestion is very helpful I think, but still we need relationship lines. When one wants to know about parent by looking at a child this doesn't help, or in cases when the rigger needs to have a quick overall look.

> how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ? > > Your suggestion is very helpful I think, but still we need relationship lines. When one wants to know about parent by looking at a child this doesn't help, or in cases when the rigger needs to have a quick overall look.
Author
Member

how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ?

That could work. We also could use options in the overlay panel to limit the relationship lines to only pointing at parents of selected bones, or only at children.

That could also address @Jam3D 's concern of lack of overview for riggers -- they can then just turn everything on.

I especially like having this as an overlay option, because it doesn't get stored in the rig itself. Every user of the rig can set up their file in the way they want for their workflow.

> how about selecting a bone hightlights its children with a "child" or "relationship" color, could be themable, or user defined directly in the overlay panel, so when you select a bone direct children could highlight with an outline of this particular color ? That could work. We also could use options in the overlay panel to limit the relationship lines to only pointing at parents of selected bones, or only at children. That could also address @Jam3D 's concern of lack of overview for riggers -- they can then just turn everything on. I especially like having this as an overlay option, because it doesn't get stored in the rig itself. Every user of the rig can set up their file in the way they want for their workflow.

@dr.sybren - your summary sounds right to me:

  1. Existing slider for the position of the coordinate axes.
  2. New slider for the position of the relationship line on the parent side.
  3. Child-side of the relationship line is always at the bone head.

p.s. I love the options to limit relationship lines to to parents and/or children of selected bones. great way to maintain focus!

@dr.sybren - your summary sounds right to me: 1. Existing slider for the position of the coordinate axes. 2. New slider for the position of the relationship line on the parent side. 3. Child-side of the relationship line is always at the bone head. p.s. I love the options to limit relationship lines to to parents and/or children of selected bones. great way to maintain focus!

@JasonSchleifer's idea of having sliders for both sides sounds interesting. I might use a slider that enabled a line to be drawn between parent's tail to child's head... though not sure I would have the inverse.

My preference would be head to head (i.e. pivot to pivot).

@Jam3D 's suggestion of arrows is something I have thought about as well. However, unless there's an option to turn them off, I feel they would start to clutter things up. Also, unless my thinking is off here... but if bones are connected in the same hierachy, you don't need to see markers for all hierarchical relationships. One you know the parent, the rest of the hierarchy is known.

The relationship lines are (will be) useful BECAUSE they are minimal. The dotted lines keep them easy to see, though also a transparent quality.

To kick a dead horse...
In dense structures such as the one pictured here, it's clear because it's clean, adding additional shapes like arrows would start to take away readability.

@JasonSchleifer's idea of having sliders for both sides sounds interesting. I might use a slider that enabled a line to be drawn between parent's tail to child's head... though not sure I would have the inverse. My preference would be head to head (i.e. pivot to pivot). @Jam3D 's suggestion of arrows is something I have thought about as well. However, unless there's an option to turn them off, I feel they would start to clutter things up. Also, unless my thinking is off here... but if bones are connected in the same hierachy, you don't need to see markers for all hierarchical relationships. One you know the parent, the rest of the hierarchy is known. The relationship lines are (will be) useful BECAUSE they are minimal. The dotted lines keep them easy to see, though also a transparent quality. To kick a dead horse... In dense structures such as the one pictured here, it's clear because it's clean, adding additional shapes like arrows would start to take away readability.

Something I just thought of...

... is how to make it more useful for rigs that actually have "connected" bones.

In the image example, the far left is the current method for displaying Relationship Lines. Feels a bit confusing as the relationships appear to draw into the middle of the controlled "connected" hierarchy pieces.

The middle example is using the prototype that @dr.sybren created, making it much easier to see what pivots are driving what segments (very noticable along the top edge, where you can see the "heads" of those structures are driven by the pivot at the base of the head.

However, in the far right example, I've swapped the bones for spheres, and this basically hides child/parent relationships for bones that are flagged as "Connected".

I don't want to get out of scope here, as the original focus was on the current relationship lines, but I am wondering if it is possible to display relationship lines for "connected" hierarchies?

Something I just thought of... ... is how to make it more useful for rigs that actually have "connected" bones. In the image example, the far left is the current method for displaying Relationship Lines. Feels a bit confusing as the relationships appear to draw into the middle of the controlled "connected" hierarchy pieces. The middle example is using the prototype that @dr.sybren created, making it much easier to see what pivots are driving what segments (very noticable along the top edge, where you can see the "heads" of those structures are driven by the pivot at the base of the head. However, in the far right example, I've swapped the bones for spheres, and this basically hides child/parent relationships for bones that are flagged as "Connected". I don't want to get out of scope here, as the original focus was on the current relationship lines, but I am wondering if it is possible to display relationship lines for "connected" hierarchies?
Author
Member

However, in the far right example, I've swapped the bones for spheres, and this basically hides child/parent relationships for bones that are flagged as "Connected".

Good point, but that's for #105466 ;-)

> However, in the far right example, I've swapped the bones for spheres, and this basically hides child/parent relationships for bones that are flagged as "Connected". Good point, but that's for #105466 ;-)
Author
Member

Ok, that's all implemented. Check the video below.

Ok, that's all implemented. Check the video below.

Video looks great! I think the slider for "Relations" could be simplified to a simple Boolean but no harm no foul. :)

Here are my 2 cents somewhat delayed.

  1. I think a global setting is fine. The granularity to have it per bone can work against you where you have to set it for each bone to start out with something workable.

  2. It should absolutely be its own setting. Not only that I feel it should not even be a slider but a simple Boolean. "Draw hierarchy line from root" yes/no or something to that extend. I don't want to mess up my axis system just because I want to change how the hierarchy is drawn.

  3. No. I personally can't think of a scenario where that would be a benefit. You either draw from the tip going by blenders flow (discarding whether that's good or not) or you go the other route because (for whatever reason) the tip is meaningless (be it orientation, size or both).

  4. This question confuses me. I feel a toggle to start the hierarchical line from the root instead of the tip would be a good fit. This means the old way is still present (I guess it would stay the default?) and its an active choice to have the display changed by checking the box.

Having some direction to the lines would be helpful since that is lost when they are drawn from root to root.

Something funny I just discovered while playing with these lines on; in pose mode the drawing of them is actually context sensitive to the current bone selection showing both children and parent. 😅 (I never realized this before because I never used them)

image

Video looks great! I think the slider for "Relations" could be simplified to a simple Boolean but no harm no foul. :) Here are my 2 cents somewhat delayed. 1) I think a global setting is fine. The granularity to have it per bone can work against you where you have to set it for each bone to start out with something workable. 2) It should absolutely be its own setting. Not only that I feel it should not even be a slider but a simple Boolean. "Draw hierarchy line from root" yes/no or something to that extend. I don't want to mess up my axis system just because I want to change how the hierarchy is drawn. 3) No. I personally can't think of a scenario where that would be a benefit. You either draw from the tip going by blenders flow (discarding whether that's good or not) or you go the other route because (for whatever reason) the tip is meaningless (be it orientation, size or both). 4) This question confuses me. I feel a toggle to start the hierarchical line from the root instead of the tip would be a good fit. This means the old way is still present (I guess it would stay the default?) and its an active choice to have the display changed by checking the box. Having some direction to the lines would be helpful since that is lost when they are drawn from root to root. Something funny I just discovered while playing with these lines on; in pose mode the drawing of them is actually context sensitive to the current bone selection showing both children and parent. 😅 (I never realized this before because I never used them) ![image](/attachments/24bf87d7-785f-46d7-afa0-8ff9a0dc9921)
180 KiB

@dr.sybren Love the latest demo video. That checks all my boxes.

Also agree with @jwvdronkelaar, points... which looks like are already addressed.

For current display options, I think a simple toggle is enough... BUT, my gut tells me there's future potential for the current slider setup to be exploited in interesting ways.

Last question is...
What will be the default of this slider setting? :P

@dr.sybren Love the latest demo video. That checks all my boxes. Also agree with @jwvdronkelaar, points... which looks like are already addressed. For current display options, I think a simple toggle is enough... **BUT**, my gut tells me there's future potential for the current slider setup to be exploited in interesting ways. Last question is... What will be the default of this slider setting? :P

Ok, that's all implemented. Check the video below.

I like that, I still think it should be a global overlay option rather than a per bone option because if i open your file and you set it up in a wonky way It could take forever to discover that a particular bone has options changed, and once again this is a decision made on a per artist basis so it shoud stay with the blender installation rather than the rig file

but cool !

> Ok, that's all implemented. Check the video below. > I like that, I still think it should be a global overlay option rather than a per bone option because if i open your file and you set it up in a wonky way It could take forever to discover that a particular bone has options changed, and once again this is a decision made on a per artist basis so it shoud stay with the blender installation rather than the rig file but cool !

@LucianoMunoz , its setup per Armature currently, same as axis display. Per bone would be... neat... but (agreed) it would also be a major headache to manage.

@LucianoMunoz , its setup per Armature currently, same as axis display. Per bone would be... neat... but (agreed) it would also be a major headache to manage.

Sorry yeah still shouldnt follow the scene file but the "local" viewing options as in depend on your blender not on where the file goes.

Sorry yeah still shouldnt follow the scene file but the "local" viewing options as in depend on your blender not on where the file goes.
Author
Member

@LucianoMunoz , its setup per Armature currently, same as axis display.

Indeed. I think it also makes sense, as I can totally see different rigs in one scene, one where the tip-to-root line makes sense, and another rig where the root-to-root line makes sense. Having such a thing as a personal global option would take away that flexibility IMO.

Per bone would be... neat... but (agreed) it would also be a major headache to manage.

👍 then let's not do that.

> @LucianoMunoz , its setup per Armature currently, same as axis display. Indeed. I think it also makes sense, as I can totally see different rigs in one scene, one where the tip-to-root line makes sense, and another rig where the root-to-root line makes sense. Having such a thing as a personal global option would take away that flexibility IMO. > Per bone would be... neat... but (agreed) it would also be a major headache to manage. :+1: then let's not do that.

Just watched the video - looks great!

Just watched the video - looks great!
Sybren A. Stüvel added this to the 3.6 LTS milestone 2023-03-13 11:38:09 +01:00
Author
Member

Closing as this landed in the main branch.

Closing as this landed in the main branch.
Blender Bot added the
Status
Archived
label 2023-03-21 16:18:44 +01:00
Sybren A. Stüvel removed this from the Animation & Rigging project 2023-03-21 16:18:55 +01:00

@dr.sybren Trying to find the referenced #105466, but it seems to be removed or moved (404 error here) ?

@dr.sybren Trying to find the referenced #105466, but it seems to be removed or moved (404 error here) ?
Author
Member

Weird. I think that should have been #106230

Weird. I think that should have been #106230
Sign in to join this conversation.
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
6 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#105489
No description provided.