Script do Blender: Como mudar a cor da textura
Estou tentando criar uma imagem no Blender usando apenas Python / script (sem animação). Eu tenho um modelo carregado e posso mudar sua cor base usando active_material.diffuse_color, mas agora eu quero colocar uma textura no modelo e então mudar a cor da textura. Eu pesquisei por um tempo e não consegui encontrar nenhum recurso bom sobre como fazer isso.
Isso é o que eu tenho até agora:
mat = bpy.data.materials.new(name="Material")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = bpy.data.images.load("../textures/texture.png")
mat.node_tree.links.new(bsdf.inputs['Base Color'], texImage.outputs['Color'])
color_ramp = mat.node_tree.nodes.new("ShaderNodeValToRGB")
mat.node_tree.links.new(bsdf.inputs['Base Color'], color_ramp.outputs['Color'])
ob = bpy.data.objects['model']
if ob.data.materials:
ob.data.materials[0] = mat
else:
ob.data.materials.append(mat)
O código coloca corretamente a textura no modelo, mas não tenho certeza de como usar o nó color_ramp para realmente mudar a cor ou se é mesmo a coisa certa a tentar. Obrigado!
Respostas
1 Sydney
Obrigado brockmann, descobri nos seus links.
mat = bpy.data.materials.new(name="Material")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
color_ramp = mat.node_tree.nodes.new("ShaderNodeValToRGB")
color_ramp.color_ramp.elements[0].color = (0.2,0.8,0.7,1)
mat.node_tree.links.new(bsdf.inputs['Base Color'], color_ramp.outputs['Color'])
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = bpy.data.images.load("../textures/Fabric.png")
mat.node_tree.links.new(color_ramp.inputs[0], texImage.outputs['Color'])
ob = bpy.data.objects['model']
if ob.data.materials:
ob.data.materials[0] = mat
else:
ob.data.materials.append(mat)
```
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas