概要
キーフレームで動きを作るタイムライン系ノードです。波形ノードが「数式の動き」 なら、こちらは「このフレームでこの形」を直接指定する作り方。パスや画像の変形を 専用エディタでポーズ登録・記録し、AnimationClip として再生・書き出しできます。
使い方のポイント
- モーションとの使い分け: 周期的・機械的な動き→motion ノード、 「振りかぶって→溜めて→振り下ろす」のような演技→このノード
- 基本の流れ:
pathかimageをつなぐ → エディタでフレームを動かしながら pose mode でキーを打つ → play で確認 → 同名のパス/画像出力で下流へ。 出力は「現在フレームの適用結果」なので、後段にフィルタや motion 系を重ねて 最後にアニメーションレンダーへ繋げば全部まとめて再生される。 シートが直接欲しいときはspritesheet出力でもよい - クリップの尺・キー位置はフレーム基準。新規クリップの尺と fps は プロジェクトのアニメーション既定(キャンバスバー)に従う
progress入力(0〜1)を外部から与えると、クリップの評価時刻をグラフ側で 制御できる(time_source連携や、進行度による演出分岐)value_float出力は、クリップ内の最初の数値(Scalar)トラックを現在の評価時刻で 評価したただの Float。数値パラメータ 1 個をキーフレームで動かす用途 (Inspector の 🎞️ アニメーションボタン「キーフレーム」フレーバーはこの出力を 対象パラメータへ自動接続する)に使う。キーの範囲外では端のキー値にクランプされ、 補間はトラックの補間設定(ease_in_outと共通のイージング語彙)に従う。 Scalar トラックが無いクリップでは 0.0 を出す- source ノード自体は書き換えられない(非破壊)。元の形はいつでも無傷
よくある失敗
- キーを打ったのに動かない: キーが1つだけだと補間できない。始点と終点の 最低2キーが必要
- エディタと出力が違って見える: エディタの表示は「source+clip適用後」。
同じ見た目を下流に流すのは
パス/画像出力(現在フレームの適用結果)。clip/valueはアニメデータそのもの、spritesheetは全フレームのシートなので、 どの出力を使っているかを確認する
interactive editor
Keyframe Clip は source 埋め込み型の interactive editor を持ちます。
editor でできること:
- source 切替
PathとImageのどちらを今編集するか選べます
pose mode- 現在時刻の形を 1キーの pose として保存します
record mode- drag 軌跡を開始/終了範囲へ記録します
- play / stop / loop
- editor 内 preview をそのまま再生できます
- key list
- 保存済み key を一覧で見て、そこへジャンプできます
- export
- 尺 D フレームを t=0〜D-1 でサンプルした spritesheet PNG (最終フレームは「先頭に戻る直前」で止まるループ規則)
- 実キーのフレームだけをまとめた key PNG 一括書き出し
- 現在フレーム PNG 書き出し
重要:
- source node 自体は書き換えません
- editor 上で見えているのは source + clip 適用後の姿 です
- キーを切り替えると、その key pose がそのまま表示されます
- 画像 source は v1 では移動 / 回転 / 拡大縮小の transform を編集します
- 回転は外周付近へマウスを持っていくと
↺が出る zone drag 方式です
- 回転は外周付近へマウスを持っていくと
- path source は point / handle を直接動かして pose を作ります
技術詳細
AnimationClip は P07 の user-facing animation 型です。
内部では explicit な track / keyframe を持ち、必要に応じて RecordedLayer と相互 bridge します。
layer 入力が接続されている場合は:
layer入力を base clip へ変換clip_dataを local clip として重ねる- 出力では同じ clip を
AnimationClip/RecordedLayerの両方で見られます
path / image 入力は editor 用の source でもあり、同時に downstream の ClipApplyPath / ClipApplyImage と組み合わせる前提です。
使用例
Path をキー編集する
BezierPathを作るKeyframeClip.pathへつなぐKeyframeClipeditor を開く- フレーム 0 で point / handle を動かして最初の pose を作る
- 最終フレームで別 pose を作る
KeyframeClip.clipをClipApplyPath.clipへつなぐBezierPath.pathをClipApplyPath.pathへつなぎ、progress(0〜1)をFloat InputかTime Sourceで動かして再生する
Image をキー編集する
PixelCanvas.imageなどの image source を作るKeyframeClip.imageへつなぐKeyframeClipeditor を開く- 画像本体をドラッグして移動、角で拡大、外周近くの
↺zone で回転する KeyframeClip.clipをClipApplyImage.clipへつなぐ- source image を
ClipApplyImage.imageへつなぎ、progressを動かして再生する
clip editor から書き出す
KeyframeClipeditor を開く尺(フレーム数)を決める(初期値はプロジェクト既定のフレーム数)列数を必要なら指定するスプライトシートPNGで全フレームを書き出すキー画像一括で実キーだけを個別 PNG として書き出す
補足:
Imagesource の spritesheet は尺 D フレームを t=0〜D-1 でサンプルして並べます列数 = 0の時は横一列ではなく、自動でほぼ正方形に近い配置を選びます- 配置順は
右へ(row_major) と下へ(column_major) を選べます - node 出力は P07A の
SpriteSheet契約spritesheetは専用型frame_count / fps / columns / rows / frame_width / frame_height / fill_orderは helper metadata 出力 を同じ書き出し設定で返します
columns/rows/frame_width/frame_height/fill_order出力を使うと、後段でフレーム分割しやすくなりますPathsource の書き出しは editor 上の line preview を透明背景 PNG にしたものです- 最終見た目で書き出したい場合は
ClipApplyPath -> PathStroke -> AnimationRenderを使ってください
関連ノード
clip_apply_path/clip_apply_image— クリップをパス・画像に適用して下流へ流すanimation_render— 最終見た目でのスプライトシート化clip_mixer/clip_loop_fit— クリップの合成・ループ調整motion等の波形 — 数式的な動きで足りる場合
時刻・複数トラック・データ保護
- 時刻入力は
progress(0〜1 の正規化進行度)一本です。progress * 尺(フレーム数)を 評価します。未接続ならグラフの評価時刻を正規化進行度として扱います。 旧バージョンの絶対秒timeピンは廃止され、旧プロジェクトのtime接続は 読込時にprogressへ自動で繋ぎ替えられます。 Time Sourceの 0〜1 出力はprogressへ接続してください。- クリップの尺・キー位置はフレーム基準(v2)。旧 v1(秒基準)の
clip_dataは 読込時に旧「1コマ秒」設定から fps を逆算してフレームへ自動変換されます (設定が無い場合は旧既定 10fps で換算)。 - 画像の Transform track が複数ある場合、プレビューと書き出しには全 track を 順に適用します。キャンバス操作、キー追加・移動・削除は選択中 track だけが対象です。
- 尺を短くしても範囲外キーは削除しません。評価時刻は 0〜尺に clamp されます。不要なら editor の「範囲外キーを削除」、比率を保って収めるなら 「全キーを尺へ縮尺」を明示的に実行します。
- 非空の壊れた
clip_dataは空データへ読み替えません。元文字列を保持して保存を止め、 コピーまたは確認付きリセットを選べるエラー画面を表示します。 - キー間の補間はトラックごとに選べ、イージングの語彙・カーブは
ease_in_outノードと共通です(リニア/イーズイン/…/バウンスアウト/ステップ)。