簡體   English   中英

如何在nuke表達式中為python函數提供參數?

[英]how to give arguments to a python function in a nuke expression?

我正在嘗試將python函數放在表達式節點表達式中。 以下語法非常有效:

[python testMe()]

我的問題是如何給我的函數一些參數。 例如,我如何給像素紅色,如tcl: r(x,y)

此代碼適用於標准旋鈕,例如浮點滑塊:

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

示例Python函數:

def testMe(val):
    return val

我不能為我的生活弄清楚如何使用特殊的鈎子作為Expression節點的一部分。 這似乎是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
}

不幸的是,由於旋鈕表達式與像素處理表達式的評估順序,我認為你要做的事情是不可能的。

tl; dr:在您實際可用的變量之前 ,正在評估Expression節點旋鈕中的TCL表達式。

更長的版本

這掩蓋或簡化了許多關於Nuke運營商評估的事情,以便更簡潔地嘗試解決原始問題。

旋鈕上的表達式(即方括號中的表達式,或使用右鍵單擊設置 - >“添加表達式...”)在操作員處理開始時(在您可以稱之為“旋鈕存儲”階段之前)進行評估。一種像素處理開始。 此步驟生成由內部C ++ Knob對象存儲的實際(數值)值,以便在像素處理期間使值可用。 這種擴展是由大多數內置旋鈕類型透明完成的,因此插件開發人員不必擔心在其操作員代碼中自行完成。

查看一些正在發生的事情的一種方法是在任何渲染上下文之外的其中一個旋鈕的上下文中評估Nuke表達式:

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

這使用了核彈TCL命令in一種用於表達評估上下文中設置於像素表達的一個旋鈕。 然后, expression命令(不要與TCL的expr命令混淆),將給定的字符串計算為普通的Nuke旋鈕表達式(旋鈕表達式使用的是TCL的expr語法的一個受限制的子集,它僅對浮點值進行操作並且執行旋鈕和像Grade1.blackpoint這樣的字符串的可變分辨率。

您會注意到這個nuke.tcl調用確實會返回一個值,但不幸的是,該值是當前幀數。 如果在表達式中用y替換x ,則得到0.換句話說,在“旋鈕存儲”階段(當Nuke將擴展您的TCL表達式時)旋鈕的表達式上下文中的像素坐標不可用)。

當Expression節點實際處理像素時,操作符在表達式上下文中擴展每個表達式旋鈕的文本值,該表達式上下文將xy變量設置為當前正在處理的像素的坐標。

無論如何,我知道這可能有點技術性和冗長,但我希望它有助於解釋這里發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM