You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blender Python脚本开发:如何正确连接材质着色器节点

Blender 材质节点连接问题修复方案

错误说明

你末尾写的两行节点连接代码存在三个明确问题:

  • 第二行代码未调用创建连接的.new()方法,直接执行links()属于无效语法,无法生成节点连线
  • 第一行通过planet.active_material索引节点树的写法存在冗余,前文已经将目标材质赋值给planet_material变量,直接复用该变量即可,避免活动材质被意外修改时出现连接错位
  • 额外逻辑缺失:execute方法末尾缺少Blender Operator要求的标准返回值return {'FINISHED'},不补全会触发控制台报错,算子无法正常执行完成。

正确实现

节点连接的固定语法为材质节点树.links.new(输出端口, 输入端口),将最后两行错误代码替换为以下语句即可完成Noise1到Noise2的连接:

planet_material.node_tree.links.new(Noise1.outputs['Fac'], Noise2.inputs['Scale'])

建议优先使用端口名称而非数字索引指定输入输出端口,该写法不受Blender版本迭代时端口顺序调整的影响,兼容性更强。

修正后的完整可运行代码

class WM_OT_textOpBasic(bpy.types.Operator):
    """Creates the Base Planet"""
    bl_idname = "wm.textopbasic"
    bl_label = "                            Text Tool Operator"

        
    def execute(self, context):
        
        bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=6, radius=1.0, calc_uvs=True, enter_editmode=False, align='WORLD', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0))
        planet = bpy.context.selected_objects[0]
        planet.name = "Planet"
        planet_material = bpy.data.materials.get("planet material")
        
        if planet_material is None:
            # 创建材质
            planet_material = bpy.data.materials.new(name="planet material")
        planet.data.materials.append(planet_material)
        
        planet_material.use_nodes = True
        nodes = planet_material.node_tree.nodes
        ColorRamp1 = nodes.new('ShaderNodeValToRGB')
        ColorRamp1.location = -400,100
        ColorRamp2 = nodes.new('ShaderNodeValToRGB')
        ColorRamp2.location = -700,100
        ColorRamp3 = nodes.new('ShaderNodeValToRGB')
        ColorRamp3.location = -1000,100
        
        Noise1 = nodes.new('ShaderNodeTexNoise')
        Noise1.location = -1100,300
        Noise2 = nodes.new('ShaderNodeTexNoise')
        Noise2.location = -900,300
        
        Bump = nodes.new('ShaderNodeBump')
        Bump.location = -150,-150
    
        # 连接Noise1的Fac输出到Noise2的Scale输入
        planet_material.node_tree.links.new(Noise1.outputs['Fac'], Noise2.inputs['Scale'])
        
        return {'FINISHED'}

内容的提问来源于stack exchange,提问作者AnTicXz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:30:45