Communitygithub.com

Blender 製品ビデオ

フォトリアルなBlenderセットに視覚的メタファーを乗せ、2Dブロックグリッドのエンディングで見出しと行動喚起を綴る、無音・テキスト主導の製品フィルムを作成します。ローンチビデオ、製品説明、短いブランドフィルムを、GPUなしのマシンでもBlender(bpy)、Python、ffmpegでコードからレンダリングしたい場合に使用します。

Blender 製品ビデオ とは?

このスキルは、BlenderとPythonコードのみを使用して、無音再生を前提としたプロフェッショナルな製品フィルム(45〜75秒)を生成するための完全なパイプラインを提供します。草、木製のゲート、空などのフォトリアルな3Dセット上で単一の視覚的メタファーを展開し、短いテキストオーバーレイで補足説明を行い、最後はパレットカラーのブロックが反転して見出しと行動喚起を綴る2Dグリッドエンディングで締めくくります。特筆すべきは、すべての工程(セット構築、アニメーション、コンポジット)がコードで記述されており、GUI操作が一切不要な点です。2パスレンダリング(プレート+レイヤー)により、CPUレンダリングでもフォトリアルな草と動くオブジェクトを効率的に処理可能で、レンダリングの中断再開やループアニメーションによるコスト削減も実現します。このパイプラインはClaude CodeやClineなどのAIエージェントとの相性が良く、人間の監督による承認プロセス(ブリーフ、メタファー、ビートシートの順)と組み合わせることで、短時間で高品質な製品ビデオをプロトタイプから最終版まで作り上げることができます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ameliawampler/blender-product-video/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Blender 製品ビデオ は何をしますか?

無音でも伝わる、45〜75秒の製品フィルムを作成する手法と実用的な例です。 フォトリアルなセット(芝生、木製のゲート、本物の空)が一つの視覚的メタファーを担います。 短いテキストオーバーレイが、絵だけでは伝えきれないことを補います。 フィルムの最後は、カラーブロックの平らなグリッドに変形し、それが反転して見出しと行動喚起を綴ります。

すべてがコードです。セットも、アニメーションも、コンポジットも。GUIで開くものは何もありません。

このフォルダの内容

パス説明
film.jsonパレット、タイミング付きオーバーレイテキスト、エンディングの行。最初に編集します。
scripts/blender/build.pyセット:ヘアパーティクル草の丘、ゲート、曇りガラスのブロック、空、ヘイズ、レンダリング設定。
scripts/blender/mascot.pyキャラクターの例:フェンスポストに座れるほど小さいボクセルフクロウ。
scripts/blender/film.pyショット、カメラ、フレームごとのアニメーション。plates と layers をレンダリングします。
scripts/post/comp.pyコンポジッター:プレート+レイヤー、2Dカメラ移動、テキスト、グレーディング、2Dブロックエンディング、ffmpegエンコード。
assets/2つの空プレート(ゴールデン、曇り)。ご自身のものに置き換えてください。
examples/このパイプラインで作成されたフィルムのフレーム。

サンプルフィルムは「The Gate」です:同一のブロックが開いたゲートを通って一定のペースで転がり、その後あらゆるサイズで到着し、群れを成します。ゲートが閉まり、その後ブロックは通過、カウント、または停止されます。構造のリファレンスとして扱い、メタファーを製品に合ったものに置き換えてください。

ワークフロー

以下の順序で行ってください。各番号のステップで承認を得てから、次のステップでレンダリング時間を費やしてください。

  1. ブリーフ. それぞれ一文で:誰のためか、問題は何か、転換点、約束、行動喚起。尺(45〜75秒)、アスペクト比、再生場所を決定します。ミュート再生を前提とします。
  2. メタファー. 問題に対する物理的なイメージを一つ、製品に対するそのイメージの変化を一つ選びます。一つの場所、一つのメインプロップ、一種類の動くオブジェクト。説明が必要なら、選び直します。
  3. ビートシート. 6〜8ショット。それぞれ:持続時間、動くもの、オーバーレイの行(8語未満、一つのアイデア)、カメラ位置とレンズ。問題の幕は涼しい曇りの光で、製品の幕は暖かい光で。表にして承認を得ます。
  4. **キャラクター(オプション). ** 小さな主人公は視線の置き場を提供します。モデリング前に、フラットなスケッチで3〜4のオプションを提示します。セットに対するサイズを決めます:メインプロップに収まるようにします。単純なプリミティブから構築します(フクロウは1cmの立方体です)。
  5. コードでセットを構築. build.py を適応させます。メインプロップを原点に置き、単位はメートルにします。各ショットのスチルを低サンプルでレンダリングし、アニメーション前にすべてを確認します。
  6. アニメーション. film.py では、各ショットに setup_X(オブジェクトを一度作成)と update_X(t)(すべてをフィルムの秒 t の位置に配置)があります。時間の純粋関数であり、キーフレームはないため、任意のフレームを単独でレンダリングでき、クラッシュしたレンダリングは中断したところから再開できます。
  7. 2パスレンダリング. python scripts/blender/film.py plates を実行し、次に ... layers を実行します。以下を参照。
  8. コンポジット. python scripts/post/comp.py out.mp4 --draft で高速チェック(6フレームごと)、その後 --draft なしで実行。エンディング調整中は --only-ending を使用します。
  9. 視聴. 各オーバーレイの中間点でスチルを取得し、確認します:テキストは読めるか、テキストが示すものがフレーム内に見えるか、ショット間で不自然な飛びがないか。修正し、影響を受けるショットのみ再レンダリングします(layers/ 内のそのファイルを削除します)。

2パスレンダリング

フォトリアルな草は遅いです。動くオブジェクトは安価です。そのため、これらは分離してレンダリングされます。

  • プレート. 各ショットの完全なセット(草、プロップ、空)のスチル一枚。例では1280x720、36サンプルです。光が変化するショットには2枚のプレートがあり、コンポジッターがクロスフェードします。
  • レイヤー. 動くもののみ。透明な背景で、低解像度・低サンプルです。地面はシャドウキャッチャーなので、オブジェクトは影を落とします。静的プロップはホールドアウトなので、オブジェクトはその背後を正しく通過します。空はライティングのために残りますが、カメラからは隠れます。
  • コンポジッター. レイヤーをプレートの上に重ね、ショットごとにスローな2Dプッシュまたはドリフトでカメラ移動を偽装します。固定された3Dカメラがプレートを再利用可能にしているのです。

3つの要素がコストを抑えます:

  • ループ. ショットが安定した流れの場合、動きを周期的にし(0.84m/sで0.84m間隔は毎秒繰り返す)、1周期だけレンダリングします。film.py と comp.py の LOOP がこれらのショットをリストアップします。
  • 2コマ撮影. レイヤーは1フレームおきにレンダリングされ(STEP = 2)、保持されます。ストップモーションのように見え、小さなブロック状のオブジェクトに適しています。
  • 再開. 各フレームは、そのファイルが存在すればスキップされます。

規模の参考:サンプルフィルム(51秒の3Dと12.5秒のエンディング)は、8枚のプレートと456フレームのレイヤーで構成されています。CPUのみでレンダリングされました。

2Dエンディング

comp.py が直接描画します。Blenderは使いません。パレットの色を使った64x36の角丸四角形のグリッドが、最後の3Dフレームの上に6列幅で飛び込み、カメラが64列すべて表示されるまで引き、その後斜めの波で各ブロックが反転(垂直方向に0まで潰れて戻り、中間点で色が変わる)して最終色になります。最終色は3x5ピクセルのフォントから取得されるため、ブロックがテキストになります。

コピーを計画する際の制限:最大4行、各行12文字(11文字の方が見栄えが良い)、大文字、数字、および . - / !。これらを film.json の ending に、グリッド行とパレットキーとともに設定します。

film.json の編集

  • palette: 7つの16進数カラー。primary、accent、warm、soft、deep、paper(エンディングの背景とデフォルトブロック)、alarm(「何かがおかしい」色)。
  • overlays: [開始, 終了, "テキスト", x](フィルム秒単位)。x はオプションで、被写体が中央揃えのテキストで隠れる位置にある場合の水平位置(0〜1)。複数行には \n を使用します。
  • ending: ブロックが綴る行。
  • font: オーバーレイ用の .ttf または .otf へのパス。Inter、DejaVu、Helvetica、Arialがない場合にフォールバックします。

ショットの持続時間は film.py と comp.py の両方の先頭にある SHOTS にあります。同じ値にしてください。

セットアップ

python -m venv venv && . venv/bin/activate
pip install bpy==5.3.0 numpy pillow     # bpyはBlender wheel。一致するPythonが必要です
# ffmpegがPATHに含まれている必要があります

TEST=1 python scripts/blender/film.py plates    # 480x270、各ショット1フレーム、数分
TEST=1 python scripts/blender/film.py layers
python scripts/post/comp.py draft.mp4 --draft

FILM_OUT=/some/dir で plates/ と layers/ をこのフォルダではなくそこに書き出します。FILM_CONFIG で異なる film.json を指定します。GRASS_NEAR と GRASS_MID(パーセント)で草を間引きます。 desktop版Blenderをwheelの代わりに使用する場合:blender -b -P scripts/blender/film.py -- plates。

時間を大きくロスする落とし穴

  • 草の長さ. ヘアパーティクルシステムの normal_factor を設定すると hair_length がリセットされます。hair_length は最後に設定するか、すべての毛が数メートルになってフィールドがモーションブラーで見えなくなります。
  • ペアレンティング. ペアレンティングは matrix_parent_inverse を設定しない限り子を移動させます。ヒンジ付きのパーツがプロップから飛び出します。
  • 空. UVシリンダー上の空画像は歪みます。大きなシリンダーにはミラーパネルを使用するか、カメラがパンしない場合は平面を使用します。実際の光には物理的な太陽を維持します。
  • 被写体の上のテキスト. 各オーバーレイをその下のフレームと照合します。カメラを動かす前に x でテキストを移動します。
  • ズームインで見えなくなるもの. オーバーレイが何かを指定している場合(「Blocked.」など)、2Dクロップにそれがまだ含まれていることを確認します。
  • 色のウォッシュアウト. AgX下の塗装面は、ブランドの16進数カラーよりも暗いベース色が必要です。スクリーンや正確な色として読ませる必要があるものは、エミッションにします。
  • GPUなし. フレーム単位で予算化します:1レイヤーフレームの時間を計測し、乗算してから、解像度、サンプル数、またはショットの長さを収まるまで削減します。時間を計っていないレンダリングは開始しないでください。
  • コンテナの再起動. 長時間のレンダリングは中断されます。ファイル存在チェックによるスキップがあなたを救います。

このパイプラインがやらないこと

これらを期待する前に、関係者に正直に伝えてください。

  • 動く3Dカメラ。ショットは固定され、その上に2D移動があります。本当のパララックスは毎フレームセットをレンダリングする必要があり、GPUが必要です。
  • モーションブラーとレイヤー上の24fpsモーション。ハードウェアが許せば、サンプル数を上げ、STEP = 1 に設定し、render.use_motion_blur をオンにします。
  • オブジェクトは草の上に置かれ、草の中には入りません。なぜなら草はプレート内にあるからです。
  • 音声。このフィルムは無音で機能するように作られています。必要に応じて後で音楽や効果音を追加してください。
  • 3Dワールド内のスクリーン、UI、ロゴ。意図的に除外しています:フォトリアルなフィールドに製品UIを置くと偽物に見えます。製品のビジュアルは2Dエンディングか別のカットに入れてください。

ファイナル品質パス用

両パスとも1920x1080以上、128サンプル以上でデノイズあり、GPUレンダリング(OptiXまたはMetal)、STEP = 1、モーションブラーオン、comp.py の W, H を一致するように上げます。フレーム番号でマシン間でフレームを分割します。すべてのフレームは独立しています。

関連スキル