Fix Animation Channel Selection Sync #74159

Open
opened 2020-02-24 11:27:11 +01:00 by Sybren A. Stüvel · 5 comments

There are several issues with the selection synchronisation mechanism between pose bones (and shader nodes) and animation channels (in the dope sheet etc.). This task aims to provide an improved implementation of this sync to address these reports:

  • #48145 (All bone drivers selected when reselecting bone)
  • studio/blender-studio#58718 (Clicking on Dope Sheet deselects all bones)
  • #62463 (Skeleton rig with keyframes prevents selection of Shader Nodetree channels in Dope Sheet and Graph Editor)
  • #71615 (Select key in dopesheet deselect bone in the viewport)
  • #73215 (Blender autokeying deselects objects channels but not Armatures.)

@Hjalti mentioned that it's probably better to synchronise less, that is, have the selections more separate. I'll talk with him, @PabloFournier, and @Mets in the Blender studio to come up with an initial proposal, which can then be fine-tuned here.

For me the trigger to start working on this was #62463 (Skeleton rig with keyframes prevents selection of Shader Nodetree channels in Dope Sheet and Graph Editor); in that situation it's really impossible to select certain channels.

There are several issues with the selection synchronisation mechanism between pose bones (and shader nodes) and animation channels (in the dope sheet etc.). This task aims to provide an improved implementation of this sync to address these reports: * #48145 (All bone drivers selected when reselecting bone) * studio/blender-studio#58718 (Clicking on Dope Sheet deselects all bones) * #62463 (Skeleton rig with keyframes prevents selection of Shader Nodetree channels in Dope Sheet and Graph Editor) * #71615 (Select key in dopesheet deselect bone in the viewport) * #73215 (Blender autokeying deselects objects channels but not Armatures.) @Hjalti mentioned that it's probably better to synchronise less, that is, have the selections more separate. I'll talk with him, @PabloFournier, and @Mets in the Blender studio to come up with an initial proposal, which can then be fine-tuned here. For me the trigger to start working on this was #62463 (Skeleton rig with keyframes prevents selection of Shader Nodetree channels in Dope Sheet and Graph Editor); in that situation it's really impossible to select certain channels.
Sybren A. Stüvel self-assigned this 2020-02-24 11:27:11 +01:00
Author
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Author
Member
Added subscribers: @Mets, @PabloFournier, @Hjalti, @dr.sybren, @LucianoMunoz, @WilliamReynish, @ZedDB, @jpbouza-4

So here is my take on it:

If i select a bone in the 3D view, the channels should appear in the animation editors (graph editor, dopesheet, etc), unselecting the bone in the 3D view will stop showing the corresponding channels in the animation editors (unless it is set to show everything no matter what the selection is)

Selecting the bone name in the animation editors should not alter the selection in the 3D Viewport, we should call this "highlighting" bone in the animation editors as its not selecting the bone itself just a meaning to do something to that channel in and only in the animation editors. meaning that both selections are synced unidirectionally from viewport to animation editors and not backwards..

Adding an option to sync back from animation editors to 3d view can be useful, it's just not what you want 90% of the time.

Example case
You see a bump in your animation and don't know where its coming from, you can select a few bones look at the curves, and see which one some strange from a far isolating that curve lets you know what that bone is, which you can follow back to the actual bone you want to handle.

If this is unclear, let me know if we can keep on refining this explanation.

So here is my take on it: If i select a bone in the 3D view, the channels should appear in the animation editors (graph editor, dopesheet, etc), unselecting the bone in the 3D view will stop showing the corresponding channels in the animation editors (unless it is set to show everything no matter what the selection is) Selecting the bone name in the animation editors should not alter the selection in the 3D Viewport, we should call this "highlighting" bone in the animation editors as its not selecting the bone itself just a meaning to do something to that channel in and only in the animation editors. meaning that both selections are synced unidirectionally from viewport to animation editors and not backwards.. Adding an option to sync back from animation editors to 3d view can be useful, it's just not what you want 90% of the time. Example case You see a bump in your animation and don't know where its coming from, you can select a few bones look at the curves, and see which one some strange from a far isolating that curve lets you know what that bone is, which you can follow back to the actual bone you want to handle. If this is unclear, let me know if we can keep on refining this explanation.
Author
Member

Tech note: It's the ANIM_sync_animchannels_to_data() that's responsible for doing (at least part of) the selection syncing. It's triggered from the window manager notification system.

Old value = 5
New value = 1
0x00000000057eb4d9 in animchan_sync_fcurve (UNUSED_ac=0x7fffffffd620, ale=0x60800018a228, 
    active_fcurve=0x7fffffffd5e0)
    at blender/source/blender/editors/animation/anim_deps.c:284
284               fcu->flag &= ~FCURVE_ACTIVE;
(gdb) bt
#0  0x00000000057eb4d9 in animchan_sync_fcurve (UNUSED_ac=0x7fffffffd620, ale=0x60800018a228, 
    active_fcurve=0x7fffffffd5e0)
    at blender/source/blender/editors/animation/anim_deps.c:284
#1  0x00000000057eba9c in ANIM_sync_animchannels_to_data (C=0x60d0000932e8)
    at blender/source/blender/editors/animation/anim_deps.c:348
#2  0x0000000006c355a3 in action_refresh (C=0x60d0000932e8, area=0x6100006b4548)
    at blender/source/blender/editors/space_action/space_action.c:790
#3  0x000000000505bb6e in ED_area_do_refresh (C=0x60d0000932e8, area=0x6100006b4548)
    at blender/source/blender/editors/screen/area.c:179
#4  0x0000000002bf4564 in wm_event_do_refresh_wm_and_depsgraph (C=0x60d0000932e8)
    at blender/source/blender/windowmanager/intern/wm_event_system.c:381
#5  0x0000000002bf664a in wm_event_do_notifiers (C=0x60d0000932e8)
    at blender/source/blender/windowmanager/intern/wm_event_system.c:566
#6  0x0000000002be1c73 in WM_main (C=0x60d0000932e8)
    at blender/source/blender/windowmanager/intern/wm.c:486
#7  0x00000000018b0e2b in main (argc=1, argv=0x7fffffffda28)
    at blender/source/creator/creator.c:519
Tech note: It's the `ANIM_sync_animchannels_to_data()` that's responsible for doing (at least part of) the selection syncing. It's triggered from the window manager notification system. ``` Old value = 5 New value = 1 0x00000000057eb4d9 in animchan_sync_fcurve (UNUSED_ac=0x7fffffffd620, ale=0x60800018a228, active_fcurve=0x7fffffffd5e0) at blender/source/blender/editors/animation/anim_deps.c:284 284 fcu->flag &= ~FCURVE_ACTIVE; (gdb) bt #0 0x00000000057eb4d9 in animchan_sync_fcurve (UNUSED_ac=0x7fffffffd620, ale=0x60800018a228, active_fcurve=0x7fffffffd5e0) at blender/source/blender/editors/animation/anim_deps.c:284 #1 0x00000000057eba9c in ANIM_sync_animchannels_to_data (C=0x60d0000932e8) at blender/source/blender/editors/animation/anim_deps.c:348 #2 0x0000000006c355a3 in action_refresh (C=0x60d0000932e8, area=0x6100006b4548) at blender/source/blender/editors/space_action/space_action.c:790 #3 0x000000000505bb6e in ED_area_do_refresh (C=0x60d0000932e8, area=0x6100006b4548) at blender/source/blender/editors/screen/area.c:179 #4 0x0000000002bf4564 in wm_event_do_refresh_wm_and_depsgraph (C=0x60d0000932e8) at blender/source/blender/windowmanager/intern/wm_event_system.c:381 #5 0x0000000002bf664a in wm_event_do_notifiers (C=0x60d0000932e8) at blender/source/blender/windowmanager/intern/wm_event_system.c:566 #6 0x0000000002be1c73 in WM_main (C=0x60d0000932e8) at blender/source/blender/windowmanager/intern/wm.c:486 #7 0x00000000018b0e2b in main (argc=1, argv=0x7fffffffda28) at blender/source/creator/creator.c:519 ```
Sybren A. Stüvel changed title from Fix Animation Channel and Bone Selection Sync to Fix Animation Channel Selection Sync 2020-10-16 10:14:47 +02:00
Author
Member

I posted a more elaborate analysis & proposal on devtalk: https://devtalk.blender.org/t/responding-to-selection-changes/15813

I posted a more elaborate analysis & proposal on devtalk: https://devtalk.blender.org/t/responding-to-selection-changes/15813
Philipp Oeser removed the
Interest
Animation & Rigging
label 2023-02-09 14:36:15 +01:00
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
2 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#74159
No description provided.