Commit Graph

1397 Commits

Author SHA1 Message Date
2f2ba04c60 Fix T63574: missing implicit parent bone dependency in proxies.
Although technically evaluating the proxy copy nodes doesn't require
the parent bone to be copied, other nodes that depend on the bones
sometimes expect the parent to be ready. To meet this expectation
it's necessary to add the dependency to the graph.
2019-04-15 19:54:03 +03:00
3731729b96 Depsgraph: fix hard CTD on dependency cycles through POSE_INIT.
As reported in T63582, it can cause chan_array to be not ready.
To reliably avoid crashing, the only easy way seems to be to
create the index during COW -- maybe @sergey has a better idea.
2019-04-14 21:55:30 +03:00
6a59e12364 Fix T59622: dependency problems with Spline IK.
The bug is caused by problems in the dependency graph. Unfortunately,
fixing is not just a matter of fixing the graph, because correct
dependencies would cause a cycle here and in other reasonable use
cases. The real fix thus requires refactoring Spline IK to require
curve data only in the actual evaluation phase, and not in POSE_INIT_IK.

In addition, this separates the normal bone evaluation loop from
Spline IK computations for two reasons:

- That still needs to be done even if spline IK can't evaluate
  due to missing curve data.

- It should reduce issues with induced shearing, as Spline IK now
  controls how parent-child relations are handled in the chain, and
  can take care to only carry over rotation and location.
2019-04-14 18:59:27 +03:00
47adab4f99 CMake: prepare for BLENDER_SORTED_LIBS removal
No functional change, this adds LIB definition and args to cmake files.
Without this it's difficult to migrate away from 'BLENDER_SORTED_LIBS'
since there are many platforms/configurations that could break when
changing linking order.

Manually add and enable WITHOUT_SORTED_LIBS to try building
without sorted libs (currently fails since all variables are empty).
This check will eventually be removed.

See T46725.
2019-04-14 15:37:24 +02:00
90e760270a Depsgraph: fix debug print crash on IK constraint without target. 2019-04-14 13:49:35 +03:00
3d8790faf1 Fix T62048: crash when turning off curve path animation with Spline IK.
Both fix missing depsgraph flag, and gracefully give up on missing data.
2019-04-13 17:36:57 +03:00
b5d1e0ad1e Cleanup: spelling 2019-04-10 00:38:47 +10:00
22bc9fb4a9 Cleanup: style 2019-04-04 08:13:13 +11:00
ba2a81bcf1 Fix T62817: Can't drive modifier property with another one
Random place in the modifier stack can not be referenced,
so it doesn't make sense to sue GEOMETRY component as a
FROM operation.

So now drivers on modifiers are driving GEOMETRY component,
but are using PARAMETERS as a source for variables.
2019-04-03 14:50:21 +02:00
6470056a0d Cleanup: empty expression statement warning 2019-04-02 17:54:04 +11:00
af6df8416e Cleanup: Indentation
Got broken in the previous commit somehow.
2019-04-01 16:33:28 +02:00
9ddf0c9d38 Fix memory leak in armatures with no bones
The cleanup operation was never run for such armatures.
2019-04-01 16:09:26 +02:00
c14e6ee9a4 Cleanup: Line wrapping 2019-03-29 15:41:13 +01:00
a942d8859c Cleanup: Spelling in comment 2019-03-29 15:33:44 +01:00
1def03d797 Fix T62938: Rigid body crash with surface effector
Missing dependency graph relation from geometry to simulation,
which made simulation to use evaluated mesh while it is being
evaluated.
2019-03-29 10:27:57 +01:00
9f55beb971 Cleanup: Make it obvious which relations are used
Relation in dependency graph is something else. So make it clear
that those are the effector ones.
2019-03-29 10:21:36 +01:00
a016ad2ea8 Fix part of T60735: invalid CD_ORIGINDEX data in some modifier stack evaluations.
BKE_mesh_new_nomain automatically added a CD_ORIGINDEX layer initialized to 0,
which was never filled in correctly. In 2.7 the equivalent function used to
modify the source derivedmesh and add valid original indices to it, but this
is no longer possible in the new design and was quite unpredictable anyway.

Now instead rely on mesh_calc_modifiers and the depsgraph to determine when
CD_ORIGINDEX should be added.
2019-03-28 20:02:59 +01:00
5bcca7ae92 Depsgraph: Fix dependency cycle when adding rigid body
Was a mistake in the recent change.

The idea here is: manual should invalidate point cache, but
rigid body simulation should only happen after point cache
was ensured to be in the correct state.
2019-03-28 11:04:00 +01:00
14e013758d Depsgraph: Standardize parameters nodes
Makes it possible to handle them the same from drivers
relations builder.

Solves missing operations errors printed when opening
autumn character.
2019-03-26 11:05:18 +01:00
abd18f6ec0 Cleanup: style 2019-03-25 11:42:28 +11:00
2b21e7ab9a Fix T62768: Softbody cache still not updated correctly
There was missing flush from transform update to the point cache
reset. Caused by the fact that when update happens in the "middle"
of component all the component operations will be tagged for update
(since the intermediate state is not stored), but that will not
flush updates to other operations since that would cause too much
of updates.

This now we tag point cache for reset after evaluation operation
but before final transform and before rigid body world.
2019-03-21 14:41:41 +01:00
2f4bd63239 Fix T56778: Alembic Override Frame does not update on playback 2019-03-20 16:48:35 +01:00
099a410478 Depsgraph: Fix cycle with rigid body and Weight Proximity
The issue is a feedback loop with point cache reset operation.

Solved by introducing extra node which ensures object's transformation
is ready for simulator input. Allows to route relations without causing
a fake dependency cycle now.
2019-03-20 16:37:15 +01:00
3508ffc34c Fix T59449: Particle system creates error in rigid body
Is a dependency cycle problem. Fix is similar to what is done in 024f5ba2bd.
2019-03-20 15:18:47 +01:00
4e0b5a0baf Cleanup: style 2019-03-21 01:01:27 +11:00
85685c7bdc Fix T62622: Animating vertex does not update viewport
Missing dependency graph update due to wrong relation.
2019-03-19 16:00:58 +01:00
e7fd6c8f30 Cleanup: comment blocks 2019-03-19 15:17:46 +11:00
8fb0b9aebb Subdiv: Enable topology cache in edit mode
The general idea of this change is to have a runtime data pointer
in the ModifierData, so it can be preserved through copy-on-write
updates by the dependency graph.

This is where subdivision surface modifier can store its topology
cache, so it is not getting trashed on every copy-on-write which
is happening when moving a vertex.

Similar mechanism should be used by multiresolution, dynamic paint
and some other modifiers which cache evaluated data.

This fixes T61746.

Thing to keep in mind, that there are more reports about slow
subdivision surface in the tracker, but that boils down to the
fact that those have a lot of extraordinary vertices, and hence
a lot slower to evaluated topology.
Other thing is, this speeds up oeprations which doesn't change
topology (i.e. moving vertices).

Reviewers: brecht

Reviewed By: brecht

Maniphest Tasks: T61746

Differential Revision: https://developer.blender.org/D4541
2019-03-18 17:11:43 +01:00
6490626077 Depsgraph: Store original modifier pointer
Currently not needed that much, but will ease some further
development which is related on preserving runtime modifier
data.
2019-03-18 15:53:18 +01:00
01c5335422 Cleanup: Comments 2019-03-18 15:53:18 +01:00
4d2672ca7f Cleanup: C++ style of structure definition 2019-03-18 12:47:18 +01:00
Miguel Porces
9e152f919f Python API: add Python-defined node groups for shaders and compositing.
This was already supported for Cycles shader nodes, but now also works for
Eevee and compositing nodes. Instead of a generic NodeCustomGroup, now
there is ShaderNodeCustomGroup and CompositorNodeCustomGroup that can be
subclassed and registered.

Differential Revision: https://developer.blender.org/D4370
2019-03-16 20:36:35 +01:00
b9af4efe41 Cleanup: fix compiler warnings. 2019-03-16 20:21:16 +01:00
35b78d9807 Cleanup: indentation, wrapping
Mostly functions wrapping args, not confirming to our style guide.
2019-03-15 09:54:30 +11:00
4e17197597 Fix T62521: Fake dependency cycle with spline IK
The core was hooking up relation to a wrong operation, in an
attempt to cause proper full update of the pose (since there
is no intermediate state stored anywhere). This is now done
as a part of flush_handle_component_node(), so can properly
route more granular relation.

This fixes the crash which was caused by an access of partially
evaluated data by solving the fake cycle. However, if there
is a real cycle involved the code will still not survive, but
this is more generic issue (which also includes modifiers
for meshes and curves).

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D4509
2019-03-13 17:26:17 +01:00
0e9ea707b5 Fix T58721: Keyframing one transform option reset other transforms
Use dedicated flag to tag animation just for copy-on-write synchronization,
which makes it so copies of the original data blocks gets in sync with the
original ID. This will not flush the animation update to all objects which
depend on that animation.

If such flush is required, use ID_RECALC_ANIMATION.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D4508
2019-03-13 15:51:44 +01:00
Jose C. Rubio
76437b903d Fix T60185: Crash on adding Inverse Kinematics
When having loops in a kinematic chain and also a IK constrain,
the solve_cycle function removes graph relations necessary to ensure
the cleanup operation was running at the very end.

Due to his Blender was crashing when some operations (the bone
constraints) accessed a pointer that was already freed.

Solved by adding more relations between crucial nodes.
2019-03-13 15:16:28 +01:00
c10d011cc5 Fix T62457: Crash with rigid body and disabled objects
Need to always ensure objects form rigid body wortld are part
of dependency graph.
2019-03-12 15:27:43 +01:00
ca06b84900 Fix T62470: instanced object does not preserve bounds display type.
Inheriting the display type from the instancer should only happen if it's
a simpler one.
2019-03-12 13:40:31 +01:00
022ad41670 DRW: use object color from instancer
Otherwise it's impossible to set the color of instanced library objects.

Follows convention of instancer controlling draw options.
2019-03-12 12:28:01 +11:00
01dec326ed Fix T62366: Grease pencil material color keying
Do proper tagging for material changes, and avoid grease-pencil hack
in the relations builder.

The dependency graph code was forcing animation to be run for any
copy-on-write change of material. However, animation is not supposed
to be run on copy-on-write changes.
2019-03-11 16:49:52 +01:00
836f3494d7 Fix T62059: Driver not updating in Color Ramp
Reviewers: sergey

Differential Revision: https://developer.blender.org/D4497
2019-03-11 16:10:22 +01:00
422d4541f4 Depsgraph: Add missing parameters for node trees
This allows to have drivers on node trees.

Probably now it will be better to simply add parameters for any
ID node, to avoid such amount of manual work.

Initial idea was to not have nodes if it's not needed to avoid
any possible overhead. Having more robust system is probably more
valuable. We can always optimize overhead in one way or another.
2019-03-11 15:33:57 +01:00
729a1ab6a0 Despgraph: Make dupli objects inherit the parent's display type
Fix T61152 Instanced Collections Don't Honor Viewport Display Setting
2019-03-11 14:03:31 +01:00
cee7c36cbd Depsgraph: Fix missing relation when driving image offset
Related on T61937.
2019-03-08 18:13:26 +01:00
89fa6a7a06 Fix T60900, T61111, T61963: node values stuck after clearing keyframes.
This removes special dependency graph code that was intended to avoid GPU
shader recompiles by preserving the node tree and GPU material in specific
cases. This is no longer needed now that we have a general shader pass
cache that compares the generated shader code. The GPU material is already
being freed in material and world eval as well, so there's no point.

Note also that GPU materials are now safe to free from threads, actual
OpenGL buffer freeing happens delayed.
2019-03-08 15:16:08 +01:00
6752022310 Fix T62327: Multires with Particles: Undo not working
Modifier stack was forced to be re-evaluated when it was not
supposed to. Should also improve sculpt performance.
2019-03-08 14:38:28 +01:00
8f817de0cb Cleanup: use plural names for Main lists
Convention was not to but after discussion on 918941483f we agree its
best to change the convention.

Names now mostly follow RNA.

Some exceptions:

- Use 'nodetrees' instead of 'nodegroups'
  since the struct is called NodeTree.
- Use 'gpencils' instead of 'grease_pencil'
  since 'gpencil' is a common abbreviation in the C code.

Other exceptions:

- Leave 'wm' as it's a list of one.
- Leave 'ipo' as is for versioning.
2019-03-08 09:50:00 +11:00
ab0bc65c24 Refactor CDData masks, to have one mask per mesh elem type.
We already have different storages for cddata of verts, edges etc.,
'simply' do the same for the mask flags we use all around Blender code
to request some data, or limit some operation to some layers, etc.

Reason we need this is that some cddata types (like Normals) are
actually shared between verts/polys/loops, and we don’t want to generate
clnors everytime we request vnors!

As a side note, this also does final fix to T59338, which was the
trigger for this patch (need to request computed loop normals for
another mesh than evaluated one).

Reviewers: brecht, campbellbarton, sergey

Differential Revision: https://developer.blender.org/D4407
2019-03-07 11:29:50 +01:00
85b667716a Cleanup: style 2019-03-06 10:51:11 +11:00