3

Python 関数を式ノード式に入れようとしています。次の構文は完全に機能します。

[python testMe()]

私の質問は、関数に引数を与える方法についてです。たとえば、 tcl のようにピクセルを赤くするにはどうすればよいですか :r(x,y)

4

2 に答える 2

2

残念ながら、ノブ式とピクセル処理式の評価順序が異なるため、あなたがしようとしていることは不可能だと思います。

tl;dr: Expression ノードのノブの TCL エクスプレッションは、目的の変数が実際に使用可能になるに評価されています。

長いバージョン

これは、元の質問をより簡潔にしようとするために、Nuke のオペレーター評価に関する多くのことを省略または単純化します。

ノブのエクスプレッション (つまり、角括弧内のエクスプレッション、または右クリック -> [エクスプレッションの追加...] を使用して設定されたエクスプレッション) は、オペレータの処理の開始時 (「ノブ ストア」フェーズと呼ぶことができる間) に評価されます。種類のピクセル処理が開始されます。Knobこのステップでは、ピクセル処理中に値を使用できるようにするために、内部 C++ オブジェクトによって格納される実際の (数値) 値を生成します。この展開はほとんどの組み込みノブ タイプによって透過的に行われるため、プラグイン開発者はオペレーター コードで自分で行うことを心配する必要はありません。

何が起こっているかを少し確認する方法の 1 つは、レンダリング コンテキストの外側にあるこれらのノブのいずれかのコンテキストで Nuke 式を評価することです。

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

これは、Nuke TCL コマンドinを使用して、エクスプレッションの評価コンテキストをピクセル エクスプレッション ノブの 1 つに設定します。次に、expressionコマンド (TCL のコマンドと混同しないでください) は、指定された文字列を通常の Nuke ノブ式として評価します (ノブ式は、浮動小数点値でのみ動作し、ノブと変数の解決を行うexprTCL の文法の本質的に制限されたサブセットを使用します)。exprのような文字列Grade1.blackpoint)。

このnuke.tcl呼び出しは実際には値を返しますが、残念ながら、その値は現在のフレーム番号です。エクスプレッションを に置き換えるxy、0 が得られます。つまり、「ノブ ストア」フェーズ中 (Nuke が TCL エクスプレッションを拡張するとき) に、ノブのエクスプレッション コンテキストでピクセル座標を使用することはできません。

Expression ノードが実際にピクセルを処理している場合、各エクスプレッション ノブからのテキスト値は、現在処理中のピクセルの座標に設定された 変数xと変数を持つエクスプレッション コンテキストでオペレータによって展開されます。y

とにかく、これは少し技術的で長々としたものかもしれませんが、ここで何が起こっているのかを説明するのに役立つことを願っています.

于 2014-08-30T22:14:18.220 に答える