Q100387: Pythonスクリプトでキーフレームを設定し、アニメーションカーブを調整する方法

まとめ

Nukeスクリプトでアニメーションキーを設定する際(例えば、Transform ノードや Roto マスクの位置をキー設定する場合)、Python でアニメーションカーブを定義すると、非常に柔軟に操作できます。ユーザーはアニメーションキーの生成と配置を自動化し、必要に応じて傾斜を調整し、パイプライン内で使用されるさまざまなツール間でカーブデータを共有できます。

この記事では、テスト可能なサンプル スクリプトを含め、Python を使用してアニメーション キーを作成し、カーブの傾斜を更新する方法について説明します。

詳細情報

Nuke内でアニメーション キーが設定されると ( Animating Parametersを使用)、キーフレームはカーブ エディタ内でカーブとして表示されます。

以下のスクリーンショットでは、ColorCorrect ノードのコントラストノブ用に、さまざまなフレームで設定されたアニメーション キーから作成されたカーブを確認できます。

  • キー値は、ユーザーがコントラスト ノブに新しい値を追加した場所です。
  • カーブ エディターはXYグラフを使用します。Xフレーム範囲を示し、 Y はコントラスト ノブの値を示します。
  • ユーザーが選択したキーフレームはフレーム 351 で、値は 1.16 です。
  • 選択したキーフレームには、傾きを定義する接線も表示されます。傾きを操作することで、キーフレーム間の曲線の形状をカスタマイズし、より滑らかにしたり、一定にしたりできます。
  • 選択された曲線は滑らかな補間を使用しています
  • 式フィールドには式がカーブであることが表示されます。これは、アニメーションがカーブ エディター内のカーブによって制御されていることを意味します。

Pythonを使ったキーフレームの設定

Python スクリプトを使用してキーフレーム アニメーションを作成する場合、キーごとに設定する必要がある属性が複数あります。

これらには次のものが含まれます。

  • x - ポイントの水平位置(フレーム値)
  • y - ポイントの垂直位置(ノブの値)
  • 補間- 最初のキーの左傾斜と最後のキーの右傾斜を除くすべての傾斜を計算するために使用されます。
  • 外挿- 左端と右端の傾斜を計算します

カスタム補間を設定するには、次の属性を設定して、作成された各キーの接線を個別に編集できます。

  • lslope - 点の左側の微分
  • r傾き- 点の右側への微分
  • la - 左の「双三次」値
  • r a - 正しい「双三次」値

以下は、キーフレームの接線を表示し、lslope と rslope を強調表示したスクリーンショットです。

接線2.PNG

Python AnimationKeyクラスの詳細と、補間および外挿属性に使用できるオプションについては、 Nuke Python API リファレンス ガイドのAnimationKeyセクションを参照してください。

サンプルスクリプト

添付のPythonスクリプトは、キーフレームアニメーションカーブの作成を自動化する方法を示しています。このスクリプトをNukeのスクリプトエディタで実行すると、アニメーション化されたカラーノブを持つConstantノードが作成されます。

スクリプトを確認するには、添付ファイル ( CurveTest.py )をダウンロードして、 Nukeのスクリプト エディターまたはテキスト編集ソフトウェア (PyCharm、Sublime Text、Notepad ++ など) で開いてください。

NUKEでスクリプトを使用する

Nuke内では、 CurveTest.pyファイルをインポートするか、その内容をスクリプト エディターにコピー/貼り付けして実行することで、スクリプトをテストできます。

スクリプトが実行されると、カラーノブにアニメーション キーを持つ Constant ノードが作成されます。

ノードを選択してカーブ エディターで表示すると、アニメーション キーを検査し、生成されたカーブを表示できます。

以下は、カーブ エディター タブで検査できるスクリプトの出力です。

キーを手動で操作することも可能です。キーを1つ選択すると、そのキーの接線が表示され、さらに操作することができます。

高度なヒントやプロセスを含むカーブ編集の詳細については、 Nukeドキュメントのカーブ編集セクションをお読みください。

スクリプトの説明

CurveTest.py Pythonスクリプトには、各関数の機能とスクリプト内での使用理由を説明するコメントが含まれています。以下に、特定の関数と概念の概要を示します。

アニメーションカーブ変数の設定

スクリプトは、アニメーション カーブの定義に使用されるデータの初期化から始まります。

このデータを設定する方法は、次のように、キーのフレーム、値、接線情報を Python 辞書オブジェクト内に保持することです。

# Curve data stored in dictionary object
curve_data = {1: {'val': 1, 'in_slope': 0.0}, 30: {'val': 10, 'in_slope': 0.0}, 50: {'val': 5, 'in_slope': -56.957}, 60: {'val': 0, 'in_slope': -14.341}, 70: {'val': 5, 'in_slope': 56.957}, 80: {'val': 5, 'in_slope': -77.891}, 90: {'val': 5, 'in_slope': 0.0}}

新しいアニメーション キーフレームが辞書オブジェクトに追加され、辞書がループされて各キーがアニメーション カーブに追加されます。

関数の使用

曲線を効率的に使用し、他のスクリプトでも再利用できるようにするため、すべての関数はdef (function)に格納されています。この定義はすべて辞書オブジェクトによって提供される 'curve_data' に依存しているため、他のPythonスクリプトに簡単に統合できます。

def create_curve(curve_data):

ノードとノブの設定

このスクリプトの例では、Constantノードを作成し、カーブアニメーションデータをそのカラーノブに格納します。この設定を別のノードとノブに適用したい場合は、以下の行でノードとノブの名前を置き換えてください。

node = nuke .createNode('Constant')
attr = node['color']
attr.setAnimated()

アニメーション化されたノブに複数のキーを追加できるように、ノブをさらに「アニメーション化」に設定する必要があります。

カスタム補間

AnimationKey のドキュメントで説明されているように、 nuke .USER_SET_SLOPEが設定されている場合、補間と外挿は無視され、代わりにユーザーが生成した接線が使用されます。

Python スクリプトの 55 行目を見ると、 changeInterpolation()関数が 'nuke.USER_SET_SLOPE' に設定されており、これはアニメーション カーブがカスタム補間接線を使用していることを意味します。

curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)

次のような print ステートメントを追加すると、

curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)
print (curve.toScript())

次に、スクリプト エディタでスクリプトを実行すると、曲線内から次のカスタム補間情報が得られます。

{curve l x1 1 s0 x30 10 s0 x50 5 s-56.957 x60 0 s-14.341 5 s56.957 5 s-77.891 5 s0}

カスタム作成されたすべての接線がアニメーション カーブに正常に追加され、Constant ノードのカラーノブに表示されるはずです。

サンプル スクリプトを、 curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)をコメント アウトして実行し、同じ print ステートメントを追加すると、次のようになります。

#curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)
print(curve.toScript())

曲線にはデフォルトのデータが次のように表示されます。

{curve x1 1 x30 10 x50 5 x60 0 5 5 5}

注意:新しく作成されたアニメーション カーブのキーを操作すると、 Nuke Python API リファレンス ガイドのAnimationKeyセクションで説明されているように、カーブ補間がデフォルト状態にリセットされます。

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

理由をお聞かせください