Page MenuHome

Fix T99976: Animated visibility not rendering properly in viewport
ClosedPublic

Authored by Sergey Sharybin (sergey) on Jul 26 2022, 12:20 PM.

Details

Summary

A mistake in the 0dcee6a3866 which made specific driven visibility
to work, but did not properly handle actual time-based visibility.

The basic idea of the change is to preserve recalculation flags of
nodes which were tagged for update but were not evaluated due to
visibility constraints. In the file from the report this makes it
so tagging which is done first time ID is in the dependency graph
are handled when the ID actually becomes visible. This is what
solved the root of the problem from the report: there was missing
geometry update since it was "swallowed" by the evaluation during
the object being invisible. In other configurations this change
allows to handle pending geometry updates due to animated modifiers
be handled when object becomes visible without time change.

This change also solves visibility issue of the synchronization
component which also started to be handled badly since the
previous fix attempt. Basically, the needed exception in its
visibility handling did not happen and a regular logic was used
for it.

Tested with files from the T99733, T99976, and from the Heist
project.

Diff Detail

Repository
rB Blender
Branch
fix_T99976 (branched from master)
Build Status
Buildable 23168
Build 23168: arc lint + arc unit

Event Timeline

Sergey Sharybin (sergey) requested review of this revision.Jul 26 2022, 12:20 PM
Sergey Sharybin (sergey) created this revision.
Brecht Van Lommel (brecht) added inline comments.
source/blender/depsgraph/intern/eval/deg_eval_visibility.cc
63

is -> as

This revision is now accepted and ready to land.Jul 26 2022, 4:22 PM

Remove early output from ComponentNode::tag_update

Fixes constraints regression test.

Don't think it was giving speedup even, as the heaviest component nodes
do not even have entry operation.

If the tagging ever shows in a profiler we can use some other typr of
tagging like have a bit dedicated to indicate "operation has corresponding
entry".