【问题标题】:how to give arguments to a python function in a nuke expression?如何在 nuke 表达式中为 python 函数提供参数?
【发布时间】:2014-06-13 14:29:35
【问题描述】:

我正在尝试将 python 函数放入表达式节点表达式中。 以下语法效果很好:

[python testMe()]

我的问题是如何给我的函数一些参数。 例如,我怎样才能给像素红色,就像在 tcl 中一样:r(x,y)

【问题讨论】:

  • 这个好像和tcl关系不太密切。
  • Nuke 似乎同时支持 Python 和 TCL。我相信 OP 的问题是有效的。
  • 很公平。我的立场是正确的。

标签: python expression tcl nuke


【解决方案1】:

不幸的是,由于旋钮表达式与像素处理表达式的评估顺序,我认为您尝试做的事情是不可能的。

tl;dr: 表达式节点的旋钮中的 TCL 表达式您之后的变量实际可用之前被评估。

加长版

这掩盖或简化了有关 Nuke 操作员评估的许多事情,以便尝试更简洁地解决原始问题。

旋钮上的表达式(即方括号中的表达式,或使用右键单击 ->“添加表达式...”设置)在运算符处理开始时进行评估(在您可以称为“旋钮存储”阶段) 在任何类型的像素处理开始之前。此步骤生成由内部 C++ Knob 对象存储的实际(数字)值,以便在像素处理期间使这些值可用。这种扩展由大多数内置旋钮类型透明地完成,因此插件开发人员不必担心自己在他们的操作符代码中进行。

了解正在发生的事情的一种方法是在任何渲染上下文之外的这些旋钮之一的上下文中评估 Nuke 表达式:

nuke.tcl('in Expression1.expr2 {return [expression x]}')

这使用 Nuke TCL 命令in 将表达式的评估上下文设置为像素表达式旋钮之一。然后,expression 命令(不要与 TCL 的 expr 命令混淆)将给定字符串评估为普通的 Nuke 旋钮表达式(旋钮表达式使用本质上是 TCL 的 expr 语法的受限子集,仅在浮点值,并为 Grade1.blackpoint 之类的字符串做旋钮和变量分辨率。

您会注意到这个nuke.tcl 调用确实返回了一个值,但不幸的是,该值是当前帧号。如果您在表达式中将x 替换为y...您将得到0。换句话说,在“旋钮存储”阶段(当Nuke 将扩展您的TCL 时,像素坐标在旋钮的表达式上下文中不可用)表达式)。

当“表达式”节点实际处理像素时,每个表达式旋钮的文本值由运算符在表达式上下文中展开,其中 xy 变量设置为当前正在处理的像素的坐标已处理。

无论如何,我知道这可能有点技术性和冗长,但我希望它有助于解释这里发生了什么。

【讨论】:

    【解决方案2】:

    此代码适用于标准旋钮,例如浮点滑块:

    [python ["testMe([value userknob])"]]
    

    示例 Python 函数:

    def testMe(val):
        return val
    

    我一辈子都想不通如何让它与作为表达式节点一部分的特殊钩子一起工作。这似乎是 Nuke -> Tcl 的问题,而不是 Tcl -> Python 的问题。如果你弄明白了,请告诉我!

    这是一个您可以复制和粘贴的节点:

    Expression {
     expr0 "\[python \[\"testMe(\[value userknob])\"]]"
     name Expression2
     selected true
     xpos -648
     ypos -554
     addUserKnob {20 User}
     addUserKnob {7 userknob}
     userknob 0.47
    }
    

    【讨论】:

    • [python "testme([value userknob])" 可能有用,但我还没有设置好进行测试……
    • 啊,确实如此。显示我对 tcl 的了解(零)!谢谢
    • 谢谢大家。这是回答我的问题,但不是我的问题,因为我的参数不是旋钮值。假设我想在我的 python 函数中计算每个像素的 8 个周围像素的平均值,是否可以在迭代图像像素时为我的函数提供像素值? (我希望这可以在 Tcl 表达式中完成,但这是一个例子)。
    • @Pic,抱歉还不是 100%。如果你能够在 Tcl 中解决这个问题,我敢打赌我们可以弄清楚如何将它引入 Python。我也会继续看的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多