Commit Graph

1220 Commits

Author SHA1 Message Date
cf2e35fcfe Fix T58118: Make duplicates real does nothing
The issue was caused by transflag set in geometry evaluation
never copied back top original object.

Now we have a dedicated operation which does all sort copy
back to original object, so we don't have to worry about
atomic assignments or what gets set where.

Still need to move boundbox to the same function, but it
needs some careful doublechecking first.
2018-12-04 16:04:10 +01:00
b97cd0e690 Depsgraph: execute all COPY_ON_WRITE nodes first as a separate stage.
COW nodes in the graph are mostly connected via a relation type
that doesn't propagate the update flags. Unfortunately, due to
the scheduling implementation that means the relations don't
actually guarantee execution order for indirect dependencies.
Relations also don't guarantee order in case of cycles.

As mentioned in IRC, the simplest way to fix possible problems
is to execute all COW nodes as a separate execution stage. This
seems to fix crashes with Data Transfer modifier in a cycle.

Staging works by simply delaying actual scheduling of tasks for
non-COW nodes until the second run of schedule_graph.

Reviewers: sergey

Differential Revision: https://developer.blender.org/D4027
2018-12-04 14:08:50 +03:00
9637a17856 Depsgraph: immediately free object's derived caches in the COW step.
After update of the mesh some of that data is so broken that using
it would crash. To reduce the risk of crashes in case of dependency
cycles, clean it up immediately.
2018-12-03 20:48:47 +03:00
bb16167fd8 Depsgraph: completely move customdata_mask to the ID node.
Move all mask-related fields from Object and OperationDepsNode
to Object_Runtime and IDDepsNode. Auto-apply DEG_TAG_GEOMETRY
if the mask changes after DEG rebuild. Update DEG API and all
code that uses it.

This fixes "source mesh data is not ready" errors from Data
Transfer modifier when parameters are changed in the UI after
the recent mesh_get_eval_final fix.

Reviewers: sergey

Differential Revision: https://developer.blender.org/D4025
2018-12-03 18:29:06 +03:00
f880b60353 Depsgraph: Add missing cache file handling in build_id() 2018-12-03 16:05:17 +01:00
1983a52e04 Depsgraph: assert that mesh_get_eval_final/deform aren't used in eval.
Using those functions during multithreaded evaluation is a sure
way to have a race condition and crash.
2018-12-03 17:01:02 +03:00
55b31dd98c Merge branch 'master' into blender2.8 2018-12-02 14:37:04 +11:00
a9bd788348 Cleanup: style 2018-12-01 08:15:25 +11:00
8f8c238659 Merge branch 'master' into blender2.8 2018-11-30 15:11:32 +11:00
8c85f1316c Cleanup: name macros w/ matching BEGIN/END 2018-11-30 15:08:47 +11:00
4c31bed6b4 Fix T57981: Crash entering sculpt mode 2018-11-30 11:46:42 +11:00
2bd62b076f Outliner/visibility: revert changes for now until we find better solutions.
See T57857 for discussion. This reverts:

"Outliner: Do not gray out empty collections"
4521d3e707.

"Remove eye column from the outliner"
fd16b35997.

Fix/workaround issues in pose and edit mode"
6d2e2e30d5.

"Per view-layer collection visibility"
4de6a210c6.
2018-11-28 14:34:13 +01:00
Dalai Felinto
4de6a210c6 Per view-layer collection visibility
We still control this in the viewport collections visibility menu. But
now we are actually changing the visibility of the collections, not of
the objects.

If a collection is indirectly invisible (because one of its parents are
invisible) we gray it out.

Also if you click directly in the collection names, it "isolates" the
collection by hiding all collections, and showing the direct parents and
all the children of the selected collection.

Development Note:

Right now I'm excluding the hidden collections from the depsgraph.
Thus the need for tagging relations to update.

If this proves to be too slow, we can change.
2018-11-28 02:33:04 -02:00
fb262f942e Cleanup: style, includes 2018-11-27 08:01:54 +11:00
Dalai Felinto
4c3ed98ca2 Local View
Bring back per-viewport localview. This is based on Blender 2.79.
We have a limit of 16 different local view viewports.

We are using both the numpad /, as well as the regular /.

Missing features:
* Hack to make sure lights are always visible.
* Make rendered mode with external engines to support this as well
  (probably just need to support this in the RNA iterators).
* Support over 16 viewports by taking existing viewports out of local view.

The code can use a cleanup pass in the future to unify the test to see
if an object is visible (or we can use TESTBASE in more places).
2018-11-25 09:50:34 -02:00
1e820898ff Depsgraph: add a new operation node for computing B-Bone segments.
Computing the shape of a B-Bone is a quite expensive operation, and
there are multiple constraints that can access this information in
a variety of useful ways. This means computing the shape once per
bone and saving it is good for performance.

Since the shape may depend on the position of up to two other bones,
often in a "cyclic" manner, this computation has to be a separate
node with its own dependencies.

Reviewers: sergey

Differential Revision: https://developer.blender.org/D3975
2018-11-23 23:19:23 +03:00
6a3451fe4e Depsgraph: Ensure solver cleanup order
Ensure that pose cleanup is never run before all IK solvers are finished.
2018-11-22 16:17:18 +01:00
60857cdb79 Depsgraph: Cleanup, line wrapping 2018-11-22 16:17:18 +01:00
a20d350dd5 Depsgraph: Cleanup, make it easier to create relations with flags 2018-11-22 16:17:18 +01:00
d3e686d61e Depsgraph: Update comment 2018-11-21 16:29:22 +01:00
2a354dd4bd Depsgraph: Allow flush of CoW tag from Action
This way we guarantee that action tagged for CoW will ensure
order of updates with objects which are using it.

Fixes T57870: Scaling keyframes in Graph Editor causes crash
Fixes T57971: Moving keys in the Dopesheet crashes with Segfault 11
Fixes T57530: Moving keys on a rig, Crash
Fixee T57491: Crash when trying to move keyframe in dope sheet
2018-11-21 16:21:24 +01:00
b6693f1f54 Depsgraph: Cleanup, use more clear name
Five years later since the original commit, is probably not so bad
timing on calling things by their clear name.
2018-11-21 14:52:42 +01:00
4dc639ac99 Speedup rigs with multiple objects deformed by bbones
Previously each of the objects which has armature modifier will
request deformation matricies from bbones. Thing is, all those
deformations are the same and do not depend on object which is
being modified. What's even worse is that this calculation is
not cheap.

This change makes it so bbones deformation is calculated once
and stored in the armature object. After this armature modifiers
simply use it.

With a rigs we've got here dependency graph evaluation time
goes down from 0.02 sec to 0.012 sec.

Possible further optimization is to make bbone deformation
calculated at the time when bone is calculated. This will avoid
an extra threaded loop over all bones.
2018-11-20 15:53:59 +01:00
e81aca85cb Depsgraph: Don't use derived mesh
Ideally would need to make check based on evaluated mesh,
but is now a good time to go away from derived mesh.
2018-11-20 14:54:16 +01:00
b0c463a274 Fix T57889: Crashes on undo and redo while working with image or image empty 2018-11-19 12:04:39 +01:00
93cd8e2494 Cleanup: style 2018-11-17 22:23:25 +11:00
33ac6c25b9 Fix T56673: Tara.blend from Blender cloud crashes on load
The issue was caused by dependency cycle solver killing relation
which was guaranteed various things: i.e. copy-on-write component
orders and pose evaluation order (which must first run pose init
function).

Now it is possible to prevent such relations from being ignored.

This is not a complete fix, but is enough to make this specific
rig to work. Ideally, we also need to run copy-on-write operation
prior to anything else.
2018-11-16 16:29:46 +01:00
113a70808c Fix T57854: Disable viewport visibility crash 2018-11-15 18:29:02 +01:00
637d5ab635 Depsgraph: Clear localization tag for CoW IDs
They are self-contained now, and should not cause any sync or
free happening when freeing them.
2018-11-15 16:38:20 +01:00
9a9ca5e40b Depsgraph: Build all type of IDs for modifiers and constraints
It was missing handling of collections there, which caused collection
used for smoke colliders to not be in the dependency graph.
2018-11-15 12:48:55 +01:00
90cf9bcc7d Depsgraph: Make drivers builder less noisy
Do early output when trying to add target relation with wrong rna_path.

We can't do anything reliably in that case anyway, so hopefully it is
a no-functional-change for artists, just avoids noisy error prints in
the terminal.
2018-11-15 12:13:28 +01:00
773110f848 Depsgraph: Save memory by ignoring invisible objects
This finished old standing TODO which was attempting to
ignore objects of all invisible collections.

The difference here is that we remove invisible bases from
view layers. This guarantees that the evaluated state is
consistent and does not reference original objects.
2018-11-15 11:43:12 +01:00
156fe74f91 Depsgraph: Fix/workaround crash after recent point cache changes
For some reason relations can not always be found. This is to be
investigated, but doesn't hurt to be safe here. Also allows to
unlock production.
2018-11-15 11:43:12 +01:00
4a3a4eef14 Depsgraph: Use more human readable relation keys identifier 2018-11-15 11:43:12 +01:00
b8d21f9b9b Cleanup: typo, whitespace 2018-11-15 18:50:18 +11:00
e20557046b Depsgraph: suppress logs from add_relation on invalid driver variables.
Rig generators (e.g. rigify) use dummy drivers to attach extra
ID references to rigs for Append/Link. These references use
Single Property variables with empty path, which is intentionally
invalid and shouldn't produce low-level error logs from depsgraph.

The removed code would always print an error because RNAPathKey
requires a valid path to produce a non-NULL reference.
2018-11-14 20:18:48 +03:00
eefae747da Depsgraph: Remove meaningless evaluation mode
With the current implementation it only confuses logic around
checks like vewport/render subdivision levels.

If this mode is really needed for any decision making, implement
this properly.
2018-11-14 14:08:39 +01:00
d3c08b1aa6 Depsgraph: Fix missing point cache reset when physics changes
Among all the lines moved around, the general idea is quite simple.
Actually, there are two ideas implemented there.

First one, is when object itself is tagged for update, we tag its
point cache component for evaluation, which makes it so point cache
is properly reset. We do it implicitly because otherwise we'll need
to go everywhere and add explicit tag in almost all the properties.

Second thing is, we link all collider and force fields to a point
cache component using special type of link. This type of link only
allows flush if change is caused by a user update. This way reset
does not happen when change is caused due to animation, but will
properly happen when user causes indirect change to the objects
which are part of physics simulation.
2018-11-14 14:08:39 +01:00
1d8db50538 Depsgraph: Remove unused operation code 2018-11-14 14:08:39 +01:00
fdd1fea851 Depsgraph: Cleanup, code style
Should be no functional changes.
2018-11-14 14:08:39 +01:00
5c27c76ed3 Depsgraph: fix relations for drivers on bone weight in Armature constraint. 2018-11-14 14:01:40 +03:00
b0d0179d60 Depsgraph: fix missing relations for drivers on ShaderNode properties.
Also fix duplicate driver to target relations due to a redundant line.
2018-11-13 21:11:09 +03:00
ab73935dbb Cleanup, indentation 2018-11-09 09:46:12 +01:00
f17a5a96c2 Fix depsgraph console warning after recent changes. 2018-11-08 18:53:30 +01:00
11a53ec28a Fix T57689: world nodes / texture not updating for Eevee.
Only do GPU material updates through depsgraph evaluation now. This was
already happening for material, just missing for the world.
2018-11-08 16:01:02 +01:00
64ec05b64d Cleanup: remove some useless BKE_library and BKE_main includes.
Makes it simpler to make some changes...

Also fix order of some includes (use alphabetical please).
2018-11-07 20:58:54 +01:00
1ff8be24ef Cleanup/Refactor: move Main stuff into BKE's new main.c file (and header).
We already had a BKE_main.h header, no reason not to put there
Main-specific functions, BKE_library has already more than enough to
handle with IDs and library management!
2018-11-07 20:58:53 +01:00
4779165ca1 Fix dpesgraph wrongly refcounting NLA strip actions when duplicating IDs.
NLA strips are users of their action, so we need to pass along ID
management flags.

This commit also cleans up a bit things by passing along ID_CREATE/COPY
flags instead of dummy booleans...
2018-11-07 20:58:53 +01:00
921cad194d Depsgraph: add proper handling of actions contained in NLA strips. 2018-11-07 18:17:30 +03:00
7b271d5fc1 Depsgraph: Ensure dependency cycle does not clear runtime memory
If there was a dependency cycle involved, it was possible that pchan
array will be freed before all bones are evaluated. Now clear is
done in a dedicated node, which is never a part of dependency cycle.
2018-11-07 15:06:39 +01:00