Commit Graph

1438 Commits

Author SHA1 Message Date
09d3c907e7 Depsgraph: Always assume scene camera is visible
Allows to disable camera collection to make objects to go out of
the way, but still be able to animate.
2018-09-19 16:43:59 +02:00
749d5c033c Depsgraph: Make visible update to operate on per-component level 2018-09-19 16:10:12 +02:00
afb4da6650 Despgraph: Keep track of per-component visibility
The idea of those flags is to avoid evaluation of operations
which are not needed to bring visible objects to an up to date
state.

Previously, dependency graph attempted to do combine those
into an ID level flag. In practice it proved to be rather
tricky, since there could be dependency cycles on ID level
which will not exist on component level.
2018-09-19 16:10:12 +02:00
cc061d349b Depsgraph: Connect duplicating geometry to duplicator
This allows to force duplicated object to be fully evaluated for
display/draw.

Previously only transform component of duplicated object was
forced to become evaluated.
2018-09-19 16:10:12 +02:00
1b98fff713 Depsgraph: Make geoemtry to tag function more reusable 2018-09-19 16:10:12 +02:00
34c361db5a Depsgraph: Correct early output in collections
Need to ensure objects from collection which was built but
is became visible in the new "context" are poked for re-built.

This should be rather cheap, since this only will update
their visibility flag.

Can not rely on visibility flush here, since there is no
relations between collection and its objects.
2018-09-19 16:10:12 +02:00
3714c83441 Depsgraph: Handle text datablock in ID builder
Just silence the assert/print, we do not add text data blocks
to dependency graph.
2018-09-19 16:10:12 +02:00
dc1e03b4a2 Depsgraph: Cleanup, indentation 2018-09-17 11:19:42 +02:00
f87fbf9cce Depsgraph: Gnuplot, put heaviest objects at the top 2018-09-17 11:19:42 +02:00
d15928c234 Depsgraph: Use default visibility of false
Avoids invisible objects from being considered visible when they
are used as driver variables.

If those cases are actually coming from a visible object, then
deg_graph_build_flush_visibility() will ensure visibility is
properly flushed there.
2018-09-14 14:43:56 +02:00
d7fdd505da Depsgraph: Respect parent object visibility in more places
Mainly coverts object->parent and pose constraints.
2018-09-14 14:43:56 +02:00
95f257395e Depsgraph: Make indirectly linked objects inherit visibility from parent
This way objects which are pulled into dependency graph via modifier
stack from an invisible object will be invisible.
2018-09-14 14:43:56 +02:00
06c0febe70 Depsgraph: Use explicit argument values 2018-09-14 14:43:56 +02:00
aa6c9ca899 Cleanup: style 2018-09-08 07:03:14 +10:00
2f3311ed30 Depsgraph: Cleanup, naming
If something is a list of data, it is to be called list, and data
is to be called data. No need to call list a data and data a weird
two letter abbreviation.

Clarity is our friend!
2018-09-07 15:10:24 +02:00
246aed8847 Merge branch 'master' into blender2.8 2018-09-05 14:48:18 +10:00
1be265afc0 Cleanup: style 2018-09-05 14:46:54 +10:00
101b2ce7b6 Depsgraph: Cleanup, put symbols to a proper namespace 2018-09-03 16:05:41 +02:00
2580399498 Fix T56593: Crash when enabling collection with curves
Was missing update of ID blocks which are becoming visible.
2018-09-03 15:36:20 +02:00
d57cb8fa22 Depsgraph: Use more meaningful name for flags storage 2018-09-03 15:20:06 +02:00
3451cb56db Depsgraph: Cleanup, make it more obvious what ID references 2018-09-03 12:57:04 +02:00
6690816fe5 Depsgraph: Cleanup, make it more clear what function does 2018-09-03 12:55:26 +02:00
6ba5dc9147 Depsgraph: Generalize storage for already existing ID nodes
Currently no functional changes, just allows to store mo information.
2018-09-03 12:39:56 +02:00
73a474dd8b Depsgraph: Cleanup, indentation level 2018-09-03 12:11:11 +02:00
ae57383648 Cleanup: comment blocks 2018-09-02 18:28:27 +10:00
42f7767dab Cleanup: rename files from group to collection to match contents. 2018-08-29 16:25:50 +02:00
871b7ba892 Merge branch 'master' into blender2.8 2018-08-28 19:15:08 +02:00
e20ed59037 Fix T56530, T56523: collection visiblity toggling wrong after recent changes. 2018-08-28 12:49:36 +02:00
12622ce2f7 Cleanup: remove debug code. 2018-08-28 12:49:36 +02:00
3ee0ce27fa Cleanup: style 2018-08-26 20:34:33 +10:00
56ec606413 Cleanup: style 2018-08-26 19:57:19 +10:00
c75e74b456 Depsgraph: Fix wrong detection of invisible objects
Was happenign for following cases:

- Deep hierarchy of non-restircted collections, which has grand-grand
  parent restricted.

- Collections which are constructed from invisible object.
2018-08-24 10:59:54 +02:00
6e3569d9f4 Depsgraph: Escape underscore in time stats chart 2018-08-24 10:59:54 +02:00
0cf12dfc14 Cleanup: indentation, style 2018-08-24 10:32:57 +10:00
f97d61c4bd Depsgraph: Bring back visibility checks based on collection restrict flags
The title says it all actually, the idea is to speedup the following case:

- Visible duplicator of a restricted collection (reported as T56512),

One of the questionable change is that none of the view layer bases is
ignored now. This ensures corresponding objects will have copy-on-write
component evaluated, making it possible to access those pointers. The
evaluation of those objects is skipped.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D3641
2018-08-23 16:40:35 +02:00
4e6a82d847 Cleanup: use static functions 2018-08-23 16:18:09 +10:00
36148f20ec Fix: Silence compiler warnings about size_t's in printf 2018-08-23 17:07:39 +12:00
0e09bfa059 Depsgraph: Added note that the filtering function should NOT be called on a filtered graph 2018-08-23 17:07:39 +12:00
4cbb75935b Code Cleanup 2018-08-23 17:07:38 +12:00
18c7dfa8dc Cleanup: Remove the conditional ID node removal stuff, copied from clear_id_nodes()
This was just randomly leaving all the Particle datablocks in the
filtered graph (and causing and extra/excess pass over the ID's
to get run). Unless we actually need those specially kept for
some reason later, it's better to leave those out for now.
2018-08-23 17:07:38 +12:00
0e44cf5d78 Cleanup: Disable some of the extra debug prints that were slowing things down 2018-08-23 17:07:38 +12:00
2f2ab13b5f Depsgraph Filtering: Fix ID node filtering problems
* COW data hasn't been expanded yet when we try to filter the graph
  (you need to have tagged + evaluated it for this data to exist),
  so all the offending nodes would just get left in

* Added more debug prints to verify whether the id_nodes vector is
  getting cleared correctly
2018-08-23 17:07:38 +12:00
e5e42b7782 Depsgraph Filtering: WIP more debugging prints 2018-08-23 17:07:38 +12:00
6bbf6712bb Depsgraph Filtering: Remove opnodes from entry tags too 2018-08-23 17:07:38 +12:00
6ec933886c Depsgraph: Fix filtering-related crashes
* Simplified operation-relation deletion. Now we collect the relations
  to delete into a vector, then iterate through that, thus solving issues
  with iterator invalidation (+ aborts arising from that)

* DEG_foreach_ancestor_ID() was assuming that all dependencies were
  OperationDepsNodes, when in fact, some could be TimeSource nodes
2018-08-23 17:07:38 +12:00
9a0ef0933d Depsgraph: Print simple stats after filtering graph, to quickly verify if anything happened 2018-08-23 17:07:37 +12:00
be77eeae46 Depsgraph: First draft of graph filtering API implementation
When this works correctly, we should be able to feed in an existing
depsgraph instance, and get out a "filtered" copy of it that contains
only the subset of nodes needed to evaluate what we're interested in.

The current implementation only filters on ID blocks/nodes,
and starts by building a full new depsgraph instance first.
I'd originally intended to do it per operation instead, copying
over individual nodes as appropriate to have the smallest and least
memory intensive graph possible. However, I ended up running into
into problems with function binding + COW arguments, hence the
current slow solution.
2018-08-23 17:07:37 +12:00
9e47709089 Typo fixes 2018-08-23 17:07:37 +12:00
2a5f319465 Depsgraph: Add query methods to identify all the ID's that a given datablock depends on
This commit adds a new method, DEG_foreach_ancestor_ID()
to accompany the existing DEG_foreach_descendent_ID().

It can be used to help print/collect all the ID's that
a given ID block depends on (i.e. all the datablocks that
need to be evaluated before the datablock of interest can
be evaluated)
2018-08-21 16:52:10 +12:00
351d13194d Cleanup: Fix variable shadowing 2018-08-21 16:52:10 +12:00