OP Find DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

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

OP Find DAT のノード検索とテーブル一覧化を示す図

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

概要 📖 – 条件でノードを検索一覧化

OP Find DATは、検索条件に一致するオペレータを探し出し、その一覧をテーブルとして出力する DATです。Families ページで検索対象の種類を絞り、Filters ページで名前・型・パス・タグ・パラメータ値などの条件を重ねます。Columns ページで出力したい列 (名前・型・パス・クック時間など) を選び、結果を Select DAT や Python で受け取って一括処理に活用します。

主な用途 🎯

  • 名前・型・パス・タグ等の条件でノードを検索し、ヒットしたオペレータを一覧テーブルとして出力
  • 大規模プロジェクトのノード棚卸しで、特定の型 (例: 全 Movie File In TOP) を横断的にリストアップ
  • パラメータ値での絞り込みで、特定の設定値を持つノードだけを動的に抽出
  • クック時間・メモリ列を出力して、重いノードを発見するパフォーマンス調査
  • 検索結果をループ処理の入力として渡し、ヒットした全ノードへ一括で処理を適用

データフロー 🔄

検索条件 (Families ページ + Filters ページ)

検索開始パス以下のノードを走査

条件に一致したノードを抽出

出力 DAT: ヒットしたノードの一覧テーブル (Columns ページで選んだ列)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Families Page 📁

検索対象ファミリー ✅

検索対象に含めるオペレータの種類を選ぶトグル群。オンにした種類だけが結果に含まれます。

Object COMPs .objects
Object COMPs (3D 空間系コンポーネント) を検索対象に含めます
– 例: Geometry COMP

Panel COMPs .panels
Panel COMPs (UI パネル系コンポーネント) を検索対象に含めます
– 例: Container COMP

Other COMPs .other
Other COMPs (その他の種類のコンポーネント) を検索対象に含めます
– 例: Base COMP

TOPs .tops
TOP ファミリー (画像処理系) のオペレータを検索対象に含めます

CHOPs .chops
CHOP ファミリー (チャンネルデータ系) のオペレータを検索対象に含めます

SOPs .sops
SOP ファミリー (ジオメトリ系) のオペレータを検索対象に含めます

MATs .mats
MAT ファミリー (マテリアル系) のオペレータを検索対象に含めます

DATs .dats
DAT ファミリー (テキスト・テーブル系) のオペレータを検索対象に含めます


Filters Page 🎚️

フィルタの結合方式 .combinefilters 🎚️

複数のフィルタ条件をどう結合して一致判定するかを選ぶメニュー

項目 内部名 説明
All .all すべてのフィルタが一致したノードのみ結果に含める (AND 結合)
Any .any いずれかのフィルタ条件が一致すれば結果に含める (OR 結合)
Custom .custom and / or キーワードでフィルタの部分集合を指定して結合

大文字小文字とカスタム結合 🔠

Case Sensitive .casesensitive 🔠
Case Sensitive (大文字小文字の区別) — 下の全パターンマッチングで大文字小文字を区別します

Custom Combine .customcombine 🧩
Custom Combine (カスタム結合式) — Combine FiltersCustom のとき、どのフィルタをどう組み合わせるかを指定します

名前・型・パスでの絞り込み 🔎

Name .namefilter 🏷️
Name (名前フィルタ) — wave1 / wave2 のようなオペレータ名で絞り込みます

Type .typefilter 🔧
Type (型フィルタ) — waveCHOP / panelexecuteDAT のような型名で絞り込みます (Type 列の表記を参照)

Path .pathfilter 📂
Path (パスフィルタ) — オペレータが存在すべきパスを指定します

Parent Path (relative) .parentfilter 📁
Parent Path (相対親パスフィルタ) — オペレータが存在すべき相対親パスを指定します
– Columns ページの Parent Path 列を有効にすると、その parentPath 列に対するフィルタになります

Exclude Path (relative) .excludefilter 🚫
Exclude Path (除外パスフィルタ) — 検索から除外する相対パスを指定します

Wire Path .wirepathfilter 🔌
Wire Path (ワイヤパスフィルタ) — ワイヤ接続のパスで絞り込みます

ショートカットとタグ 🔖

Parent Shortcut .parentshortcutfilter ⬆️
Parent Shortcut (親ショートカットフィルタ) — 指定した Parent Shortcut を持つオペレータだけに絞り込みます

OP Shortcut .opshortcutfilter 🔗
OP Shortcut (OP ショートカットフィルタ) — 指定した OP Shortcut を持つオペレータだけに絞り込みます

Comment .commentfilter 💬
Comment (コメントフィルタ) — 指定した文字列をコメントに含むオペレータに絞り込みます

Tags .tagsfilter 🏷️
Tags (タグフィルタ) — 指定したタグに一致するオペレータに絞り込みます
– 複数のタグは空白区切りのリストで指定できます

DAT Text .textfilter 📝
DAT Text (DAT テキストフィルタ) — DAT ファミリーのオペレータのうち、内容に指定文字列を含むものだけを対象にします

パラメータ条件での絞り込み ⚙️

Par Name .parnamefilter 🔤
Par Name (パラメータ名フィルタ) — 指定した名前のパラメータを持つオペレータに絞り込みます
– 名前・値・式のすべてが一致したパラメータだけが対象になります

Par Value .parvaluefilter 🔢
Par Value (パラメータ値フィルタ) — 指定した値のパラメータを持つオペレータに絞り込みます
– 名前・値・式のすべてが一致したパラメータだけが対象になります

Par Expression .parexpressionfilter 🧮
Par Expression (パラメータ式フィルタ) — 指定した式文字列を持つパラメータのオペレータに絞り込みます
– 名前・値・式のすべてが一致したパラメータだけが対象になります

Par Non-Default Only .parnondefaultonly ✳️
Par Non-Default Only (非デフォルト値のみ) — デフォルト値ではないパラメータだけを照合対象にします


Columns Page 📊

出力する列の選択 📋

結果テーブルに含める列を選ぶトグル群。必要な情報の列だけをオンにします。

Use Legacy Columns .legacycols 🕰️
Use Legacy Columns (旧列名を使用) — 列ヘッダーを旧来の名前にしたいときのみ使います

ID .idcol 🆔
ID 列 — ノードをそのプロセス内で一意に識別する整数を出力します
– プロセス実行中は同一ですが、再実行すると変わる場合があります

Name .namecol 🏷️
Name 列 — オペレータの名前を結果テーブルに含めます

Type .typecol 🔧
Type 列 — オペレータの型 (例: rampTOP) を結果テーブルに含めます

Path .pathcol 📂
Path 列 — オペレータのパスを結果テーブルに含めます

Relative Path .relpathcol 📁
Relative Path 列 — 検索ルートからの相対パスを結果テーブルに含めます

Depth .depthcol 📏
Depth 列 — ルートパスからの相対的な階層の深さを示す列を含めます

Tags .tagscol 🔖
Tags 列 — オペレータのタグを結果テーブルに含めます

Children .children 👶
Children 列 — オペレータの子ノードを結果テーブルに含めます

パフォーマンス計測の列 ⏱️

クック時間やメモリ使用量を出力する列。重いノードの調査に使います。

Cook Times .cooktimescol ⏲️
Cook Times 列 — 見つかったオペレータのクック時間 (計算所要時間) を含めます

CPU Time .cputime 🧠
CPU Time 列 — オペレータの CPU クック時間を結果テーブルに含めます

GPU Time .gputime 🎮
GPU Time 列 — オペレータの GPU クック時間を結果テーブルに含めます

CPU Memory .cpumem 💾
CPU Memory 列 — オペレータの CPU メモリ使用量を結果テーブルに含めます

GPU Memory .gpumem 🗃️
GPU Memory 列 — オペレータの GPU メモリ使用量を結果テーブルに含めます


Callbacks Page 📞

コールバック DAT と値変換 📞

Callbacks DAT .callbacks 📜
Callbacks DAT (コールバック DAT) — 受け取った各イベントを処理するコールバックを定義した DAT のパスを指定します
– 使い方の詳細は opfindDAT_Class を参照

Convert Bool to Int .convertbool 🔢
Convert Bool to Int (真偽値を整数に変換) — オンのとき真偽値を 1 / 0 で出力します
– オフのときは True / False の文字列で出力されます

Convert None to Empty .convertnone
Convert None to Empty (None を空に変換) — None 値を空文字列に変換して出力します


Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: 型でノードを一覧化 🔎

OP Find DAT (Type=movefilein*) → Select DAT → Table DAT (棚卸し表)

大規模プロジェクトで散在する同じ型のノード (例: 全 Movie File In TOP) を OP Find DAT で横断検索し、名前とパスの一覧表として棚卸しする基本フロー。手作業でネットワークを巡回せずに全ヒットを一覧化できます。

  1. OP Find DAT を配置し、検索開始パスとなる第 1 入力 (または親パス) を接続
  2. Families ページで対象のファミリー (例: TOPs) をオンにする
  3. Filters ページの Type に型名 (例: moviefileinTOP) を入力して絞り込む
  4. Columns ページで Name / Path 列をオンにし、結果を Table DAT に渡して棚卸し表にする

Example 2: 重いノードを発見 ⏱️

OP Find DAT (Cook Times/CPU Time 列) → Sort DAT (降順) → Examine DAT で確認

プロジェクトのフレームレートが落ちる原因を探すため、OP Find DAT のクック時間列を出力して全ノードの計算コストを一覧化し、降順に並べて上位の重いノードを特定する調査フローです。当て推量ではなく数値で犯人を絞り込めます。

  1. OP Find DAT で全ファミリーを検索対象にして広く探索
  2. Columns ページで Cook Times / CPU Time / GPU Time 列をオンにする
  3. 結果を Sort DAT でクック時間の降順に並べ替える
  4. 上位のノードを Examine DAT や手動で確認し、最適化対象を確定する

Example 3: 値で抽出し一括処理 ⚙️

OP Find DAT (Par Name/Par Value) → DAT to CHOP / Python ループ → 一括変更

特定のパラメータが特定の値になっているノードだけを OP Find DAT で抽出し、ヒットした全パスに対して Python ループで一括変更を適用するメンテナンス用途のフローです。設定漏れのあるノードをまとめて修正できます。

  1. OP Find DAT の Filters ページで Par Name / Par Value に探したいパラメータ名と値を入力
  2. 必要に応じて Par Non-Default Only をオンにし、デフォルトから変更済みのノードのみ対象にする
  3. Columns ページで Path 列をオンにし、ヒットした全ノードのパスを取得
  4. 出力テーブルを Python (op('opfind1').rows()) で読み、各パスに対しループで一括処理を実行する

関連オペレータ 🔗

類似機能OP 🔍

  • Parameter DAT — 指定ノードのパラメータ一覧をテーブル化する (検索ではなく既知ノードの内訳)
  • Examine DAT — ノードのメンバーや属性を一覧表示してデバッグ用に確認

組み合わせ推奨OP 🔄

  • Select DAT — 検索結果テーブルから必要な行・列だけを抜き出す定番後段
  • Sort DAT — クック時間や名前で検索結果を並べ替えて上位を把握
  • Table DAT — 検索結果を棚卸し表として固定・編集
  • DAT to CHOP — クック時間など数値列を CHOP に変換してグラフ可視化
  • OP Execute DAT — ヒットしたノードの作成・削除・更新イベントを監視するコールバック

前処理・後処理DAT 🎯


Info DAT情報 📊

OP Find DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

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

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

よくある問題と解決策 🔧

❌ Problem: 検索結果が空、または期待したノードが出てこない
✅ Solution:

  • Families ページで対象のファミリー (TOPs / CHOPs 等) がオンになっているか確認 (オフだとその種類は除外される)
  • Combine FiltersAll (AND) になっていないか確認 (条件が厳しすぎる場合は Any に変更)
  • 検索開始パスが目的のノードを含む階層を指しているか、Path / Exclude Path フィルタを見直す
  • Case Sensitive がオンで名前の大文字小文字が食い違っていないか確認

❌ Problem: 意図しないノードまで大量にヒットする
✅ Solution:

  • Families ページで不要なファミリーのトグルをオフにして検索対象を絞る
  • Combine FiltersAll にして複数条件の AND で絞り込む
  • TypeTags フィルタを追加して条件を具体化する
  • Exclude Path で除外したい階層 (テンプレートや外部 tox 内) を指定する

❌ Problem: クック時間・メモリ列の値が 0 や空になる
✅ Solution:

  • Columns ページで Cook Times / CPU Time / GPU Time 列がオンになっているか確認
  • 計測対象のノードが実際に cook されているか確認 (未 cook のノードは計測値が出ない)
  • GPU 系の列はそのノードが GPU を使う型 (TOP 等) でないと値が出ないことを理解しておく
  • 正確な比較には、結果を Sort DAT で並べ替えてから読む

❌ Problem: コールバック DAT が呼ばれない
✅ Solution:

  • Callbacks DAT パラメータに正しいパスの DAT が指定されているか確認
  • コールバック関数の引数・名前が opfindDAT_Class の仕様どおりか確認
  • Convert Bool to Int / Convert None to Empty の設定で受け取る値の型が変わる点を考慮する
  • Textport / Console でコールバック内のエラーが出ていないか確認

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました