動作ドクトリン(ゲートウェイ)
アニメーションを作成する前にこれを読むこと。これにより、すべてのシーム(つなぎ目)で何が起こるか、各シーンがどのようにパフォーマンスするかが決定されます。テクニックスキルはこれを実装します。これらのルールは、汎用的または上流の動作ガイダンスよりも優先されます。これが防止する失敗:シーンが個別に作成されることで、視線の勢いがカットごとに途絶え、シーンが入場と退場の間でその場で揺れることです。
ルートマップ
| 決定(このスキル) | 実装スキル |
|---|---|
| シーム遷移の選択 + パラメータ + コード | cut-the-curve §1–5 (カタログ) |
| テキスト/要素のカスケード入場 | cut-the-curve §6 (滝入場) |
| シーン内グループの再配置(カットなし) | cut-the-curve §7 (ナッジカーブ) |
| カーソル主導のアクション/シーン開始/モーフ発火 | oversized-cursor |
| シームレンダリングメカニクス/ホワイトフラッシュガード | seam-craft |
| プロダクトローンチ/解説/キャプション作業 | text-beat-economics、brand-faithful、captions-overlay を上流スキルの上にオーバーレイ |
作成順序: ベクトル台帳(ledger.json) → そこからマスターシームをスタンプ(scripts/seam-stamp.mjs --ledger ledger.json --write index.html)→ フェーズごとに持続動作ルートを割り当て → キャリアと原因 → ビルドコンポジション → 検証(scripts/seam-gate.mjs)。
ティアAのモーフ/マッチカットのみ手動で作成し、スタンプされたシームは構築上ゲートを通過します。
パート1 — シームの法則
ベクトル法則
シーンAの出口の仕方が、シーンBの入り方を決定する:同じ軸、同じ方向、一致した速度、両側で動作途中でカットすること。
- 軸 — XはXのまま、YはYのまま、ZはZのまま。カットをまたいで軸を交換してはならない。
- 方向 — ミラーリングしてはならない。Z軸の場合、方向 = スケール変化の符号:拡大 = 押し込み(カメラ前進)、縮小 = 引き(カメラ後退)。後退する出口に、小さくからの拡大入場で応えるのはミラーリングされたベクトル — 最も一般的な違反。なぜなら、小さくからの拡大はデフォルトの要素入場方法だから。
- 速度 — 入場初速度 ≈ 出口最終速度。ミラーリングされたイージングで実現(出口
power4.in+ 入場power4.out、同じ距離と継続時間;入場側が見かけの経路の50%以降で動きを引き継ぐ)。メカニクスはcut-the-curveにあり。 - フェーズ — カットは両側で動作途中に位置する。カット前に静止したり、カット後に静止から開始するのはデッドビートとなる。
カレント
すべてのフィルムは1つの支配的な方向(ハウスデフォルト:左)を選ぶ。通常のシームはすべてこれを使用する。他のベクトルは予約済み — それらを使用することには意味がある:
| ベクトル | 意味 |
|---|---|
| カレント(左) | 「次のビート」— 中立的な前進 |
| 上方向 | 高揚 — 結論や啓示が先行するものより上に現れる |
| Z前進(ズームスルー) | 同じ思考をより深く掘り下げる |
| Z後退(逆ズーム) | 到着 — より大きな何かが着地する |
| スケールバースト(爆発的拡大) | 世界の離脱 — 表面がカメラを通り過ぎる |
- 連続するシームを反対方向に実行してはならない — ピンポンはエラーと解釈される。
- 方向転換には、目に見える原因(クリック / バウンド / インパクト)またはチャプター境界が必要。
ベクトル台帳
マスタータイムラインを作成する前に、プロジェクトルートの ledger.json として作成すること(スキーマ:references/seam-gate.md)。シームごとに1行:カット時間、出口と入場のベクトル(軸 + 符号付き方向;Z行はスケール符号を含む)、セレクタ、テクニック。出口と入場は一致しなければならない。行が不一致の場合は、プランを修正し、イージングを調整してはならない。検証プログラムは、ランタイムサンプリングの前に、静的に行の一貫性をチェックする。
キャリア
目はオブジェクトを追い、抽象概念を追わない。最も強力なシームは、一致した位置および速度で、具体的なキャリアをカットの向こう側に引き渡す:途中にあるカーソル、次のレイアウトに縮小/ドッキングするコンテナ、正確なスロットに飛び込むマーク、滝カットの単語グループ。自然なキャリアがない場合、シーンのヒーロー要素がそれを引き受ける(部分的な移動 + 早期フェードアウト、途中からの入場)。クロスフェードは決して使わない — それにはキャリアがまったくない。
因果動作
各動作が、前の動作によって目に見えて開始されるように連鎖させる:クリック → 押しつぶし → バネの解放 → 飛行 → インパクト → 反動 → リビール。
- エフェクトは、原因となったフレーム上で開始する — 同じタイムライン位置で、「少し後」では決してない。
- 反応は、暗黙の質量に比例する:大きな要素はよりゆっくりと跳ね返り、小さな要素は素早く反応する。
- 力は方向転換のライセンスとなる;原因のないフリップはピンポンである。
シームゲート(ビルドゲート — 検証プログラムを実行し、終了コード0でなければシームは完了とみなされない)
node <SKILL_DIR>/scripts/seam-stamp.mjs --ledger ledger.json --write index.html # 生成
node <SKILL_DIR>/scripts/seam-gate.mjs verify --ledger ledger.json --project . # 検証
このスクリプト(使用方法 + 台帳スキーマ:references/seam-gate.md)は、シームごとに以下を数値的に強制する:台帳行の一貫性、出口がカット時点で動いていること、入場が飛行途中であること(静止からではない)、測定された方向が台帳の方向と一致すること、入口/出口速度の一致(WARN)、重なりゼロ(1フレームに1つの面のみ表示 — カットはディゾルブではない)、Z符号ルール(両側で d(scale)/dt の符号が同じ;入ってくるシーン自身の入場も符号競合についてスキャンされる)、および祖先スケールを含めたキャリア矩形の連続性。台帳作成時に各シームの真のキャリアセレクタを見つけるには、seam-gate.mjs probe --t <cut> を使用する。
スクリプトがチェックできないルール — 依然としてあなたの責任:
- 編集はシームを再オープンする。 シーンの最初/最後の約1秒に対する変更(新しいVOに合わせた再タイミングを含む)は、その境界の監査を無効にする — 検証プログラムを再実行すること。
- オーディオが時計である。 シーンのタイミングはVOの実際の単語タイムスタンプに合わせる;スロットに合わせて読み上げを急がせてはならない。VOの再生成はシームを再オープンする。
- クリップゲーティングの落とし穴(ゼロオーバーラップFAILの最も一般的な原因):
data-startが入場トゥイーンより前にあるクリップは、初期不透明度で非表示解除される — 初期autoAlpha: 0を設定し、かつdata-startをカット時間に設定する。それより前にしてはならない。
パート2 — パフォーマンス(シーンはパフォーマンスし続ける)
アイドル揺れの禁止
アイドル状態のサインループ(呼吸、浮遊、ドリフト、グローパルス)は、持続動作として禁止される — これらは「動画が待機している」と解釈される。入場が完了してから数秒余っているシーンは、計画のバグである:揺れではなく、ストーリーを追加すること。入場と退場の間のすべてのフェーズは、以下のルートのいずれかによって所有される(計画内でルートを指定すること):
| ルート | 説明 |
|---|---|
| 段階的リビール | コンテンツを一部保留し、ナレーションビートで解放する — フレームは情報を獲得し続ける(2つ以上のコンテンツグループがある場合のデフォルト) |
| 意図を持ったカメラ | マッピングされたスケール+パンのパス:全体像の確立 → 移動 → 被写体への到着 |
| シーケンシャルUIライフ | プロダクトが時間とともに振る舞う:進捗が進む、ステップがハイライトされる、カウントが刻まれる |
| アニメーションシーケンス | 要素がビートを演じる:カードが山にファイルされる、アイテムがドラッグされる、結果が組み立てられる |
| カーソル主導のアクション | 特大のカーソルが視線をトリガーに導く;そのCLICKが次のビートを点火する(oversized-cursor) |
テスト:任意の秒で一時停止 — 意味のある何かが途中でなければならない(リビールが着地中、カメラが移動中、UIがナレーションで言われていることを実行中)。
クライマックス前の静止
主要なアクションとその結果の間に 0.3~0.75秒の一時停止を計画する — 劇的なコンマ。アクションから結果に直接ジャンプするシーンは、その効果を失う。
タイミングの意図
- 単一の入場 ≤ 約800ms;より長いビルドアップ = マルチエレメントのスタガーであり、1つの遅い要素ではない。
- 退場 ≈ 入場の75%。例外:
cut-the-curveはこれを逆転させる(入場 ≈ 退場の127%)。 - 合計スタガー ≤ 500ms;8つ以上の要素がある場合、アイテムごとの遅延を短縮するか、最初の数個だけをスタガーする。
- 禁止イージング:
bounce.out/elastic.out。入場のオーバーシュートback.out(1.4–1.7)は問題ない。 - 類似した要素は、1つのイージング+デュレーションの意図を共有する — 要素ごとにユニークなペアを決して使用しない。
遷移語彙
フィルム全体で2~3つのシーン間遷移のみを使用し、それらを繰り返す;デフォルトの境界は、カレントの方向への cut-the-curve である。手書きの共有要素モーフ(intent: morph)は、予算にカウントされない。
アンチパターン
| 禁止 | 代わりに |
|---|---|
| 各シーンの入場を個別に作成する | 最初にベクトル台帳を作成する |
| シーン間をクロスフェードする | カレントの方向へ cut-the-curve を使用する |
| 退場が完了してからシーンを変更する | 両側で動作途中でカットする |
| カット後に静止から入場を開始する | 見かけの経路の50%以降で入場する |
| 逆ズーム退場 → 小さくからの拡大入場(または押し込み → 特大の収縮) | スケール速度符号を一致させる(シームゲート7) |
| Zシームハンドオフ下での、入ってくるシーン自身のポップインイントロ | その開始フレームを構成された状態で保持するか、符号を一致させる |
| アイドル揺れ/呼吸/浮遊で時間を埋める | 持続動作ルートを割り当てる;またはストーリーを追加する |
| 原因のない方向フリップ | 力を投入するか、カレントを維持する |
| 予約済みベクトルをバラエティとして使用する | カレントをデフォルトにし、意味があるときに予約済みベクトルを使用する |
| 原因から数フレーム後に反応を配置する | 同一フレームで発火させる |
| アクションが結果に直接ジャンプする | クライマックス前の静止(0.3~0.75秒)を計画する |