フルカラーアニメーション(線画)
1枚の絵を3~4フレーム保持し、絵の切り替えと口の形の変化で演技を表現します。シンプルなテレビアニメ調のデザインの場合、画像モデルが最も一貫性を保つことができる方法です。3Dも動画モデルも必要ありません。
スクリプトはこのスキルの scripts/ フォルダにあり、パスはこのSKILL.mdからの相対パスです。以下、$S はそのフォルダを表します。new_project.py を除き、フィルムフォルダから実行してください。環境の問題が発生した場合は、dula-start を使用してください。
相手の言語で話しかけてください。
ワークフロー
python $S/new_project.py my_film && cd my_film
1. ストーリーとショット
story.md を作成し、次に config/film.json(film.jsonリファレンス参照)を作成します。最初のフィルムは20~30秒に抑えてください。話されたセリフ1行は約2~3秒かかるため、15秒で3~5行程度になります。オリジナルキャラクターのみを使用してください。
すべてのセリフについて、誰が誰に言っているのか、カメラが誰を映しているのかを考えてください。ジョークは観客が理解できない言葉に依存してはいけません。因果関係も絵で示す必要があります(走り込む→掴む→物体が飛んでいく)。カットで飛ばさないでください。
2. キャラクターデザイン(最も重要な工程)
各キャラクターを config/anchors.tsv に記述します(名前<TAB>外見)。その後、実行します:
python $S/paint.py anchors config/anchors.tsv
自分で全ての画像を開いて確認してください。 一部のビューアは透明領域を黒地に色付きの光として表示し、切り抜き失敗のように見えることがあります。疑わしい場合は、手順3の build/check_alpha.png を確認してください。その後、作成したデザインを相手に見せ、承認を得てから先に進んでください。後のすべての描画はこれらに従うため、ここでのミスは修正に最もコストがかかります。プロポーションを言葉で修正します。例:「頭は全体の高さの3分の1、丸い顔、小さな黒いビーズの目、赤いオーバーオール」。
3. 背景と描画
config/plates.tsv(名前<TAB>説明)と config/cels.tsv(描画名<TAB>キャラクター<TAB>ポーズ)を記入します。描画名はキャラクター名で始めます(例:hero_run_a)。
python $S/paint.py plates config/plates.tsv
python $S/paint.py cels config/cels.tsv
python $S/prep_cels.py --bases-only # 口を描画する前に build/check_alpha.png で切り抜きを確認
画像は1枚あたり1~3分かかります。paint.py は進行状況を報告します。長時間のコマンドを停止するツールを使用している場合は、バックグラウンドで実行してください。再実行すると、完了した画像はスキップされます。1枚だけやり直すには、--only <名前> --force を使用します。
描画と場所の連続性を保つために、従うべきものを指定する列をもう1つ追加します:
hero_run_a hero 右に走る、左足を前に。
hero_run_b hero 右に走る、右足を前に。 hero_run_a
meadow 灰色の雨雲の下の草原。
meadow_sun 雨が止み、太陽が顔を出す。 meadow
ルール:
- 画像1枚につきキャラクターは1体だけ描画します。キャラクターデザインは常に最初の参照です。拒否された画像を参照として使用しないでください。
- まずキャラクターの向きを決定します。 画像は1枚ずつ生成され、それぞれが方向を選ぶため、会話中の2人が背中合わせになりがちです。事前に指定し、
flipで間違いを修正します。 - アクションサイクル内の各描画は、前の描画に従います(上記の追加列)。これにより、方向、スケール、形状が維持されます。これがないと、サイクルが飛び飛びになります。
- 時間帯の変更には、元のプレートに従って背景を再描画します。色を掛け合わせても青空を隠すことはできません。
- すべてのショットでキャラクターのプロポーションを確認します。「首を伸ばす」のようなポーズの説明が、異なる体型になってしまうことがあります。
4. 口とまばたき
発話するすべての描画は、同じ画像のローカル編集を行います。config/variants.tsv 内:
hero_stand_m1 hero_stand 口だけを半分開いた小さな楕円に変更。
hero_stand_m2 hero_stand 口だけを大きく開いた状態に変更。
hero_stand_blink hero_stand 両目を単純な曲線として閉じる。他は変更しない。
名前:<ベース>_m1 は半開き、<ベース>_m2 は大きく開いた状態。_m1 のみの場合、口は開いた状態と閉じた状態の2状態になりますが、これでも機能します。ベースとなる描画自体は口を閉じている必要があります。口を開けて描かれている場合は、閉じたバリエーションを作成し、film.json で talk を使用して3つの状態すべてを設定します。
発話するキャラクターのすべての描画には、歩行サイクルの各描画も含めて、独自の口のバリエーションが必要です。
python $S/paint.py variants config/variants.tsv
python $S/prep_cels.py
prep_cels.py は描画を真のフルカラーに押し込み、各バリエーションをベースにロックします。その後、build/check_alpha.png を開いて、マゼンタ色の切り抜きを確認します。残った背景、欠けている部分、消された目がある画像は再描画します。変更領域が大きいという警告が出た場合、モデルがボディを編集しています。variants.tsv の4列目にウィンドウ x,y,w,h を追加します。
色がずれていませんか? config/palette.json({"skin": [250, 220, 190]})を追加できます。色はキャラクターデザインからサンプリングします。近い色だけがスナップされ、prep_cels.py は変更後に再度適用します。
5. 音声
以下のいずれかを選択します:
- 相手自身のキーを使用して、
dula-voiceで音声を生成します。 - 既存の音声を使用する:
audio/voice/<ラインID>.wavに配置するか、ラインにfileを設定します。mp3 と wav の両方が使用可能です。 - 無声のドラフトを作成する:ラインに
seconds値を指定します。
口の動きはこの音声から計算されるため、テストを作成する前に音声を確定してください。
オプション:ambience(環境音)、bgm、sfx(効果音)、songs。相手が権利を持つ素材のみを使用してください。このプロジェクトは音楽を生成しません。ライセンス音楽がない場合は、スコアを省略し、環境音と効果音でフィルムを支えてください。
6. テスト
python $S/build_film.py
python $S/render.py --stills 1,3,5,8,12
python $S/render.py --range 0,20 -o output/pilot.mp4
build_film.py は、表示されているキャラクターが話しているのに口が動かない場合にエラーで停止します。これは見逃しやすいミスです。テストを見せる前に、すべてのスチルを確認してください。 フィルム全体が完成するまで誰にも見せないでください。
キャラクターを地面に配置する:ground を推測し、スチルをレンダリングして調整します。計算するよりも速いです。
ショットを静止させたままにしないでください。特定のビートで静かにする場合を除き、各ショットに動くものを1つ与えてください:プレートのパン、bob(上下動)や shake(揺れ)、描画の変更、または雨などのオーバーレイ。最後のショットで fade_out を使用してフィルムを終了します。
7. 完全なフィルムと最終確認
python $S/render.py
python $S/check_mouths.py
引き渡し前に、以下の各項目を確認し、確認できなかった場合は率直に伝えてください:
- すべてのショットから実際のフレームを確認した
-
check_mouths.pyが口の固まりを報告していない - 各キャラクターがショット間で同じ人物に見える(色よりも顔とプロポーションが重要)
- 会話中の人物が互いに向き合っている
- 画面上を移動する単一の描画には
bobまたは複数の描画がある。そうでないとスライドしているように見える - 音声を聞いた。聞けない場合は、音声が耳でチェックされていないことを伝える
完全な例
このリポジトリの examples/rainy-slide には、完成した15秒のフィルムのプロンプトとショットリストが含まれており、docs/tutorial.md で説明されています。このファイルから ../../examples/rainy-slide と ../../docs/tutorial.md にあります。誰かが例を求めてきた場合のモデルとして使用してください。
ペーシング
目安:ショットの平均は3~5秒、キャラクターは各描画を3~4フレーム(約1秒間に7描画)保持し、頻繁なクローズアップと大げさな表情を使用します。hold は描画あたりのフレーム数です。
よくある問題
| 症状 | 原因と修正 |
|---|---|
| 口の切り替え時に体の色がちらつく | バリエーションが prep_cels.py を通過していない |
| 歩行や走行が背の高さで脈打つ | 描画のサイズを個別に調整しないでください。1つのアクターは自動的に1つのスケールを共有します。align_head も追加してください |
| 小道具が間違った色になる | パレットエントリが近すぎます。削除するか SNAP を下げてください |
| 発話中に口が開いたままになる | 2状態の口は0.5のしきい値を使用します。音声がこもっていないか確認してください |
| 小さな言葉が閉じたままになる | 1つの大きな言葉がそのラインのスケールを設定します。_m2 を追加するか、ラインの mouth_open_at を下げてください |
| 雨や風が聞こえない | 環境音はデフォルトで小さいです。level_db を指定します(例:-35) |
| 常にヒスノイズがする | 環境音クリップが単なるノイズです。交換してください。ゲインは上限があるため、これ以上増幅されません |
| Codexが参照画像が失われたと言う | 画像生成は最初のアクションでなければなりません。paint.py がこれを処理するので、再度実行してください |
制限事項
この方法は、複雑な戦闘シーン、長い連続アクション、写実的なペインティングには適していません。