
概要 📖 – POPを表データに変換
POP to DATは、POPのポイント・プリミティブ・頂点を行とした表形式のDATに変換するオペレータです。ExtractメニューでPoints / Vertices / Primitives / Detailを切り替え、Attributesで出力する属性を選択します。
主な用途 🎯
- POPジオメトリの属性値を表形式で確認・デバッグ
- 点群の位置・色・速度などの属性を CSV 形式でロギング
- グループ単位での属性データ抽出と後段DATへの受け渡し
- Thin Out機能による大規模点群の間引きと軽量表示
- Primitive情報を表形式で取得し外部ツールに連携
データフロー 🔄
入力: POPジオメトリ(GPU上)
↓
GPUからCPUへダウンロード
↓
行列形式のDATとして出力
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
POP to Page 📋
基本設定 🎛️
Active .active ✅Active(有効化)— 有効時はDATが参照先POPの最新ジオメトリを取得し変換します。無効化すると最後に変換した値を保持します。
POP .pop 🎯POP(変換元POP)— データを変換する対象のPOPのパスを指定します。
Download Type .downloadtype ⏬
GPUからCPUへのデータダウンロード方式の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Immediate (Slow) | .immediate |
現フレーム内で即座にダウンロード。数ミリ秒の遅延が発生する可能性あり |
| Next frame (Fast) | .nextframe |
次フレームに遅延してダウンロード(デフォルト)。レンダリングを止めず高速 |
※ 注意: POPデータはGPU上にありDATテーブルはCPU上にあるため、GPU→CPU転送による遅延が発生します。デフォルトの
Next frame (Fast)は遅延が最小ですがDATの表示が1タイムスライス遅れます。Immediate (Slow)は現フレーム内で取得しますが数ミリ秒の遅延が発生する可能性があります。
Extract .extract 🔍
POPのどの粒度のデータをDAT行に展開するかを指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Points | .points |
ポイントデータを1行ずつDAT行として出力 |
| Vertices | .vertices |
頂点データを1行ずつDAT行として出力 |
| Primitives | .primitives |
プリミティブデータを1行ずつDAT行として出力 |
| Detail | .detail |
POP全体のディテール属性を1行として出力 |
属性・形式設定 📊
Attributes .attrib 🏷️Attributes(出力属性指定)— 変換する属性を選択します。空欄時は全属性が出力されます。属性名をスペース区切りで列挙して特定属性のみに絞り込めます。
Primitive Type .primitivetype 🔷Primitive Type(プリミティブ種別列)— 有効時、プリミティブの種別(point / line / linestrip / triangle / quad)を表す列を追加します。
Transpose .transpose 🔄Transpose(行列入れ替え)— 有効時、テーブルの行と列を入れ替えます。属性名が最初の列に並び、見やすさが向上する場合があります。
間引き機能 🧹
表示行数を制限してデータを間引く機能。元のPOPデータは変更されません。
Thin Out Range .thinoutrange ✅Thin Out Range(インデックス範囲フィルタ有効化)— 有効時、インデックス範囲によるフィルタリングが行われます。
Thin Range Start .thinrangestart ▶️Thin Range Start(範囲開始インデックス)— 範囲フィルタの開始インデックスを指定します。
Thin Range Length .thinrangelength 📏Thin Range Length(範囲長さ)— インデックス範囲でフィルタする要素数を指定します。
Thin Step .thinstep 🪜Thin Step(N個ごとフィルタ)— N個ごとに1要素を残してフィルタします。
Thin Random .thinrandom 🎲Thin Random(ランダム間引き割合)— ランダムにフィルタする要素の割合を指定します。
Thin Random Seed .thinrandomseed 🌱Thin Random Seed(ランダムシード)— ランダム間引きのシード値を指定します。
グループ設定 📦
Group .group 🏷️Group(対象グループ名)— 入力グループが存在する場合、指定したグループ名の要素のみを変換対象とします。
Invert Group .invertgroup 🔁Invert Group(グループ反転)— 有効時、Groupで指定したグループに含まれない要素のみを変換対象とします。
Group Columns .grpcol 🗂️
要素のグループ名を出力に含めるかの選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
グループ名の列を追加しない(デフォルト) |
| Group Names in one Column | .onecolumn |
全グループ名を1列にまとめて出力 |
| Column per Group | .colpergrp |
グループごとに1列ずつ追加してグループ所属を表示 |
実践アイデア 💡
Example 1: 属性値のリアルタイム確認 🔬
Particle POP → POP to DAT (Extract: Points) → Table COMP
Particle POPで生成された点群の位置・速度・色などの属性をPOP to DATで表形式に変換し、Table COMPでビューポートにリアルタイム表示してパーティクル状態をデバッグするフロー。属性名と値の対応がひと目で分かります。
- Particle POPでパーティクルシステムを生成
- POP to DATを接続しExtractをPointsに設定
- Attributes欄を空欄にして全属性を出力
- Table COMPでDATの内容をリアルタイム表示
Example 2: 点群データのCSVロギング 💾
File In POP → POP to DAT (Extract: Points) → File Out DAT
外部から読み込んだPOPデータの属性をPOP to DATで表形式に変換し、File Out DATでCSVファイルとして保存。外部ツール(Excel / Python等)での分析や記録目的で点群属性を書き出す用途に活用できます。
- File In POPで外部点群データを読込
- POP to DATでPoints抽出モードに設定
- File Out DATを接続しCSV拡張子で保存先を指定
- Activeをトリガに同期書き出しを実行
Example 3: Group単位の属性抽出 🎯
Group POP → POP to DAT (Group: target_group) → Select DAT
Group POPで分類したサブセットの属性のみをPOP to DATで抽出し、Select DATで特定列だけ取り出して後段の処理に渡すフロー。大規模点群のうち特定属性を持つ点だけを分析したい場合に有効です。
- Group POPでグループ名を割当
- POP to DATのGroupパラメータに対象グループ名を入力
- Group Columnsをonecolumnに設定してグループ列を出力
- Select DATで必要な列のみ抽出
関連オペレータ 🔗
類似機能OP 🔍
- POP to CHOP — POP属性をCHOPチャンネルに変換(信号処理向け)
- POP to TOP — POP属性をテクスチャに変換(GPUシェーダ連携向け)
- SOP to DAT — SOPジオメトリを表データに変換(CPU側ジオメトリ用)
- CHOP to DAT — CHOPチャンネルを表データに変換
組み合わせ推奨OP 🔄
- DAT to POP — 表データからPOPジオメトリへ逆変換するペア
- Table DAT — 出力をテンプレ表と結合・編集
- Select DAT — 特定の行・列だけ抽出
- Convert DAT — テーブル形式とテキスト形式を相互変換
- Evaluate DAT — セルごとに式評価を適用
- Info CHOP — 行数・列数・クック情報を取得
前処理・後処理DAT 🎯
Info情報 📊
POP to DATはInfo CHOPによる詳細情報取得に対応しています。
DAT 固有情報 📋
num_rows: DAT の行数num_cols: DAT の列数type: DAT の型 (table / text)is_table: テーブル形式の場合 1、テキスト形式の場合 0
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
DAT共通情報 📋
num_rows: このDATの行数num_cols: このDATの列数
オペレータ共通情報 ⚙️
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック所要時間(ミリ秒)cook_frame: 最後にクックされた相対フレーム番号cooked_this_frame: このフレームでクックされたかのフラグ(0 or 1)warnings: このオペレータの警告数errors: このオペレータのエラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: テーブルが最新の状態に更新されない
✅ Solution:
Activeが有効になっているか確認POPパラメータが対象POPを正しく参照しているか確認- 上流POPがクックされているかInfo CHOPで確認
❌ Problem: DAT表示が1フレーム遅れる
✅ Solution:
Download TypeをImmediate (Slow)に変更- ただし数ミリ秒の現フレーム遅延が発生するため、フレームレート優先なら
Next frame (Fast)を維持 - 用途に応じて精度と速度のトレードオフを検討
❌ Problem: データ量が多すぎて表示が重い
✅ Solution:
Thin Out Rangeを有効化しThin Range Lengthで範囲制限Thin StepでN個ごとに間引きGroupパラメータで対象を特定グループに限定
❌ Problem: 特定の属性だけ取り出したい
✅ Solution:
Attributesパラメータに属性名をスペース区切りで指定- 後段にSelect DATを接続して列フィルタ
Transposeを有効化して属性名を縦軸に整形
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – POP to DAT
- TouchDesigner公式ドキュメント – Category:POPs
- TouchDesigner公式ドキュメント – Info CHOP

