Blender Git Commit Log

Git Commits -> Revision 97f1e47

Revision 97f1e47 by Sergey Sharybin (master)
May 18, 2021, 08:13 (GMT)
Cycles: Avoid unnecessary data updates in viewport

The BlenderSync will do quite a bit of work on every sync_data() call
even if there is nothing changed in the scene. There will be early
outputs done deeper in the call graph, but this is not really enough to
ensure best performance during viewport navigation.

This change makes it so sync_data() is only used when dependency graph
has any update tags: if something changed in the scene the dependency
graph will know it. If nothing changed there will be no IDs tagged for an
update in the dependency graph.

There are two weak parts in the current change:

- With the persistent data there is a special call to ignore the check
of the dependency graph tags. This is more of a safety, because it is
not immediately clear what the correct state of recalc flags is.

- Deletion of objects is detected indirectly, via tags of scene and
collections.

It might not be bad for the first version of the change.

The test file used: {F10117322}

Simply open the file, start viewport render, and navigate the viewport.
On my computer this avoids 0.2sec spend on data_sync() on every
up[date of viewport navigation.

We can do way more granular updates in the future: for example, avoid
heavy objects sync when it is only camera object which changed. This
will need an extended support from the dependency graph API. Doing
nothing if nothing is changed is something we would want to do anyway.

Differential Revision: https://developer.blender.org/D11279

Commit Details:

Full Hash: 97f1e4782a6fbc350f23a7f5c8520ffdf391f26c
Parent Commit: 1c1fa15
Lines Changed: +25, -2

2 Modified Paths:

/intern/cycles/blender/blender_sync.cpp (+19, -2) (Diff)
/intern/cycles/blender/blender_sync.h (+6, -0) (Diff)
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021