Q100248: Nuke のコールバックを使ってPython関数を自動的に呼び出す方法

まとめ

この記事では、 Nukeでコールバックを設定する方法と、コールバックに使用する正しい Python コマンドを見つける方法について説明します。

利用可能なコールバックと例の完全なリストは、 Nuke Python 開発者ガイドに記載されています。

詳細情報

コールバックは、 Nuke環境で追加されるコードであり、 Nukeでさまざまなイベント (ノードの作成やスクリプトの読み込みなど) が発生するたびに Python 関数を自動的に呼び出します。

これは、ノードの作成時にノブ値の設定を行ったり、スクリプトの増分バージョンを自動的に保存したり、新しいプロジェクトをセットアップするときにプロジェクト設定を変更したりするなど、さまざまな状況で役立ちます。

以下に、 Nukeで新しく作成されたすべての書き込みノードに対して、書き込みノードの「ファイル タイプ」を EXR に設定し、「ファイル」パスを一時的な場所に設定するコールバックを作成する方法の例を示します。

コールバックを設定するには、次の手順に従ってください (各手順の詳細については、以下をお読みください)。

  1. Nukeのスクリプトエディタでコマンドをテストして、正しく動作するか確認します。
  2. コールバック関数を定義し、コールバックとして追加し、.nuke フォルダ内の init.py に保存します。
  3. 次回Nukeを開いたときに、指定されたイベントが発生したときにコールバックが実行されます。

1. Nukeのスクリプトエディタでコマンドをテストして、正しく動作するか確認します。

コールバックを作成するには、まずNukeセッション内のスクリプトエディタでPythonコマンドをテストすると便利です。利用可能なPython APIコマンドの詳細については、 Nuke Python開発者ガイドおよびNuke Python APIリファレンスをご覧ください

スクリプト用のノードのノブの名前は、通常、ノブの上にマウスを置いたときに表示されるラベルに記載されています。

たとえば、Write ノードの「ファイル」ノブは、 file使用してスクリプトで参照できます。また、「ファイル タイプ」ノブは、 file_typeを介してスクリプトで参照されます。



特定のノブ (たとえば、 file_type ) の現在の値を取得するには、スクリプト エディターで次のコマンドを実行します。

node = nuke .toNode(“Write1”)
# replace Write1 with the name of your Write node if it is different

print(node["file_type"].getValue())

コンソールに次の内容が出力されます。

# node = nuke .toNode("Write1")
# print(node["file_type"].getValue())
# Result: 2.0

この場合、 2.0はファイルタイプのドロップダウンリストにおける「 dpx 」のインデックスです。Pythonを使ってfile_typeを「 exr 」に変更するには、スクリプトエディタで次のコマンドを入力します。

node["file_type"].setValue(3)

これはコールバックに追加したいコマンドの一つです。もう一つのコマンドは、宛先の「ファイル」パスを一時的な場所に設定するもので、以下のようになります。

node["file"].setValue("/tmp/test.####.exr")

2. コールバック関数を定義し、コールバックとして追加し、.nuke フォルダ内のinit.pyに保存します。
以下のサンプル コードに示すように、コールバックで実行するすべてのアクションを 1 つの Python 関数で定義し、この関数をOnUserCreateコールバックとして追加します。

import nuke 

def writeSettings():
node = nuke .thisNode()
node["file_type"].setValue(3)
node["file"].setValue("/tmp/test.####.exr")

# add callback to execute this every time a Write node is created
nuke .addOnUserCreate(writeSettings, nodeClass="Write")

これをコピーしてテキスト エディターに貼り付け、ファイルを保存します。

ファイル名をinit.pyに変更し、この操作を行うときにファイル ブラウザーにファイル拡張子が表示されることを確認して、ファイル拡張子が.pyであり .txtなどではないことを確認します。

このファイルは、 Nuke起動時にプラグインを探す最初の場所である.nukeフォルダに配置する必要があります。.nuke フォルダ場所については、こちらの記事をご覧ください: Q100048: デフォルトの .nuke ディレクトリの場所

init.pyファイルとその機能に関する詳細については、次の記事を参照してください: Q100490: init.pyおよびmenu.py起動スクリプトファイルとは何ですか?

3. 次にNukeを起動すると、指定されたイベントが発生したときにコールバックが実行されます。

これを実行すると、コールバックがNuke環境に追加され、次にアプリケーションを起動して新しい書き込みノードを作成するときに、 filefile_type設定が適用されます。

注:保存したスクリプトを開くときに読み込まれる設定も含め、特定のクラスのすべてのノードに特定の設定を適用する場合は、 nuke .addOnUserCreateではなく、 nuke .addOnCreateコールバックを使用できます。


さらなる支援

コールバックの設定で問題が発生した場合は、サポート チケットを開いて、発生した問題とこれまでに行ったトラブルシューティング手順をお知らせください。

サポート チケットを開く方法の詳細については、 「サポート チケットの発行方法」の記事を参照してください。

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください