FilmForge Motion
絵画はフィルムのフレームのように静止している。ズームもドリフトもない。動きはフレームの内側から生まれる。パーティクル、フォグ、フリッカー、シマー、ライト。すべてGPU上で無料でレンダリングされる。有料のビデオは、コードではできないこと(本当の飛行、映画のクライマックスとなる変身)のために残しておく。このスキルは、各ショットのmotionフィールドを設定し、QA修正を適用し、レンダラー用のタイムラインをエクスポートし、監督が承認するプレビューをレンダリングする。
パス: 以下のscripts/、templates/、config/は、このスキル内のフォルダ(読み込み時に表示されるベースディレクトリ内)であり、./install.shによって配置される。リポジトリのクローンから作業する場合、これらはルートにあるtools/、templates/、config/である。
レンダラーは painted-film-pipeline(Python と GLSL。モジュール名は後述)である。すべてのピクセル値は4K (3840x2160) である。レンダラーはこれらを K = W / 3840 でスケーリングするため、1080p のプレビューでも同じ数値が使用される。
ステップ1. ショットを読む
各ショットについて: そのビート、そのシーンのムードとカラースクリプト、リタイム後の長さ、その下にある音楽(フレーズ、beatmap.json のヒット)、すでに絵に描かれているもの(火、海、空、ガラス)。生命はその絵の世界に属していなければならない: 描かれた火から炭が立ち上り、空があるところに雪が降る。
ステップ2. 生命を選ぶ(語彙)
| エフェクト | パラメータ (ショットフィールド) | 値 |
|---|---|---|
| 漂うフォグバンド | fog + fogc | (強度 0..1, 開始y, 全面y, ドリフト速度); 色 (r, g, b) 0..1 |
| ハイライト上のライトスイープ | sweep | (周期 s, バンド幅 px, 強度, 0) |
| 一点周りの焚き火の揺らめき | flick + fire | 振幅 (0.07 ~ 0.45); (x, y, 半径 px) |
| バンド内の熱のゆらぎ | shim | (y 最大, y ゼロ, 0, 強度) |
| カメラシェイク | shake | (開始 s, 長さ s, 振幅 px) |
| イン/アウトのトランジション | tin, tout | ("fade" または "white", 秒); デフォルトはハードカット |
| リフレーム | crop | (x0, y0, x1, y1) ソースピクセル単位 |
| パーティクルティント | ashc | (r, g, b) |
| パーティクル | life | 以下のパーティクルシステムに対するレシピまたはラムダ |
| 稲妻 | bolts | ショット内の時間のリスト |
| ガラスのひび割れ | crack | (開始 s, 長さ s) |
パーティクルシステム (painted.py): ash(t, n, wind=(vx, vy), size=(最小, 最大), alpha, seed) 灰、塵、雪用; flakes(...) 大きな柔らかいフレーク用; sparkles(t, n, alpha, size) きらめきと星用; streaks(t, n, speed) 雨用; embers(t, n, src=(x, y), spread, rise, life) 発生源から立ち上る炭用。実際の映画からのレシピ (film_cut.py): SNOW(n, wind), EMB(n, alpha), GLINT, RAIN, STARS(n), GOLD。全パラメータの意味: references/pipeline-modules.md; テスト済みムードレシピ: references/effects-cookbook.md。
グラフィックス (graphics.py, overlays.py): 描画され、音楽に合わせて揺れ、スナップする黄金の糸リボン (T(points, t0, draw, w)); 左から右に書かれる手書きの単語 (W(text, t0, x, y, size)); シーン自身の素材から形成され吹き飛ばされる場所の名前 (V(...)); タイトルフィナーレ。
ステップ3. 音楽にドライブさせる
graphics.Drive はフレームごとのスコア(レベルとパルス)を測定する。ブルーム、炭のフレア、糸のグロー、テキストの呼吸はそれに追随するため、キーフレームなしでヒットが炭をフレアさせる。beatmap.json のヒットにトランジションとシェイクを配置する(shake の開始 = ヒットの時間からショットの開始時間を引いたもの)。
ステップ4. motion フィールドを書く
shotlist.yaml 内、ショットごとに(例: Simorgh の火の森のショット、そして The Lantern Moth の光線):
motion:
life: EMB(320)
flick: 0.09
fire: [1920, 1300, 2600]
shim: [2160, 300, 0, 0.8]
ashc: [0.62, 0.55, 0.5]
motion:
tin: [white, 0.4]
sweep: [3.0, 520, 0.35, 0]
life: GOLD
shake: [0.0, 0.4, 10]
何も必要としないショットには motion: none を設定する(ゲートはすべてのショットが決定されていることを要求する)。
ステップ5. QA修正を適用する
qa.yaml のすべての fix について: その呼び出しを実行し(grade.py の recolor または blue、パッチ、ショットへの crop)、_g ファイルを書き込み、ledger.py palette で再測定し、done: true を設定する。マッチしたグレード(プレートレベル)と4Kアップスケールはレンダラーで自動的に行われる。
ステップ6. エクスポート、レンダリング、確認
python3 scripts/shotlist.py export-cut shotlist.yaml --paintings art/film > code/timeline.py
タイムラインを film_cut.py 用の P_() 行として出力する。次に、レンダラー内で:
W=1920 H=1080 python film_cut.py still out/frames 6.0 12.0 24.0 # ストーリーヒットでの静止画
python film_cut.py sheet out/sheet.jpg # ショットあたり1フレーム
python film_cut.py video film/preview_1080p.mp4 audio/score.wav # スコア付きプレビュー
音声付きでプレビューを見る。すべてのヒットで静止画を確認する。その後、監督がモーションステージを承認する。
ビデオに支払うタイミング
モーションがストーリーであり、コードで偽造できない場合のみ: 飛行(Simorgh の離陸: スピードランプ付きの実際のクリップ)、クライマックスの誕生または変身。budget.py でコストを見積もる(Kling 4.0: 1080p で5秒あたり16.25クレジット、キーフレームのペインティングは別)。最初にキーフレームをペイントしてQAを通す。モデルがドラフトを提供する場合は安価にドラフトし、1テイクを最終化する。それ以外はすべて、アニメがポーズを保持するように、スナップするペイントされたキーポーズ(poses: 2)で表現される。
出力
- すべてのショットの
motionフィールド(またはnone) - export-cut からの
code/timeline.py - 適用された修正(
_gファイル、qa.yaml 内のdone: true) film/preview_1080p.mp4、ヒットでの静止画、ショットあたり1フレームのシート
ゲートチェックリスト
- すべてのペイントされたショットにモーションプランまたは
motion: noneがある - すべてのQA修正が適用され、再測定された
- プレビューが音声付きで視聴され、すべてのヒットでの静止画が確認された
- 承認済み
修復テーブル
| 症状 | 修正 |
|---|---|
| スライドショーのように感じる | すべての静止には、その世界に関連した1つの生きているレイヤー(パーティクル、フォグ、フリッカー)が必要。シーンごとに変化させる |
| エフェクトが貼り付けられたように見える | パーティクルをペインティングのashcで着色する。エミッターはペイントされたソースに。フォグの色は空から |
| フレームがごちゃごちゃしている | パーティクルを減らす(nを半分に、アルファを下げる)。シーンごとに1つのエフェクトファミリー |
| 異なる世代のショットがカットでつながらない | そのプレートのマッチしたグレードがずれている: レベルを確認。すべてに1つのグレード、グレイン、ビネット |
| エフェクトが音楽を無視している | ヒットが使用されていない: ビートマップのヒットにシェイク、フレア、トランジションを配置する |
| テキストが読みにくい | ペインティングの静かなエリア(text_area)に移動し、サイズを大きくし、書き込み速度を遅くする |
参考文献
references/pipeline-modules.md: レンダラーのモジュールとすべてのパラメータreferences/effects-cookbook.md: 完成した映画からの、ムードごとのテスト済みレシピ