Scaling keys in dope sheet is different from graph editor (ignores handles, esp, noticable when scaling negative) #103802

Open
opened 2023-01-11 11:51:32 +01:00 by Serge Lyatin · 10 comments

System Information
Operating system:
Graphics card:

Blender Version
Broken: 3.4.0

Short description of error
Seems like if handles are not auto-clamped then Dope Sheet messes things up.

Exact steps for others to reproduce the error

In attached file duplicate and translate both keys further in timeline, also put timeline cursor between them:

  • With Graph Editor press S-1 to reverse new keys -> result is OK
  • CTRL Z to undo and repeat reversing in Dope Sheet -> bezier handles are processed incorrectly
    dopesheet_reverse.blend
**System Information** Operating system: Graphics card: **Blender Version** Broken: 3.4.0 **Short description of error** Seems like if handles are not auto-clamped then *Dope Sheet* messes things up. **Exact steps for others to reproduce the error** In attached file duplicate and translate both keys further in timeline, also put timeline cursor between them: - With *Graph Editor* press **S-1** to reverse new keys -> result is OK - **CTRL Z** to undo and repeat reversing in *Dope Sheet* -> bezier handles are processed incorrectly [dopesheet_reverse.blend](https://archive.blender.org/developer/F14141533/dopesheet_reverse.blend)
Author

Added subscriber: @SergeL

Added subscriber: @SergeL
Member

Added subscribers: @dr.sybren, @lichtwerk

Added subscribers: @dr.sybren, @lichtwerk
Member

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

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

The difference here is between:

  • TFM_TIME_SCALE / applyTimeScaleValue (Dopesheet)
  • TFM_RESIZE / createTransGraphEditData (Graph Editor)

The later sets handles to auto (afaict from quick glance) to compensate, the former ignores handles alltogether it seems.
This is not nice, surprised it hasnt been reported before, not sure if this will be considered a bug though (might be a borderline feature request).

@dr.sybren : this is worth keeping, right (will confirm for now)?

The difference here is between: - `TFM_TIME_SCALE` / `applyTimeScaleValue` (Dopesheet) - `TFM_RESIZE` / `createTransGraphEditData` (Graph Editor) The later sets handles to auto (afaict from quick glance) to compensate, the former ignores handles alltogether it seems. This is not nice, surprised it hasnt been reported before, not sure if this will be considered a bug though (might be a borderline feature request). @dr.sybren : this is worth keeping, right (will confirm for now)?
Philipp Oeser changed title from Reversing keys in dope sheet is different from graph editor to Scaling keys in dope sheet is different from graph editor (ignores handles, esp, noticable when scaling negative) 2023-01-11 15:21:39 +01:00
Philipp Oeser removed the
Interest
Animation & Rigging
label 2023-02-09 14:34:42 +01:00
Member

I wouldn't call this a bug per se, but the current behavior certainly doesn't seem properly thought out. So I think it deserves some proper consideration, and then we can change the behavior to whatever seems best.

I wouldn't call this a bug per se, but the current behavior certainly doesn't seem properly thought out. So I think it deserves some proper consideration, and then we can change the behavior to whatever seems best.
Nathan Vegdahl added this to the Animation & Rigging project 2023-05-01 11:48:24 +02:00
Member

@dr.sybren Mentioned to me that regardless of the decision (e.g. even if we decide it's best to leave as-is), the rationale for the differing behaviors should be documented in the code. Currently it is not.

@dr.sybren Mentioned to me that regardless of the decision (e.g. even if we decide it's best to leave as-is), the rationale for the differing behaviors should be documented in the code. Currently it is not.
Member

We discussed this in last week's animation module meeting, and the conclusion was that there are several related behaviors here that should be worked out holistically together:

  • How do (non-auto) key frame handle transforms work in the dope sheet/action editor.
  • How do (non-auto) key frame handle transforms work in the f-curves editor in various circumstances:
    • When only the keys are selected.
    • When the keys and handles are selected.
    • When the handles are hidden.

My proposal:

  • Whether handles are scaled/rotated or not should depend on whether those handles are selected. If they are selected, they're scaled/rotated. If not, then they aren't scaled/rotated.
  • Conceptually, handles are defined as relative to their keys. So keys should still translate their handles with them when scaling/rotating, even when the handles themselves aren't selected.
  • In views where the handles aren't visible (e.g. in the dope sheet, but also in the graph editor with handles hidden), selecting keys also automatically selects their handles. So in these views selecting keys and e.g. scaling them will scale their handles as well.
  • In views where the handles are visible, selecting keys does not automatically select their handles. So in these views (unless the handles are specifically selected as well) they don't get scaled/rotated.
  • Add graph editor operators (if they don't already exist) to select/deselect the handles of selected keys, to make it fast for the animator to get the selection (and thus behavior) they want.

The general rationale for this proposal is:

  • Blender has a "select what you want to operate on -> operate" interaction model, and this keeps animation editing consistent with that. So the behavior won't be surprising when coming from other parts of Blender.
  • This actually makes the graph editor more flexible than it is now, because it's current behavior is to always affect handles even when they aren't selected. So this is a more powerful editing model.
  • This can potentially be extended to more than just the transform operators: all selection-respecting operators could be made to respect handle selection as well, giving the animator more power in general to define what they're operating on.
  • When handles aren't visible (e.g. dope sheet), the animator is effectively working with the keys as a higher-level representation of the animation in that area, which includes the handles. So it makes sense to select the handles as well. And this leads to more intuitive behavior, where selecting part of the animation and scaling on x by -1 properly reverses the animation. And scaling by 2 properly slows the whole animation down. Etc.

Thoughts?

We discussed this in last week's [animation module meeting](https://devtalk.blender.org/t/2023-05-04-animation-rigging-module-meeting/29232#patch-review-decision-time-5), and the conclusion was that there are several related behaviors here that should be worked out holistically together: - How do (non-auto) key frame handle transforms work in the dope sheet/action editor. - How do (non-auto) key frame handle transforms work in the f-curves editor in various circumstances: - When only the keys are selected. - When the keys *and* handles are selected. - When the handles are hidden. ### My proposal: - Whether handles are scaled/rotated or not should depend on whether those handles are selected. If they are selected, they're scaled/rotated. If not, then they aren't scaled/rotated. - Conceptually, handles are defined as relative to their keys. So keys should still *translate* their handles with them when scaling/rotating, even when the handles themselves aren't selected. - In views where the handles **aren't** visible (e.g. in the dope sheet, but also in the graph editor with handles hidden), selecting keys also automatically selects their handles. So in these views selecting keys and e.g. scaling them **will** scale their handles as well. - In views where the handles **are** visible, selecting keys does **not** automatically select their handles. So in these views (unless the handles are specifically selected as well) they **don't** get scaled/rotated. - Add graph editor operators (if they don't already exist) to select/deselect the handles of selected keys, to make it fast for the animator to get the selection (and thus behavior) they want. The general rationale for this proposal is: - Blender has a "select what you want to operate on -> operate" interaction model, and this keeps animation editing consistent with that. So the behavior won't be surprising when coming from other parts of Blender. - This actually makes the graph editor *more* flexible than it is now, because it's current behavior is to always affect handles even when they aren't selected. So this is a more powerful editing model. - This can potentially be extended to more than just the transform operators: all selection-respecting operators could be made to respect handle selection as well, giving the animator more power in general to define what they're operating on. - When handles aren't visible (e.g. dope sheet), the animator is effectively working with the keys as a higher-level representation of the animation in that area, which includes the handles. So it makes sense to select the handles as well. And this leads to more intuitive behavior, where selecting part of the animation and scaling on x by -1 properly reverses the animation. And scaling by 2 properly slows the whole animation down. Etc. Thoughts?
Nathan Vegdahl self-assigned this 2023-06-05 10:43:23 +02:00
Member

Landed #111143, which adds an operator for changing the handle selection of selected keys.

Landed #111143, which adds an operator for changing the handle selection of selected keys.

@nathanvegdahl can this be closed or does it remain as a known issue

@nathanvegdahl can this be closed or does it remain as a known issue
Member

#111143 addressed one aspect of things, but doesn't resolve the issue. The remaining parts of my proposal (in the comment further up) still haven't been done. Additionally, I think the proposal itself needs more feedback from animators before we move forward with the rest of it. It's easy for things to sound good on paper, but be poor UX in practice.

In short: this should remain a known issue for now.

#111143 addressed one aspect of things, but doesn't resolve the issue. The remaining parts of my proposal (in the comment further up) still haven't been done. Additionally, I think the proposal itself needs more feedback from animators before we move forward with the rest of it. It's easy for things to sound good on paper, but be poor UX in practice. In short: this should remain a known issue for now.
Christoph Lendenfeld added
Type
Known Issue
and removed
Type
Report
labels 2023-11-07 10:21:36 +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 Assignees
4 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#103802
No description provided.