Optical Flow TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Optical Flow TOP の動きベクトル抽出機能を示すサムネイル

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 映像の動きを画素ごとに検出

Optical Flow TOPは、連続する映像フレーム間の画素単位の動き (オプティカルフロー) を計算し、R と G チャンネルに 2D 動きベクトルとして出力する TOPです。入力 TOP の前後フレームを比較し、各画素の x 方向の動きを R チャンネルに、y 方向の動きを G チャンネルに出力します。Cost Output を有効化すれば動きベクトルの不確実度を B チャンネルに出力できます。内部で NVIDIA Optical Flow SDK を利用するため、Turing 世代以降の NVIDIA GPU が必要です。

主な用途 🎯

  • ライブカメラ映像から画素単位の動きを抽出し、リアクティブな映像演出を駆動
  • 動きベクトルを Displace TOP に渡して映像をフレーム間の動きでゆがませる演出
  • ダンサーやパフォーマーの動きに反応するパーティクル・流体エフェクトの入力源
  • 動きの量を TOP to CHOP で数値化し、音量・ライト強度・センサー閾値に流用
  • モーションマスクを生成して「動いた部分だけ」フィルタを通すマット合成

データフロー 🔄

入力: 映像 TOP (Video Device In TOP / Movie File In TOP 等)

直前フレームと現フレームをペアで GPU 解析

出力: 2D 動きベクトル (R = x 方向の動き、G = y 方向の動き、B = 任意で不確実度 cost)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Optical Flow Page 📋

Grid Size .gridsize 🔲

出力解像度を決めるグリッド粒度

項目 内部名 説明
1×1 .grid1x1 最小グリッド (最も低速)。出力解像度は入力解像度と同じ
2×2 .grid2x2 中間グリッド。出力解像度は入力解像度の 1/2
4×4 .grid4x4 最大グリッド (最も高速)。出力解像度は入力解像度の 1/4

※ 注意: Turing 世代の NVIDIA GPU は 4×4 のみサポートします。それ以前の GPU では Optical Flow TOP 自体が動作しません。新しい世代の GPU では 1×1 / 2×2 / 4×4 のいずれも使用可能です。

引用元: 公式 docs

Quality .quality

オプティカルフローモデルの精度を切替

項目 内部名 説明
High .high 高精度モデル。動きベクトルが正確になるが計算負荷は最大
Medium .medium 中精度モデル。精度と速度のバランス
Low .low 低精度モデル。最も高速だが粗い結果

出力制御 🎚️

Cost Output .costoutput 📊
Cost Output (cost 出力) — オンにするとオプティカルフローの「コスト」を B チャンネルに出力します。コストが高いほど R と G チャンネルの動きベクトルの不確実度が高いことを示します。コスト値は 0 から 255 の整数です。

Gain .gain 🔊
Gain (出力ゲイン) — R と G チャンネルの動きベクトルに対する出力後乗算係数。gainx は R チャンネル (x 方向の動き)、gainy は G チャンネル (y 方向の動き) に最後に掛け合わされます。動きベクトルを可視化するときに視認しやすい強度に調整するのに使います。

タイミング制御 ⏱️

Manual Timing .manualtiming 🎛️
Manual Timing (手動タイミング) — Optical Flow TOP はリアルタイムモードと非リアルタイムモードの両方で動作しますが、入力映像のフレームレートがプロジェクトレートと異なる場合、Manual Timing を有効化することで品質が改善することがあります。有効化時は入力映像フレームごとに秒単位のタイムスタンプを下の Timestamp パラメータに供給する必要があります。映像ストリーミング系 TOP は Info CHOP 経由で timestamp チャンネルを取得できます。

Timestamp .timestamp 🕒
Timestamp (タイムスタンプ) — 入力映像フレームの秒単位タイムスタンプ。Manual Timing が有効なときに参照されます。詳細は上の Manual Timing パラメータを参照。


実践アイデア 💡

Example 1: ライブ映像の動き反応 🎥

Video Device In TOP → Optical Flow TOP → Displace TOP → Out TOP

ライブカメラ映像から Optical Flow TOP で画素ごとの動きベクトルを抽出し、Displace TOP の変位マップとして渡して、被写体の動きに反応して映像が歪む演出を作る基本フロー。ダンサーが手を振った方向に背景がゆがむような表現に向きます。

  1. Video Device In TOP でライブカメラ映像を取得
  2. Optical Flow TOP の入力に接続し、Grid Size = 2×2 / Quality = Medium に設定
  3. Gain を 5〜10 程度に上げて動きベクトルを強調
  4. 出力を Displace TOP の Displace Source に接続
  5. Displace TOP のソース入力に歪ませたい背景映像を入力

Example 2: 動き量を数値化して制御 📈

Movie File In TOP → Optical Flow TOP → Analyze TOP → TOP to CHOP → Math CHOP

映像ファイルから抽出した動きベクトルの強度を Analyze TOP で平均値に集約し、TOP to CHOP で CHOP 数値に変換して照明強度や音量パラメータの制御信号として流用する用途。映像が活発に動いているフレームほど照明が強くなる、といった連動が組めます。

  1. Movie File In TOP で解析したい映像を読込み
  2. Optical Flow TOP に渡し、Cost Output をオフ・Quality を High に設定
  3. 後段 Analyze TOP の Function を Average にして全画素の動き量を 1 ピクセルに集約
  4. TOP to CHOP で R / G チャンネルを CHOP 値に変換
  5. Math CHOP で正規化し他パラメータに Export

Example 3: モーションエコーの作成 🌀

Video Device In TOP → Optical Flow TOP → Feedback TOP (loop) → Composite TOP

Optical Flow TOP の出力を Feedback TOP でループバックして時間的に蓄積し、過去の動きが軌跡として残るモーションエコー (動きの残像) を作る応用。Feedback の Black Level を少し上げると古い軌跡が徐々にフェードアウトします。

  1. Optical Flow TOP の出力を Feedback TOP の入力に接続
  2. Feedback TOP の Target TOP を Optical Flow TOP に戻して再帰ループを形成
  3. Feedback TOP の Black Level を 0.02〜0.05 に設定して古い軌跡を時間で減衰
  4. Composite TOP で元映像と Over 合成して軌跡を重ねる

関連オペレータ 🔗

類似機能OP 🔍

  • Difference TOP — フレーム間の単純な画素差分。動きの「量」を取りたいだけならこちらでも代用可能だが、方向ベクトルは得られない

組み合わせ推奨OP 🔄

  • Displace TOP — 動きベクトルを変位マップとして渡し、映像を動きに沿って歪ませる典型的な後段
  • Feedback TOP — 動きベクトルを時間方向に蓄積してモーションエコー / 軌跡可視化を作る
  • Lookup TOP — 動きの強度をカラーランプにマッピングして方向と速度を色で可視化
  • Channel Mix TOP — R と G のベクトル成分を取り出して個別に処理
  • Video Device In TOP — リアルタイム解析の入力源 (ライブカメラ)
  • Movie File In TOP — 事前収録映像の解析用入力源

前処理・後処理TOP 🎯


Info CHOP情報 📊

Optical Flow TOPは Info CHOP による解像度・アスペクト比・GPU メモリ使用量などの詳細情報取得に対応しています。

TOP固有情報 🖼️

  • resx: TOP の出力解像度 X (ピクセル単位)
  • resy: TOP の出力解像度 Y (ピクセル単位)
  • aspectx: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)
  • gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 動きベクトルが出ない / 出力が真っ黒
✅ Solution:

  • Turing 世代以降の NVIDIA GPU が必要です。それ以前の GPU / AMD GPU では動作しません
  • Turing GPU の場合は Grid Size4x4 に固定する必要があります
  • 入力映像が完全に静止しているとフローはゼロになります。テスト時は手をかざすなど動きを与える
  • Gain が 0 になっていないか、可視化用に 5〜10 に上げて確認

❌ Problem: ノイズが多い / 動きベクトルがジッタする
✅ Solution:

  • 前段に Blur TOP を挟んで入力映像のノイズを抑える
  • QualityHigh に上げてモデル精度を向上
  • Grid Size1x1 に下げて空間解像度を上げる
  • 後段に Feedback TOP で時間平均を取って揺れを平滑化

❌ Problem: GPU 負荷が高い / フレームレートが落ちる
✅ Solution:

  • QualityLow または Medium に下げる
  • Grid Size4x4 に上げて出力解像度を下げる
  • 前段 Crop TOP で解析範囲を必要部分だけに絞る
  • Common Page の Output ResolutionHalf 等に下げて後段で拡大

❌ Problem: 映像とフローのタイミングがズレる
✅ Solution:

  • 入力映像のフレームレートがプロジェクトレートと異なる場合は Manual Timing を有効化
  • ストリーミング系 TOP の場合は Info CHOP から timestamp チャンネルを取得し Timestamp パラメータに接続
  • Movie File In TOP 入力なら Manual Timing はオフのままで通常問題は起きない

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました