1
$\begingroup$

I'm on Blender 2.79. When using drivers on node properties the material doesn't update on the Rendered/Material viewports until I force reload it.

My drivers are pulling custom object properties from a parent armature and running it through a scripted expression. This driver's output is then fed into the Y Scale of a Mapping node. It works wonderfully, the value updates immediately, but the viewport doesn't.

Starting point:

Driver before value change

After changing the parent's custom property, the driver updates, the node value updates, but the material in the viewport doesn't:

Driver after value change, viewport not update

After I hit SHIFT+Z twice to exit and reenter the Rendered mode, the material updates:

Forced update of viewport

Another way to force the viewport update is to make a manual change to the material, like disconnecting a random node or changing the texture location, or to the drivers, as changing the type of a second driver. But automatically? No success so far.

What am I doing wrong?

$\endgroup$
3
  • $\begingroup$ blender.stackexchange.com/questions/54187/… $\endgroup$ Commented Jan 20, 2019 at 23:30
  • $\begingroup$ Thanks for your input. It's interesting and everything, and I've seen your same comment in a similar question, but just like that one, my question is not about animations or animated textures at all. Unless you're willing to expand your comment and explain how animation relates to visible changes to nodes not propagating to the viewport without manual input, I don't see how exactly it applies to the situation. $\endgroup$
    – Rhaenys
    Commented Jan 21, 2019 at 0:06
  • 1
    $\begingroup$ Drivers are still animations, at least as far as your question is concerned. Those threads explain why keyframe/driver changes do not playback in the viewport as expected. Which is the problem you are asking about. $\endgroup$
    – JtheNinja
    Commented Jan 24, 2019 at 6:11

1 Answer 1

0
$\begingroup$

After a long time fiddling with drivers and properties, I found a solution.

  1. Create a custom property for the material you're manipulating with drivers

Material Panel > Custom Properties > Add

  1. Add a driver to the property, and add your variables and scripted expressions to this driver

Set up drivers

  1. Reference the custom property in your node driver

Final driver setup

Important: The intermediate custom property must be a material property. Custom object properties alone won't work.

Possibly related: Driver on material not updating. Mainly the "not all drivers are created equal" statement. The issue I experienced is the inverse of what happened in this question, though.

For some strange reason, the existence of a custom material property with the script is what triggers the auto update. If you have two identical drivers with the script, one for a custom object property, another for a custom material property, and reference the object one, it'll work. As long there's an identical material driver doing the calculation, it'll work. You don't even need to reference it, it only needs to exist. Don't ask me why.

$\endgroup$

Not the answer you're looking for? Browse other questions tagged .