Forcefield F-curve modifier changes don't reset frames in memory #80121
Labels
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
5 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#80121
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
System Information
Operating system: Windows-10-10.0.18362-SP0 64 Bits
Graphics card: Radeon (TM) RX 470 Graphics ATI Technologies Inc. 4.5.14736 Core Profile Context 20.8.1 27.20.2001.13001
Blender Version
Broken: version: 2.91.0 Alpha, branch: master, commit date: 2020-08-25 19:28, hash:
396d39c6b9
Worked: (newest version of Blender that worked as expected)
Short description of error
When doing an simulation (tested it on cloth and rigid body sim), adjusting a F-curve modifier of a forcefield doesn't reset the frame in memory.
Exact steps for others to reproduce the error
Set up a basic simulation with and object and a forcefield. Add a F-curve modifier to the intensity of the forcefield. Change a setting in the modifier: the frames in memory don't reset.frames_in_memory.blend
Added subscriber: @ldelgrange
Added subscriber: @lichtwerk
Changed status from 'Needs Triage' to: 'Confirmed'
Can confirm, checking...
Added subscriber: @dr.sybren
@lichtwerk are you still working on this?
Yes
So have been looking at things - and things seem to be of a bit more general nature.
The animation system does not call RNA update functions IIRC, usually the UI does though.
So if you would tweak something associated with the FCurve the FCurve Modifier is on directly in the UI, its RNA update function gets called.
In the case of this report we are talking about a Forcefield Strength (so we need
rna_FieldSettings_update
to be called -- this takes care of doing the specific updates neededID_RECALC_TRANSFORM
/ID_RECALC_PSYS_RESET
)ANIM_animdata_update
-->ANIM_list_elem_update
-->RNA_property_update_main
(on fcu->rna_path)ANIM_animdata_update
as wellWhat updates happen with the UI for the FCurve Modifiers?
rna_FModifier_update
), again: not the corresponding property the FCurve is coupled withrna_FModifier_update
only does very general update tagging (rna_tag_animation_update
-- which now tags the Action ID_RECALC_ANIMATION, which also sounds pretty useless? )rna_FModifier_update
we have access to the Action (not the owning ID!), we could get the FCurves's rna_path, but for proper RNA updates, we would need the owning object ID instead?deg_update
[which sends NC_ANIMATION | ND_KEYFRAME | NA_EDITED notifiers, as well as tagging the Action ID_RECALC_ANIMATION -- but these are also not enough here]rna_FModifier_update
...So, I think what we should be after when tweaking the FModifiers UI is:
deg_update
workaround (already have parts of this done locally here)Stay tuned...
This seems to work nicely (and should enable us to get rid of lots of custom update code in FModifiers UI code)
P1658: #80121 WIP
Will test further and submit after the weekend
Added subscriber: @HooglyBoogly
@HooglyBoogly : I'll tweak the whole FModifier UI further in this respect, just getting you onboard early: do you think there is anything speaking againts this approach?
(the looping over all IDs is a bit unfortunate, but I dont see a quick way to solve this nicely)
@lichtwerk I assume you're referring to D7997?
I'll push the UI team to sign off on that patch. I've significantly cleaned up the UI code for FModifiers there, in many cases using proper RNA buttons which should connect to the RNA update functions.
There are still a few cases of
deg_update
left after that patch.From a pretty quick look I'll say that iterating over the entire bmain database does seem like an expensive thing to do in an RNA update function, but maybe that's fine.
Ah, from quick glance D7997 is what I meant with further cleanup.
But also from quick glance it would seem that even with D7997 we dont get the RNA updates from the underlying FCurve's property?
(so e.g. with the file from this report, you still should get the cache cleared when tweaking values in the FModifier? -- will also check later...)
Oh, you're right, and I think I get the problem now. Passing updates to a property / struct owner doesn't seem to be considered very much in RNA's design. I think
RNAUpdateCb
is used ininterface_templates.c
to get around this same problem.In that case, I'm not sure why this is only broken for forcefields. Huh
I assume FModifiers are updating less than promised (aka "broken") for more than Forcefields, yes. Might be that DEG tagging is enough for many things, but not the same as proper RNA update functions.
The Action depsgraph node contains an Animation component. By tagging it, the users of the action are also re-evaluated. Here is an example depsgraph of two cubes using the same action:
In that case I think that we should move code out of the RNA update functions. Looping over all datablocks just to find the users of an action shouldn't be necessary, the depsgraph already contains the required information (and if it doesn't, maybe that's a sign that it should be extended).
OK, thx clearing that up, will have to dig a little deeper then
Added subscriber: @brecht
So the reason (on the depsgraph side) why
rna_FieldSettings_update
causes the pointcache to be cleared is tagging itID_RECALC_TRANSFORM
there.If this is done, pointcache gets cleared during evaluation because of this relation in
DEG_add_forcefield_relations
:On the FModifier UI side, the Action is tagged
ID_RECALC_ANIMATION
.If that is done, sure, the animation system will eventually call
animsys_evaluate_fcurves
, that in turn will set the RNA property, but it will not update the property.This is what I meant by "The animation system does not call RNA update functions IIRC, usually the UI does though."
This is old, see e.g.
Regarding this:
I am not sure about this. IIRC, it was even the case once that code in RNA update functions was called from the animation system, but changed for performance reasons.
There is just two levels of updating things. Moving the particular pointcache relation from
DEG_OB_COMP_TRANSFORM
to genericDEG_OB_COMP_ANIMATION
in the depsgraph would probably just slow things down too much (tested this, but wasnt working at all)?On the other hand, I'll have to do some more learning to see if DEG could be granular enough to handle forcefields better than just DEG_OB_COMP_TRANSFORM (or DEG_OB_COMP_GEOMETRY)
Still think that for tweaking stuff in the UI one could expect the RNA updates to be called, D9031: FModifers RNA update: call corresponding FCurve properties RNA update as well could actually work (dont know how to get around the looping though)
This issue was referenced by
48a0c931ee
Changed status from 'Confirmed' to: 'Resolved'