2
$\begingroup$

I am trying to apply textures through a python script. I would like to use blender cycles renderer. I thought following these advices would be sufficient, but sadly Blender does not show the equivalent python commands when applying manually the procedure. How would you do this ? Or, is it possible to force blender to show the python commands ?

Thanks in advance

$\endgroup$
1

1 Answer 1

5
$\begingroup$

This script does not do any unwrapping. List of available nodes

import bpy

mat_name = "MyMaterial"
image_path = #...

mat = (bpy.data.materials.get(mat_name) or
       bpy.data.materials.new(mat_name))

mat.use_nodes = True
nt = mat.node_tree
nodes = nt.nodes
links = nt.links

# clear
while(nodes): nodes.remove(nodes[0])

output  = nodes.new("ShaderNodeOutputMaterial")
diffuse = nodes.new("ShaderNodeBsdfDiffuse")
texture = nodes.new("ShaderNodeTexImage")
uvmap   = nodes.new("ShaderNodeUVMap")

texture.image = bpy.data.images.load(image_path)
uvmap.uv_map = "UV"

links.new( output.inputs['Surface'], diffuse.outputs['BSDF'])
links.new(diffuse.inputs['Color'],   texture.outputs['Color'])
links.new(texture.inputs['Vector'],    uvmap.outputs['UV'])

# distribute nodes along the x axis
for index, node in enumerate((uvmap, texture, diffuse, output)):
    node.location.x = 200.0 * index
$\endgroup$
2
  • $\begingroup$ Thank you for your answer. I am not sure I fully understand: how to apply the texture to an object? Why doesn't blender show the "python commands" when manipulating textures for the cycles renderer? $\endgroup$
    – waffle
    Commented Mar 7, 2016 at 20:34
  • $\begingroup$ Couldn't you just do nodes.clear() instead of looping and removing them? Also, is there a way to auto-layout them after adding them? They're positioned on top of each other otherwise. $\endgroup$
    – Ray
    Commented Jun 9, 2018 at 14:16

You must log in to answer this question.

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