ComfyUIでパーティクルモーフィングアニメーション
パーティクル部分をマスクにして元動画にエフェクトを上書きするような効果があります。
以下は今回使うカスタムノードです。
投稿日(2024/08/18)
結果的に以下の環境で1つの動画を1分ほどで生成できました。
使用したVRAMは12GB程です。
筆者環境:
Windows11
RTX4070ti 16GB
普段使っているcu121ではうまくいかず以下のcu124の最新版を使いました。
ComfyUI_windows_portable_nvidia_cu124_or_cpu.7z
サンプルアニメの生成
リポジトリのサンプルアニメの生成にはearth_example.jsonを使います。
ERF.mp4をソース画像にして、psychadelic fire.webp、water.jpgの画像でエフェクトをつけるようになっています。
次の画像は生成後の全体像です。
緑エリアに入力する動画や画像、赤エリアにcheckpointなどのモデル。
青エリアは最終的な出力です。
以下がサンプルで使われているモデル関係です。
checkpoint
lora
ディゾルブエフェクトをかけたような効果
animate lora
controlnet
depthモデルを使います。
サンプルワークフローのコントロールネットモデルローダーだとエラーが出たので、ComfyUI-Advanced-ControlNet
のほうを使いました。
実行すると次のようなものができます。
画面上部のGravity Wellというエリアがありますが、こちらはまた動作の違うパーティクルが生成されます。
サンプルにあるpexels_polina809.mp4というダンスしている動画を使ってみました。
これはかなり面白いエフェクトです。
パーティクルの扱いについて以下で簡単に説明します。
パーティクルマスクの作成
mask_examples.jsonを読み込みます。
パーティクルマスクの作成サンプルが複数入っています。
実行画面をスクショしましたがワークフローが大きすぎるので以下、分割してます。
4つの区画があるのでノードのバイパスをオフにして順番に試してください。
パーティクルエフェクト
文字列のパーティクルエフェクト
オプティカルフロー
輪郭抽出された光の軌跡のようなマスクがつくれる。
テンポラルマスク
入力したマスクに動作やエフェクトをつけられる。
量が多いのでわかりにくいのですが、以下のように赤いエリアに3か所にサンプル動画をいれて、バイパスをといて実行するだけです。
元動画 pexels_polina809.mp4
マスク動画 pexels_polina809_mask.mp4
パーティクル生成の設定の詳細は本家のreadmeで、パラメータの説明がされています。
次の画像のエリアがもっともシンプルに理解できる場所です。最低限の4つのノードがあります。
次の画像のノードは、Particle Emitterでここをいじって基本的な射出動作を作れます。
emitter_xとemitter_yで出現位置。(0.5で中央から出現します。)
particle_directionで射出する角度
particle_spreadで広がり
partilcle_sizeやpartilcle_speedなどで大きさや速さを変えます。
emission_rateで生成量となり、ここが多くすると新しいパーティクルが早く生成されます。Particle Emission Maskノードに、particle_countというパラメータがあるがここで最大数を決めるようだ。
emission_rateが高く、particle_countが低いと、途中で射出が止まってしまいます。
次の部分も一見複雑そうですが、Particle Emitterを複数連結しているだけです。
以下は文字列の生成ですが、緑エリアで文字列を決めて、赤エリアで拡縮、モーフィング、揺らぎのモーションエフェクトをつけています。青エリアが出力です。
量が多いですが、これらの基本的なノードを組み合わせて作られています。
好きなマスクをこのワークフローで生成して、earth_example.jsonで最終的にアニメを生成する流れになります。
冒頭のダンス動画にはオプティカルフローのマスクを適応しています。