Optical Flow
入力映像の前フレームとの比較から動きを推定し、流れ場(FlowField)として出力します。ブロック単位で輝度(0.299/0.587/0.114の加重)の時間差と空間勾配を取り、法線フロー -It・∇I / |∇I|²(Lucas-Kanadeの1タップ版)で変位を求め、1/deltaTime を掛けて「UV変位/秒」に直しています。
- Block Size — Small8 / Medium16(初期値)/ Large32 のドロップダウン。ブロックが大きいほど大きな動きを拾い、結果は粗くなります
- Scale — 推定結果に掛ける倍率。0〜8にクランプ、初期値1(
currentScale)
外れ値の抑制として、1フレームあたりの変位は1ブロック2個ぶんが上限にクランプされます。速すぎる動きは頭打ちになります。
接続直後とプロジェクトのロード直後の1フレームは、比較の基準を作るだけで推定を行いません(出力はクリアされます)。
出力解像度は入力の1/8、フォーマットはRGHalfです。場は低周波なので、消費側がbilinearで読む前提で軽く作られています。
推定結果の確認には Field Visualize を、動き量を1つの値にしたいときは Motion Amount を使います。
動画
入力ポート
| Port ID | 型 |
|---|---|
In | RenderTexture |
出力ポート
| Port ID | 型 |
|---|---|
Flow | FlowFieldOutput |
スクリプトから設定可能なメンバー
| パス | 型 |
|---|---|
currentScale | float |
Synapse Apps(スクリプティング)
await synapse.modules.create({ type: "OpticalFlow" }) 