ブランドループ(シームレス液体背景)
scripts/scene.py がBlenderでスタジオ全体を構築し、レンダリングします。
- ブロブ: メタボール(自己結合のみを行う2つのファミリー)。光沢があり液体のような質感で、各ブロブの伸縮に応じて2トーンの色が変化します。
- 背景: 暖かみのあるオフホワイトの壁。ループあたり2回、中心から広がるリップルリングが追加されます。
- 照明: ソフトシャドウを投影する楕円形のキーライトと、液体の輝きを強調する反射専用ソフトボックス。
- カメラ: 50mmレンズ、f/2。浅い被写界深度を実現します。
すべての動きはループの全周期のサイン波で構成されるため、フレームNとフレーム0は完全に一致します。フレーム中央はロゴやタイトルを重ねるために空いています。動画にテキストや音声は含まれません。
必要条件: Blender 4.2以上(EEVEE使用、Apple Silicon GPUでテスト済み)、および libx264 と libx265 をサポートする ffmpeg。
ワークフロー
1. 色の設定
クール系ファミリーは5段階の濃淡(暗→明)を大きなブロブに使用します。ウォーム系ファミリーは3段階の濃淡をアクセントブロブに使用します。色は以下の2つの方法で取得できます。
- ロゴから:
python3 scripts/palette.py logo.pngを実行すると、主要な色と推奨される--coolおよび--warmのペアが表示されます。loop.shに直接--logo logo.pngを渡すこともできます。 - ブランドの16進数カラーから: 色の段階が少なくても、内挿処理されるため問題ありません。
2つのファミリーは明確に異なる色(例:青とオレンジ、ティールとコーラル)に保ってください。混合色になるとブロブが結合した際に灰色になってしまうため、分離して維持します。--paper "#fcfbf8,#f2eae0" で背景の中心色と端の色を設定します。
2. プレビュー(約1分)
<skill>/scripts/loop.sh --name acme --cool "#0b3d91,#1565c0,#1e88e5,#42a5f5,#80d8ff" --warm "#ff6f00,#ffa000,#ffca28" --preview
生成された <name>/<name>-preview.png(ループ内の6つの時点を表示)を確認し、以下をチェックします。
- 色がブランドとして適切に読めるか。
- 背景が灰色になっていないか。
- 2つのファミリーが互いに交差していないか。
3. レンダリング(長時間:バックグラウンドで実行)
<skill>/scripts/loop.sh --name acme --cool ... --warm ... # 4K 60 fps, 10秒
<skill>/scripts/loop.sh --name acme --res 1920x1080 ... # 1080p、約4倍高速
M1 Proの場合、10秒の4K60ループは約95分(600フレーム、2つのBlenderプロセスで各約9.5秒)、1080pでは約25分かかります。途中で中断された場合もレンダリングは再開可能です。--keep-frames を指定しない限り、エンコード後にフレーム画像は削除されます。
出力は <name>/ ディレクトリに以下が保存されます。
<name>-4k60-loop.mp4: H.264、ほとんどの環境で再生可能。-loop-hevc10.mp4: 10ビット、最も滑らかなグラデーション、編集者向け。-1080p60-loop.mp4: ウェブ向け。-still.pngおよび-keyframes.png。
4. 確認
- スクリプトはシームチェックを表示します。最終フレームと最初のフレームの間のPSNRが、通常のフレーム間のPSNRとほぼ同じである必要があります。大幅に低い場合は、周期性に問題があります。
-keyframes.pngを確認します。- ループに継ぎ目がないことをユーザーに伝え、再生プレイヤーやエディターでループ再生を有効にするよう注意を促します。
調整可能なパラメーター
以下のパラメーターは scene.py に直接渡せます。loop.sh の LOOK 配列を編集するか、Blenderを直接実行して設定します。
--key,--fill,--wash: 光の強度。--emit,--world: 背景の明るさ。--ringamt,--ringbump: リップルの強さ。--fstop: ぼかし(数値が小さいほどぼける)。--glow: ブロブの発色の鮮やかさ。--dur: ループの長さ。どの長さでも動きは周期性を保ちます。
ブロブのレイアウト、サイズ、パスは scene.py の BLOBS リストで定義されています。位置はメートル単位で、焦点面でのフレームサイズは 0.864 × 0.486 m です。ブロブを移動した後は、2つのファミリーが(サイズの合計距離以上)離れていることを確認してください。