まとめ
Nukeスクリプトでアニメーション キーを設定する場合 (たとえば、トランスフォーム ノードやロト マスクの位置をキー入力する場合)、Python を使用してアニメーション カーブを定義すると、柔軟性が大幅に高まります。ユーザーは、アニメーション キーの生成と配置を自動化し、ニーズに合わせて勾配を調整し、パイプライン内で使用されるさまざまなツール間でカーブ データを共有できます。
この記事では、Python を使用してアニメーション キーを作成し、曲線の傾斜を更新する方法を、テスト可能なサンプル スクリプトを含めて説明します。
詳しくは
Nuke内でアニメーション キーを設定すると ( ノード ノブにキーを設定することで)、キーフレームはカーブ エディタ内でカーブとして表示されます。
以下のスクリーンショットでは、ColorCorrect ノードの「saturation.r」ノブについて、さまざまなフレームに設定されたアニメーション キーから作成されたカーブを確認できます。
- キーの値は、ユーザーが「saturation.r」ノブに新しい値を追加した場所です。
- カーブ エディターはXYグラフを使用します。Xはフレーム範囲 (0 ~ 100 のフレーム範囲) を示し、 Y は「saturation.r」ノブの値 (0 ~ 1 の間) を示します。
- ユーザーが選択したキーフレームはフレーム 53 で、値は 0.59 です。
- 選択したキーフレームには、傾斜を定義する接線も表示されます。傾斜を操作すると、キーフレーム間のカーブの形状がカスタマイズされ、より滑らかまたは一定になります。
- 選択したカーブはスムーズな補間を使用しています
- エクスプレッション フィールドには、そのエクスプレッションがCurveであることが表示されます。これは、アニメーションがカーブ エディタ内のカーブによって制御されていることを意味します。
Python を使用したキーフレームの設定
Python スクリプトを使用してキーフレーム アニメーションを作成する場合、各キーに複数の属性を設定する必要があります。
これらには次のものが含まれます。
- x - ポイントの水平位置 (フレーム値)
- y - ポイントの垂直位置 (ノブの値)
- interpolation - 最初のキーの左傾きと最後のキーの右傾きを除くすべての傾きを計算するために使用されます。
- 外挿- 左端と右端の傾きを計算します。
カスタム補間を設定するには、次のアトリビュートを設定して、作成された各キーの接線を個別に編集できます。
- lslope - 点の左側の導関数
- rの傾き- 点の右側の導関数
- la - 左の「双三次」値
- r a - 正しい「双三次」値
以下は、キーフレームの接線を表示し、lslope と rslope を強調表示しているスクリーンショットです。
PythonのAnimationKeyクラスと内挿属性と外挿属性に使用できるオプションの詳細については、 Nuke Python APIリファレンスガイドのAnimationKeyセクションを確認してください。
スクリプト例
キーフレーム アニメーション カーブの作成を自動化する方法を示す Python スクリプトの例が添付されています。これがNukeの Script Editor で実行されると、アニメーション化された「color.r」ノブを持つ Constant ノードが作成されます。
スクリプトを確認するには、添付ファイル ( CurveTest.py
)をダウンロードして、 Nukeのスクリプト エディターまたは Python 編集ツール (PyCharm、Sublime Text、Notepad++ など) で開きます。
NUKEでのスクリプトの使用
Nuke内では、 CurveTest.py
ファイルをインポートするか、その内容をコピーしてスクリプト エディターに貼り付けて実行することで、スクリプトをテストできます。
スクリプトが実行されると、「color.r」ノブにアニメーション キーを備えた 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}}
新しいアニメーション キーフレームがディクショナリ オブジェクトに追加され、ディクショナリがループして各キーをアニメーション カーブに追加します。
定義の使用
曲線を効率的にし、他のスクリプトで再利用できるようにするために、すべての関数が定義内に保持されます。すべての定義は辞書オブジェクトによって与えられる 'curve_data' に依存しているため、これは他の Python スクリプトに簡単に統合できます。
def create_curve(curve_data):
ノードとノブの設定
スクリプトの例では、Constant ノードを作成し、カーブ アニメーション データをその「color」ノブに保存します。この設定を別のノードとノブに使用したい場合は、以下の行の名前を置き換えることができます。
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 ノードの「color.r」ノブに表示されるはずです。
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」セクションで説明されているように、新しく作成したアニメーション カーブのキーを操作すると、カーブ補間がデフォルトの状態にリセットされます。
私たちはそれを聞いて申し訳ございません
理由をお聞かせください