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

Blender 4.0 API问题:无法在layout.prop中访问节点树输入值

Blender 4.0 几何节点自定义面板滑块不生效问题解决

问题背景

  • Blender 4.0 节点树API变更后,原通过.inputs/.outputs结合layout.prop读写插座值的方式失效
  • 当前仅能通过obj.modifiers["GeometryNodes"]["socket_id"]访问插座默认值,但该值无法实时作用于场景
  • 需求:在自定义侧边栏面板添加滑块,实现修改器窗口同款的节点组输入值实时调整功能
  • 异常现象:手动执行bpy.data.objects["Plane"].modifiers["GeometryNodes"]["Socket_2"] = 8.0可生效,但面板draw()方法内的滑块无法实时反馈变更

原因分析

Blender 4.0 中,几何节点修改器的动态输入属性(对应节点组插座)不再直接映射为修改器的常规属性,常规的layout.prop(modifier, "Socket_2")写法无法正确绑定到实际生效的属性值,仅能读取默认值。

解决方案

在面板绘制时,使用带方括号的字符串属性名来引用修改器的动态属性,确保layout.prop正确关联到实时生效的属性:

import bpy

class OBJECT_PT_ObjectGeneratorPanel(bpy.types.Panel):
    bl_label = "Object Generator"
    bl_idname = "OBJECT_PT_object_generator"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "Object Generator"

    def draw(self, context):
        layout = self.layout
        active_obj = context.active_object
        
        if not active_obj:
            layout.label(text="未选中对象")
            return
            
        geo_mod = active_obj.modifiers.get("GeometryNodes")
        if not geo_mod:
            layout.label(text="无几何节点修改器")
            return
            
        # 用['Socket_2']形式引用动态属性,绑定实时生效的值
        layout.prop(geo_mod, '["Socket_2"]', text="调整参数")

def register():
    bpy.utils.register_class(OBJECT_PT_ObjectGeneratorPanel)

def unregister():
    bpy.utils.unregister_class(OBJECT_PT_ObjectGeneratorPanel)

if __name__ == "__main__":
    register()

验证效果

运行脚本后:

  1. 选中添加了几何节点修改器的Plane对象
  2. 打开侧边栏「Object Generator」面板,拖动滑块
  3. 对比修改器窗口的对应参数,两者会实时同步,场景中的几何体也会实时更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:12:33