Regression: Make single User > Object Data Animation broken #95710

Closed
opened 2022-02-11 19:31:07 +01:00 by Piero · 17 comments

System Information
Operating system: Windows-10-10.0.19043-SP0 64 Bits
Graphics card: NVIDIA GeForce GTX 1080 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 472.84

Introduced in d0c5c67e94, then "broken" by c37121f16c, so didnt even make a single official release :/

Short description of error
I have several curves in a scene. One curve has Start/End Mapping animated. I link the other curves to the animated one, so they share the same Start/End Mapping values.
Then, I make the other curves single user, and I apply Object Data Animation.

At this point, I would expect to be able to adjust the key frames for the Start/End Mapping on the other curves individually, without affecting the previously linked ones. That's not the case if I do this via the f-curve in the Graph Editor.

The only way to adjust each Start/End Mapping animation individually, is to go through the NLA editor.

Exact steps for others to reproduce the error
#89369.blend

  • open .blend (4 curves with linked actions on the curve datablocks)
  • Object > Relations > Make Single User > Object Data Animation
  • result: action of the object datablocks gets duplicated
  • expected: action of the curve datablocks gets duplicated

Exact steps for others to reproduce the error (original report)

**System Information** Operating system: Windows-10-10.0.19043-SP0 64 Bits Graphics card: NVIDIA GeForce GTX 1080 Ti/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 472.84 Introduced in d0c5c67e94, then "broken" by c37121f16c, so didnt even make a single official release :/ **Short description of error** I have several curves in a scene. One curve has Start/End Mapping animated. I link the other curves to the animated one, so they share the same Start/End Mapping values. Then, I make the other curves single user, and I apply Object Data Animation. At this point, I would expect to be able to adjust the key frames for the Start/End Mapping on the other curves individually, without affecting the previously linked ones. That's not the case if I do this via the f-curve in the Graph Editor. The only way to adjust each Start/End Mapping animation individually, is to go through the NLA editor. **Exact steps for others to reproduce the error** [#89369.blend](https://archive.blender.org/developer/F13068707/T89369.blend) - open .blend (4 curves with linked actions on the curve datablocks) - `Object` > `Relations` > `Make Single User` > `Object Data Animation` - result: action of the object datablocks gets duplicated - expected: action of the curve datablocks gets duplicated **Exact steps for others to reproduce the error (original report)** - Open attached file or: - add 2 curves in a scene - In one curve make the Start/End Mapping animated. - Select both curves. The animated one has to be selected last to be the active - `Link Animation Data` ({key Ctrl L}) of the animated curve to the non animated one (it shares the same Start/End Mapping values) - Select one of the curves, go to {nav Object > Relations > Make Single User}, and finally `Object Data Animation`. - Edit the F-curve to change the animation Note that both curves continue with the linked animation. What goes against description of "Object Data Animation": https://docs.blender.org/manual/en/dev/scene_layout/object/editing/relations/make_single_user.html#bpy-ops-object-make-single-user [curve link animation.blend](https://archive.blender.org/developer/F12884175/curve_link_animation.blend)
Author

Added subscriber: @phoenixart

Added subscriber: @phoenixart

Added subscriber: @mano-wii

Added subscriber: @mano-wii

Changed status from 'Needs Triage' to: 'Needs User Info'

Changed status from 'Needs Triage' to: 'Needs User Info'

I edited the description to better follow the submission template and guidelines, but I don't understand the steps to replicate the bug, nor exactly which is the bug (maybe I need to get more familiar with animation).

(...) adjust the key frames for the Start/End Mapping on the other curves individually.

How do you "adjust"? Which curve? Do you want to remove animation from a curve but can't?
To make sure it's really a bug, it's good to ask on the community websites first: https://www.blender.org/community/

I edited the description to better follow the [submission template and guidelines](https://developer.blender.org/maniphest/task/edit/form/1/), but I don't understand the steps to replicate the bug, nor exactly which is the bug (maybe I need to get more familiar with animation). > (...) adjust the key frames for the Start/End Mapping on the other curves individually. How do you "adjust"? Which curve? Do you want to remove animation from a curve but can't? To make sure it's really a bug, it's good to ask on the community websites first: https://www.blender.org/community/
Author

@mano-wii What I meant is that, if I tweak the Start/End animated f-curve key-frames, it will affect all the other curves, even if I made those other curves "single user", and the object data animation has been applied.

For example, if I want to offset the other Start/End animation for the other curves, I cannot do it in the f-curve editor, they still share the same animation data, hence all curves will offset together, not individually.
Shouldn't Make Single User with Object Data Animation checked make it possible to tweak the animation of each curve individually even in the f-curve editor?

I asked in the Blender community already, that's where I got the advice to use NLA instead.

@mano-wii What I meant is that, if I tweak the Start/End animated f-curve key-frames, it will affect all the other curves, even if I made those other curves "single user", and the object data animation has been applied. For example, if I want to offset the other Start/End animation for the other curves, I cannot do it in the f-curve editor, they still share the same animation data, hence all curves will offset together, not individually. Shouldn't Make Single User with Object Data Animation checked make it possible to tweak the animation of each curve individually even in the f-curve editor? I asked in the Blender community already, that's where I got the advice to use NLA instead.

Sorry for taking so long to reply.
I see in the file that both objects share the same BezierCurveAction. So the result is expected?
Anyway, I'm trying to replicate the steps described but I can't reproduce the same state seen in the file.
So could you give us more clear instructions on how to reproduce it from scratch?

Sorry for taking so long to reply. I see in the file that both objects share the same `BezierCurveAction`. So the result is expected? Anyway, I'm trying to replicate the steps described but I can't reproduce the same state seen in the file. So could you give us more clear instructions on how to reproduce it from scratch?
Author

@mano-wii The result is not expected.

Let's start from scratch.

Here's the scenario. I have multiple Bézier curves, and I want to animate the Start & End Mapping for each curve.
In order to speed up the process, I animate the Start & End Mapping on the first curve, then I link the animation data to transfer the Start & End Mapping animation to the other curves.
Lastly, I need to offset the Start & End Mapping animation for each curve. I assume I can do this by opening the f-curve editor, and offset the key frames, but it turns out this is not possible.

Here are the steps for you to follow (in our example, we will only use two curves to keep the process simpler).

  • Create two Bézier curves. Now you have BezierCurve, and BezierCurve.001
  • Select BezierCurve. Under the Object Data Properties, go to Bevel, and add a Depth value (this is necessary in order to be able to animate the Start & End Mapping
  • Now that Start & End Mapping becomes available, make sure the timeline is at frame 1, and in the End property type 0, move the mouse cursor over the property field, and press "i" on the keyboard to add a key frame.
  • Move to frame 30 in the timeline. In the End property, type 1, and press "i" again on the keyboard to add a second key frame. Now, if you play the animation, you'll see the curve grow over time.

Let's split the viewport window. In the second window, let's open the f-curve editor. With BezierCurve we can indeed see two key frames for Start & End Mapping have been created.

This is the first part of the process.
At this point, I need to add the same type of animation to the other curves. Let's continue with the second part.

  • Select BezierCurve.001, and add some depth under Bevel as we did before for BezierCurve
  • While BezierCurve.001 is selected, hold the key SHIFT, and select BezierCurve (the one we previously animated).
  • With both curves selected, press CTRL + L, and pick Link Animation Data from the menu.
  • If you play the animation, both curves should grow over time, with the same exact timing.

Here comes the third part, where I need to offset the animation for BezierCurve.001. This is where things break.

  • Select BezierCurve.001. If the f-curve is still open, you can see the key frames for BezierCurve.001
  • On the timeline, go to frame 15. In the f-curve editor, let's offset BezierCurve.001 key frames. Of course, both curves will be affected by this operation, resulting in the same timing for the Start & End Mapping. That's not what we want.
  • With BezierCurve.001 still selected, open the Object menu, go to the item Relations, then Make Single User, and finally Object Data Animation. You can even bring back the last operation by pressing F9, and add the other options to the Make Single User command, by checking all of them. This won't change the result.
  • Now that we made the object data animation single user, you would expect to be able to finally offset the Start & End Mapping key frames for BezierCurve.001. That's not the case. They're still linked to BezierCurve

Therefore, the only way to achieve this simple operation, is to use the NLA editor.

I hope the issue is now clear.
Other users have confirmed that this is not working on their end either.

If this is the way it's supposed to work, it's confusing. If it's broken, then I think it needs some attention.

Please, let me know if this helps.


@mano-wii The result is not expected. Let's start from scratch. Here's the scenario. I have multiple Bézier curves, and I want to animate the **Start & End Mapping** for each curve. In order to speed up the process, I animate the **Start & End Mapping** on the first curve, then I link the animation data to transfer the **Start & End Mapping** animation to the other curves. Lastly, I need to offset the **Start & End Mapping** animation for each curve. I assume I can do this by opening the f-curve editor, and offset the key frames, but it turns out this is not possible. Here are the steps for you to follow (in our example, we will only use two curves to keep the process simpler). - Create two Bézier curves. Now you have **BezierCurve**, and **BezierCurve.001** - Select BezierCurve. Under the Object Data Properties, go to Bevel, and add a Depth value (this is necessary in order to be able to animate the **Start & End Mapping** - Now that **Start & End Mapping** becomes available, make sure the timeline is at frame 1, and in the End property type 0, move the mouse cursor over the property field, and press "i" on the keyboard to add a key frame. - Move to frame 30 in the timeline. In the End property, type 1, and press "i" again on the keyboard to add a second key frame. Now, if you play the animation, you'll see the curve grow over time. # Let's split the viewport window. In the second window, let's open the f-curve editor. With **BezierCurve** we can indeed see two key frames for **Start & End Mapping** have been created. This is the first part of the process. At this point, I need to add the same type of animation to the other curves. Let's continue with the second part. - Select **BezierCurve.001**, and add some depth under Bevel as we did before for **BezierCurve** - While **BezierCurve.001** is selected, hold the key SHIFT, and select **BezierCurve** (the one we previously animated). - With both curves selected, press CTRL + L, and pick Link Animation Data from the menu. - If you play the animation, both curves should grow over time, with the same exact timing. Here comes the third part, where I need to offset the animation for **BezierCurve.001**. This is where things break. - Select **BezierCurve.001**. If the f-curve is still open, you can see the key frames for **BezierCurve.001** - On the timeline, go to frame 15. In the f-curve editor, let's offset **BezierCurve.001** key frames. Of course, both curves will be affected by this operation, resulting in the same timing for the **Start & End Mapping**. That's not what we want. - With **BezierCurve.001** still selected, open the Object menu, go to the item Relations, then Make Single User, and finally Object Data Animation. You can even bring back the last operation by pressing F9, and add the other options to the Make Single User command, by checking all of them. This won't change the result. - Now that we made the object data animation single user, you would expect to be able to finally offset the **Start & End Mapping** key frames for **BezierCurve.001**. That's not the case. They're still linked to **BezierCurve** Therefore, the only way to achieve this simple operation, is to use the NLA editor. I hope the issue is now clear. Other users have confirmed that this is not working on their end either. If this is the way it's supposed to work, it's confusing. If it's broken, then I think it needs some attention. Please, let me know if this helps. ```

Changed status from 'Needs User Info' to: 'Confirmed'

Changed status from 'Needs User Info' to: 'Confirmed'

Thanks for the detailed information, now I was able to replicate it from scratch and in fact the result goes against the description in the manual.

Thanks for the detailed information, now I was able to replicate it from scratch and in fact the result goes against the description in the manual.
Member

Added subscriber: @BClark

Added subscriber: @BClark
Member

Added subscribers: @mont29, @dr.sybren, @lichtwerk

Added subscribers: @mont29, @dr.sybren, @lichtwerk
Member

Introduced in d0c5c67e94, then "broken" by c37121f16c, so didnt even make a single official release :/

@mont29, @dr.sybren : was there something wrong in the original design of {D11683}?

Introduced in d0c5c67e94, then "broken" by c37121f16c, so didnt even make a single official release :/ @mont29, @dr.sybren : was there something wrong in the original design of {[D11683](https://archive.blender.org/developer/D11683)}?
Philipp Oeser changed title from Start/End Mapping Make single user Object Data Animation only applies to NLA? to Regression: Make single User > Object Data Animation broken 2022-05-11 16:13:28 +02:00
Sybren A. Stüvel self-assigned this 2022-05-11 16:50:39 +02:00

was there something wrong in the original design of {D11683}?

Nope, just something wrong in the implementation. When first checking the animation data of ob->data, we should also pass ob->data to BKE_animdata_duplicate_id_action(...) and not ob ;-)

> was there something wrong in the original design of {[D11683](https://archive.blender.org/developer/D11683)}? Nope, just something wrong in the implementation. When first checking the animation data of `ob->data`, we should also pass `ob->data` to `BKE_animdata_duplicate_id_action(...)` and not `ob` ;-)

This issue was referenced by 2001ee6251

This issue was referenced by 2001ee625184502030a34576acd60cfaaa7aed5e

@lichtwerk that's just a dummy typo in c37121f16c I think, in single_objectdata_action_users it calls BKE_animdata_duplicate_id_action(bmain, &ob->id, USER_DUP_ACT | USER_DUP_LINKED_ID);, so duplicating action on the object, not its obdata...

@lichtwerk that's just a dummy typo in c37121f16c I think, in `single_objectdata_action_users` it calls `BKE_animdata_duplicate_id_action(bmain, &ob->id, USER_DUP_ACT | USER_DUP_LINKED_ID);`, so duplicating action on the object, not its obdata...

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Sybren A. Stüvel was unassigned by Bastien Montagne 2022-05-11 16:53:47 +02:00
Bastien Montagne self-assigned this 2022-05-11 16:53:47 +02:00
Bastien Montagne was unassigned by Sybren A. Stüvel 2022-05-11 16:55:06 +02:00
Sybren A. Stüvel self-assigned this 2022-05-11 16:55:06 +02:00
Member

Think it was id_obdata in d0c5c67e94, so yeah, thx! That is the spirit of lightspeed bugfixing :)

Think it was `id_obdata` in d0c5c67e94, so yeah, thx! That is the spirit of lightspeed bugfixing :)
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
7 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#95710
No description provided.