Page MenuHome

new depsgraph removes the grass in victor scene
Closed, ResolvedPublic


System Information
Win 7 x64, cpu and gpu render

Blender Version
Broken: f9963f2

Short description of error
all in title, enabling --enable-new-depsgraph make the grass to not render in the victor scene.

Exact steps for others to reproduce the error
start blender with --enable-new-depsgraph, open victor scene from benchmark pack, render: there is no grass. Do the same with old depsgraph, it renders coreectly.

Event Timeline

Sergey Sharybin (sergey) lowered the priority of this task from 90 to 50.

Developer note.

The issue is caused by new dependency graph not doing any extra updates tag when evaluating scene for newframe, while old dependency graph was tagging objects for update in various situations. One of such situations is tagging object for update on frame change when it has particle system (no matter enabled or disabled).

Now, in the file we've got situation, when object has Hair particle system which duplicates grass. This particle system is disabled in viewport.

What happens with old dependency graph:

  • Before rendering, ground object will have OB_DUPLI flag set to OFF, since there is nothing being duplicated.
  • Render engine will tag ground for update because it has particle system (happens in DAG_scene_update_flags),
  • Evaluation of scene will evaluate the object within render context, which will evaluate particle system which will set OB_DUPLI flag on ground object.
  • Cycles will see that object is a duplicator, and create grass.

What happens with new dependency graph:

  • Before rendering, ground object will have OB_DUPLI flag set to OFF, since there is nothing being duplicated.
  • Because nothing is dependent on time, no flush/tag happens
  • Cycles will NOT see that ground is a duplicator, because it was never yet evaluated for render context, meaning hair particle system did not set OB_DUPLI flag on the object.

Here is even smaller version of file

After further investigation, not only the hidden particle system is triggering problems. In old depsgraph, it the subdivision modifier is also hidden, the particle system is evaluated, but at the wrong place. Only solution is to manually make it visible in viewport and change something that triggers a new evaluation many times, until it updates (like setting the particle system on and off. In some case, it has to be done 3 or 4 time to really update the particles positions)

This is the correct render after the hack explained above

This is the old depsgraph with modifiers evaluated in the wrong order

This with new depsgraph enabled:

mathieu menuet (bliblubli) changed the task status from Resolved to Unknown Status.Jul 8 2017, 2:09 PM
mathieu menuet (bliblubli) changed the task status from Unknown Status to Resolved.Jul 8 2017, 2:13 PM

opened new task instead