0
$\begingroup$

I got an animation with blinking lights, animated with an Emission Node and Transparent Node connected to a Mix Shader. The Mix Shader is animated, so the lights are going on and off by setting the Factor to 0 or 1.

More than 40 materials are already animated, but now I want to adjust the strength of the emission. I don't want to manually edit each material, adjusting the Emmission node's Strength. Is there a way to handle this in a batch?

If I knew earlier than I would work with Node Groups, but I didn't. I'm not good at python, but I think it's possible to create a sort of find and replace script in the context of selected materials.

$\endgroup$
1
$\begingroup$

Good news - that's relatively easy:

import bpy 

sel = bpy.context.selected_objects

for obj in sel:
    try:
        for slots in obj.material_slots:
            for nodes in slots.material.node_tree.nodes:
                if nodes.type == 'EMISSION':
                    nodes.inputs[0].default_value = (1,0,0,1) # change RGBA if needd
                    nodes.inputs[1].default_value = 100 # change strength
                    #print(nodes.label) # for testing
    except: 
        print('Something wrong with ' + obj.name) # Maybe an object not capable of having materials or empty slot

You can copy/paste this into a new text block int the Text Editor and hit Run Script with the objects that have the materials you want to modify selected.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.