renderLayer 的可渲染属性更改时的 Maya 回调

Maya callback when renderLayer's renderable attribute changed

我希望在场景中渲染层上的特定属性“可渲染”发生更改时创建 OpenMaya 回调。我试过这个:

import os
import time
from maya import cmds, OpenMaya as om

dag_path = om.MDagPath()
selection = om.MSelectionList()
selection.add("defaultRenderLayer")
selection.getDagPath(0, dag_path)
m_obj = dag_path.node()

def callback(message_type, plug, other_plug, client_data):
    if not message_type & om.MNodeMessage.kAttributeSet:
        return

    if "renderable" in plug.name():
        print("renderable changed!")

job = om.MNodeMessage.addAttributeChangedCallback(m_obj, callback)

但是 Maya 在“selection.getDagPath(0, dag_path) 上报错。 我没有使用 OpenMaya 或回调的经验,但如果能得到任何帮助,我将不胜感激。

据我所知,defaultRenderLayer 不是 DAG 节点,因此您应该在选择上使用 getDependNode

selection = om.MSelectionList()
selection.add("defaultRenderLayer")
m_obj = om.MObject()
selection.getDependNode(0, m_obj)

要仔细检查,这应该打印 defaultRenderLayer 作为节点名称:

node = om.MFnDependencyNode(m_obj)
print(node.name())