Different results when keyframing visual transforms and applying transforms manually on IK constraint #76791
Open
opened 2020-05-15 21:06:26 +02:00 by sok0
·
23 comments
No Branch/Tag Specified
temp-sculpt-dyntopo
main
asset-shelf
blender-v3.6-release
temp-sculpt-dyntopo-hive-alloc
brush-assets-project
blender-v3.3-release
tmp-usd-python-mtl
asset-browser-frontend-split
node-group-operators
blender-v2.93-release
universal-scene-description
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
xr-dev
principled-v2
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
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 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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
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#76791
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
Blender Version
Broken: v2.82a and blender-2.90-f9d0f59bed4d-windows64
Working: never, tested with 2.75a and that even shows this issue.
Short description of error
There is a difference between using the insert keyframe menu to insert Visual LocRot compared to if you Apply Visual Transform to Pose and then use normal keyframe LocRot.
Exact steps for others to reproduce the error
keyframe-visual-root.blend
Using Keyframe Menu (broken):
2020-05-15 11-24-58.mkv
Iterating Keyframe Insertion (Semi-working):
2020-05-15 12-02-32.mkv
Manually applying transforms to Pose (working):
2020-05-15 11-29-47.mkv
Added subscriber: @sok0
#81302 was marked as duplicate of this issue
Added subscriber: @mano-wii
Changed status from 'Needs Triage' to: 'Needs User Info'
Could you provide a simple .blend file demonstrating the problem?
Also videos should be used to quickly describe the problem and not as steps to reproduce the problem.
A guideline for making a good bug report can be found at https://wiki.blender.org/wiki/Process/Bug_Reports
IK_constraint_keyframe.blend
Armature was keyframed with Visual LocRot
Armature.001 was keyframed after using Apply Visual Transform to Pose
Expected result should be the same. Instead the Visual LocRot does not properly keyframe the pose position of the IK constraint.
Changed status from 'Needs User Info' to: 'Needs Triage'
Added subscriber: @dr.sybren
@sok0 Please test with older versions of Blender to see which version of Blender still worked properly. This will help developers in finding the root cause of the issue.
For videos, please use h.264 in an MP4 container, so that they can be directly played back in the browser. Re-encoding them after the recording will make them much smaller (I have them stored at a 1/35th the file size on my machine after locally re-encoding them).
Changed status from 'Needs Triage' to: 'Confirmed'
I tested with few older versions. As you go back in the versions it never seemed to work and at some point the Apply Visual Transform to Pose operation stops working as well so it's not possible to test further.
2.79b not working, same behavior
2.77a not working, same behavior
2.60 not working, apply pose as rest pose doesn't work either
Blender 2.5 doesn't work and apply pose as rest pose doesn't work either
got it
@sok0 thanks for testing. I did some digging, and it's due to the way visual keying is implemented in Blender (
visualkey_can_use()
inkeyframing.c
). It will fall back to regular keying when there is no parent bone and no constraint on the bone either. This "no constraint" check does not consider IK-chains on child bones, which is why the root bone of the chain isn't keyed correctly. This has been pretty much been the situation since the code was ported to Blender 2.50 (6343d4e233
) 11 years ago.This can be resolved by simply always performing visual keying when a user chooses that from the keying set menu, regardless of whether there are any constraints. This would be a bigger change than is currently possible for Blender 2.83, though. First and foremost, this change in behaviour should be discussed with more animators, which I'll do.
@sok0 Is visual keying part of your day-to-day workflow? Or is it just something you're trying out?
@dr.sybren I came across the bug on a side project to write my own IK solver algorithm and wanted to compare my results to what Blender produced. I was creating an animation for a robot arm and wanted to see what the difference would be between joint interpolated motion and Cartesian interpolated motion of the end effector. Joint interpolated motion required visual keying of the start and ending frame rotations of each joint while Cartesian interpolation used the IK constraint and only keyed the IK target then letting the IK solver calculate new joint rotations on every frame. When I was not getting the expected results for the joint interpolated motion I realized there might be a bug and traced it back to visual keying. Hopefully that answers the question, let me know if there is any other way I can help.
Added subscribers: @wbmoss_dev, @Hjalti, @BassamKurdali
The people I have talked with (@BassamKurdali , @Hjalti, @wbmoss_dev) have all expressed that they perceive Visual Keying as buggy, and that this is why they don't use it in their day-to-day workflow. It seems that Visual Keying, even though the idea looks nice, needs a redesign to become usable in practice.
As such, I'll mark this down as a known issue. In time we can create a design task and make this work properly.
Added subscribers: @netricsa, @iss
Added subscriber: @0xb
was there a design task created for this? Just wondering how it's going.
@dr.sybren you mentioned above that the people you spoke with don't use visual keying. I'm wondering, what's the alternative if you're wanting to transition from IK to FK?
I'm using visual keying to key the position of the bones post IK constraints, so that when I disable the IK constraint the FK bones will remain in the same location. Really interested to know which alternative method is possible.
actually, I think I realise now they must be applying visual transform to pose and then inserting a standard keyframe (not visual), as I now understand that all 'apply visual transform to pose' does, is move the selected bones to the constrained position they're in, so that when you insert standard location rotation (not visual) keyrframes, the keyframes are created in the visual location. Very odd how keyframing this way works, but inserting a visual location rotation keyframe doesn't.
Perhaps instead of a full redesign (which appears to not be happening based on the 3 year elapsed time), just make inserting a visual location/rotation keyframe do the following:
apply visual transform to pose
insert standard location rotation keyframe.
Wow this has been around a while, and I am in agreement at least that I am not clear at all now on why/what visual keying is doing if it isn't applying the visual transform and keying that.
I think now is a good time to see if a small change can make this intuitive to use and we can update the documentation as well.
With what I said in my earlier comment in mind, this might be fairly doable to address for Blender 4.0.