
概要 📖 – DAT のテーブルデータから手続き的に SOP ジオメトリを構築
DAT to SOPは、DAT に格納された構造化テーブルデータ (P / Cd / N / uv 等の標準アトリビュート + 任意の非標準カラム) を point / vertex / primitive / detail のアトリビュートとして解釈し、Build モードに従って SOP ジオメトリを構築する SOPです。Houdini 互換の attribute_name(attribute_index) 形式で多次元アトリビュートを記述でき、Connect All Points / Mesh with N Rows / Particle System など 8 種類の Build モードで点群からライン・メッシュ・パーティクルまで自在に組み立てられます。
主な用途 🎯
- Table DAT / Script DAT のテーブルデータから SOP ジオメトリを手続き的に生成で、CSV インポートや Python で動的生成した点群・接続情報を直接ジオメトリ化
- Points / Vertices / Primitives / Detail の 4 階層 DAT 入力経路で、Houdini 互換のジオメトリ階層 (point / vertex / primitive / detail) ごとにアトリビュートを供給
- 標準アトリビュートの命名規約による多次元データ記述で、
P(0) P(1) P(2)(位置) やCd(0) Cd(1) Cd(2) Cd(3)(色) などattribute_name(index)形式で各成分を列挙 - Add Float / Int / String Attributes による非標準アトリビュート追加で、DAT のカラム名を指定するだけで任意のカスタムアトリビュートを SOP に転送
- Build モードによる 8 種類のジオメトリ構築方式で、Connect All Points / Connect Every N Points / Mesh with N Rows・Columns / Particle System の中から構築方式を選択
- 入力 SOP との Merge 動作 (Points / Primitives / Detail)で、既存 SOP ジオメトリに対して DAT 由来のデータを階層単位で合成
データフロー 🔄
入力: Points / Vertices / Primitives / Detail を含む構造化 DAT (オプションで Merge 対象の SOP 入力)
↓
カラム名を標準アトリビュート (P / Pw / Cd / N / uv 等) と Add Attributes で指定した非標準アトリビュートに解釈
↓
Build モードに従い point を line / mesh / particle 等として組立 (Connectivity と Particle Type で詳細制御)
↓
出力: SOP ジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
入力 DAT の指定 📥
Points DAT .pointsdat 📍
– ポイントデータを格納する DAT のパス
– 各行が 1 ポイントに対応し、カラム名で P(0) P(1) P(2) Pw (位置・重み) や Cd(0..3) (色) / N(0..2) (法線) / uv(0..2) (UV) 等の標準アトリビュートを記述
– index カラムを置けばポイント番号を明示指定でき、無ければ行番号がポイント番号になる
– カラム名ヘッダがない場合は index カラムを削除した上で、最初の 14 カラムを P(0) P(1) P(2) Pw Cd(0) Cd(1) Cd(2) Cd(3) N(0) N(1) N(2) uv(0) uv(1) uv(2) の順に並べる規約
– 詳細なアトリビュート一覧は Point Attributes を参照
Vertices DAT .verticesdat 🔗
– 頂点 (vertex) データを格納する DAT のパス
– index がプリミティブ番号、vindex がそのプリミティブ内の頂点番号を示す
– アトリビュート命名は Points DAT と同じ規約 (例: Cd(0..3) / uv(0..2) / N(0..2))
– 詳細は Vertex Attributes を参照
Primitives DAT .primsdat 🔷
– プリミティブデータを格納する DAT のパス
– vertices カラムにそのプリミティブを構成するポイント番号を順番に列挙し、close カラム (0 / 1) で開曲線か閉曲線かを指定
– index でプリミティブ番号を明示指定可、無ければ行番号で自動採番
– 詳細は Primitive Attributes を参照
Detail DAT .detaildat 🗂️
– ディテール (geometry 全体に 1 個だけ持つ) アトリビュートを格納する DAT のパス
– 1 行目にアトリビュート名、2 行目に値を 1 行だけ書く構造
– キャプチャ用 pCaptPath / pCaptData(0..) のようにグローバルなメタ情報を 1 ジオメトリにつき 1 個だけ持たせるときに使用
Merge モード切替 🔀
Points / Primitives / Detail のどのデータレイヤーで入力 SOP とマージするかを切替。SOP 入力が接続されているときのみ有効。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Points | .points |
入力 SOP のポイント列に Points DAT のポイントを追加する形でマージ |
| Primitives | .primitives |
入力 SOP のプリミティブ列に Primitives DAT のプリミティブを追加する形でマージ |
| Detail | .detail |
入力 SOP のディテールアトリビュートに Detail DAT のディテール値を上書き合成 |
※ 注意: Merge パラメータは SOP 入力が接続されているときのみ有効です。入力なしで使う場合 (純粋に DAT からジオメトリを構築する場合) はこのパラメータの値は無視されます。
追加アトリビュートの指定 🏷️
Add Float Attributes .float 🔢
– Points DAT / Primitives DAT 等に書かれた非標準カラムを float 型のアトリビュートとして SOP に転送するための名前リスト
– 標準アトリビュート (P / Pw / Cd / N / uv) は自動で float として認識されるため、ここに書く必要なし
– 例: カスタムな energy や weight2 など独自カラムをジオメトリに乗せたいとき
Add Int Attributes .int 🔢
– 非標準カラムを int 型のアトリビュートとして転送するための名前リスト
– 同じ名前を Add Float Attributes に既に指定している場合は int 側では追加されない (Float が優先)
– クラスタ ID やインデックス系の整数値に向く
Add String Attributes .string 🔤
– 非標準カラムを string 型のアトリビュートとして転送するための名前リスト
– 同じ名前が Float / Int に既にある場合は string 側では追加されない
– ラベル文字列や category 名等の文字列メタ情報を point / prim に持たせたいときに使用
Build モード (ジオメトリ構築方式) 🏗️
Points DAT のポイント列をどのようなプリミティブに組立てるかを指定。Vertices / Primitives DAT が明示指定されていない場合の自動構築ルール。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Connect All Points | .all |
全ポイントを 1 本のポリライン (またはポリゴン) として連結 |
| Connect Every 2 Points | .pts2 |
2 ポイントずつ独立した線分として組み立て (P0-P1, P2-P3, …) |
| Connect Every 3 Points | .pts3 |
3 ポイントずつ独立した三角形 (またはポリライン) として組み立て |
| Connect Every 4 Points | .pts4 |
4 ポイントずつ独立した四角形 (またはポリライン) として組み立て |
| Connect Every N Points | .ptsn |
下記の N パラメータで指定した数のポイントごとに独立プリミティブを構築 |
| Mesh with N Rows | .meshrow |
ポイント列を N 行のメッシュとして組立 (列数はポイント総数から自動算出) |
| Mesh with N Columns | .meshcol |
ポイント列を N 列のメッシュとして組立 (行数はポイント総数から自動算出) |
| Particle System using All Points | .particleall |
全ポイントをパーティクルシステムとして登録 (Particle Type で描画形式を選択) |
Build 補助パラメータ 🔧
N .n 🔢
– Build モードで使われるポイント数 / 行数 / 列数のパラメータ
– Connect Every N Points なら N ポイントごとに 1 プリミティブ、Mesh with N Rows なら N 行のメッシュ、Mesh with N Columns なら N 列のメッシュ
– その他の Build モードでは無視される
Closed U .closed 🔁
– U 方向 (ポリラインの主軸方向) の曲線を 閉じるかどうかのスイッチ
– Mesh モードでは横方向 (列方向) のラップ、Connect 系では最終点と先頭点を結ぶかの指定として動作
Closed V .closedv 🔁
– V 方向 (Mesh の縦方向) の曲線を 閉じるかどうかのスイッチ
– Mesh モード使用時のみ意味を持ち、Connect 系では基本的に無視される
Connectivity (ポリゴン接続性) 🕸️
Mesh 系 Build モードでメッシュをどのようなポリゴン群として組立てるかを指定。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rows | .rows |
横方向のライン (行方向) のみを生成 |
| Columns | .cols |
縦方向のライン (列方向) のみを生成 |
| Rows and Columns | .rowcol |
行・列の両方をライン生成 (ワイヤフレーム表示では四角形に見えるがポリゴンは開いている) |
| Triangles | .triangles |
三角形ポリゴンでメッシュを構築 |
| Quadrilaterals | .quads |
四角形ポリゴンでメッシュを構築 (デフォルト) |
| Alternating Triangles | .alttriangles |
向きが交互に対向する三角形でメッシュを構築 (Triangles と類似だが対角方向が反転) |
Particle Type (パーティクル描画形式) ✨
Build が Particle System using All Points のときに、パーティクルをどの描画形式で出力するかを指定。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Render as Lines | .lines |
各パーティクルを線分として描画 |
| Render as Point Sprites | .pointprites |
各パーティクルを Point Sprite (画面に正対する点) として描画 |
実践アイデア 💡
Example 1: CSV 形式の点群データから SOP ジオメトリを生成 📋
Table DAT (CSV 読込: index P(0) P(1) P(2) Cd(0) Cd(1) Cd(2)) → DAT to SOP (Points DAT 指定, Build=Connect All Points) → Out SOP
CSV ファイルや外部スクリプトで生成した点群データを Table DAT にロードし、DAT to SOP でそのまま SOP ジオメトリ化する基本フローです。カラム名を P(0) P(1) P(2) や Cd(0) Cd(1) Cd(2) 規約に揃えるだけで位置・色アトリビュートが自動認識されます。
- Table DAT を作成し、1 行目に
index P(0) P(1) P(2) Cd(0) Cd(1) Cd(2)のカラムヘッダを記述 - 2 行目以降に各ポイントの座標と色を記述 (CSV ファイル読込でも可)
- DAT to SOP を配置し、
Points DATパラメータに Table DAT のパスを指定 BuildをConnect All Pointsに設定 (ポイントだけ可視化したい場合はParticle System using All Points+Particle Type = Render as Point Spritesでも可)- Geometry Viewer で点群が表示されることを確認
Example 2: Script DAT で動的に頂点と接続を構築してメッシュ生成 🐍
Script DAT (Python で Points / Vertices テーブルを生成) → DAT to SOP (Points DAT + Vertices DAT + Primitives DAT 指定) → Convert SOP (任意の追加変換)
Script DAT に Python を書いて Points / Vertices / Primitives の 3 テーブルを動的に生成し、DAT to SOP でそれらを 1 つの SOP に組み立てるユースケースです。Houdini の Wrangle のようにコードから幾何を生成したいときに有効で、フレームごとに再評価すればアニメーションするジオメトリも作れます。
- Script DAT に Python コードを書き、
P(0) P(1) P(2)カラムを持つポイントテーブルをop('points_out')に出力 - 別の Script DAT (または同一 DAT の追加出力) で
index vertices close形式のプリミティブテーブルを構築 - DAT to SOP の
Points DAT/Primitives DATパラメータに各 DAT のパスを指定 BuildはConnect All Points等の自動構築に頼らず、Primitives DAT 側でverticesを明示指定して厳密に組立- 後段に Convert SOP / Transform SOP を繋いで必要に応じ変換・配置
Example 3: ライセンス間で形状を入出力 🔄
SOP to DAT (既存 SOP を DAT にダンプ) → File Out DAT (CSV 出力) → 別環境で Table DAT (CSV 読込) → DAT to SOP (Points + Primitives DAT 指定で復元)
既存の SOP ジオメトリを SOP to DAT でテーブル化してファイル保存し、別のプロジェクトや別環境で DAT to SOP で復元するワークフローです。ポイント・プリミティブ・ディテールのアトリビュートを保ったままジオメトリを移送できるため、軽量フォーマットでのアセットエクスポートに向きます。
- ソース側で SOP to DAT を 3 個配置 (Points / Vertices / Primitives 各々を Table 化)
- それぞれを File Out DAT で CSV ファイルとして書き出し
- ターゲット側で File In DAT (または Table DAT) で 3 つの CSV を読込
- DAT to SOP を配置し、
Points DAT/Vertices DAT/Primitives DATに各 DAT のパスを指定 Add Float Attributes/Add Int Attributesに元の非標準アトリビュートを列挙して完全復元- Geometry Viewer で元の SOP と同じ形状になっていることを確認
関連オペレータ 🔗
類似機能OP 🔍
- CHOP to SOP — CHOP のチャンネルデータ (時系列の数値列) から SOP ジオメトリを構築 (DAT to SOP は表データ、CHOP to SOP はチャンネルが入力)
- Add SOP — ポイントやプリミティブを 1 つずつ手動指定で追加する低レベルなジオメトリ構築 (DAT to SOP は表を一括変換、Add SOP は個別入力)
- Script SOP — Python で完全に手続き的にジオメトリを生成 (DAT to SOP より柔軟だが DAT 経由のシンプルな表変換は不向き)
組み合わせ推奨OP 🔄
- Convert DAT — JSON / XML / Free format などを Table 形式に変換して DAT to SOP に渡す前処理
- Table DAT — 手入力・CSV 読込・スクリプト出力先として、DAT to SOP の入力経路を作る基本ノード
- Script DAT — Python で動的に Points / Vertices / Primitives テーブルを生成して DAT to SOP に流す
- SOP to DAT — 既存 SOP を DAT にダンプして DAT to SOP で再構築する往復ワークフロー (アセット書出 / 読込) の対になるノード
- Attribute Create SOP — DAT to SOP 出力後に追加でアトリビュートを付与・上書き
- Convert SOP — DAT to SOP で構築したジオメトリを polygon / NURBS / mesh などの別タイプに変換
前処理・後処理SOP 🎯
- 前処理: Merge SOP、Transform SOP
- 後処理: Convert SOP、Transform SOP、Attribute Create SOP、Material SOP、Out SOP
Info CHOP情報 📊
DAT to SOP は Info CHOP による詳細情報取得に対応しています。
ジオメトリ統計 📐
num_points: この SOP に含まれるポイント数num_prims: この SOP に含まれるプリミティブ数num_particles: この SOP に含まれるパーティクル数
GPU 転送タイミング 🎮
last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)
汎用オペレータ情報 🔄
total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数cook_time: 直近のクック所要時間 (ミリ秒)cook_frame: このオペレータが最後にクックされたフレーム番号warnings: このオペレータの警告数errors: このオペレータのエラー数
クック統計 ⏱️
total_cooks:total_cooks— プロセス開始以降にこのオペレータがクックされた合計回数cook_time:cook_time— 直近のクック所要時間 (ミリ秒)。巨大な DAT を毎フレーム評価すると大きくなるcook_frame:cook_frame— このオペレータが最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: DAT を繋いだのに DAT to SOP の出力が空になる
✅ Solution:
Points DATパラメータに DAT のパスが正しく入っているか確認 (相対パスで誤っているケースが多い)- Points DAT の 1 行目がカラムヘッダになっているか、または ヘッダ無しの場合は最初の 14 カラムが
P(0) P(1) P(2) Pw Cd(0) Cd(1) Cd(2) Cd(3) N(0) N(1) N(2) uv(0) uv(1) uv(2)の順になっているか確認 - Build モードが入力データと整合しているか確認 (例: ポイントが 5 個しかないのに
Mesh with N RowsN=10 を指定していると正しく組まれない)
❌ Problem: 追加した非標準アトリビュートが SOP に乗らない
✅ Solution:
Add Float Attributes/Add Int Attributes/Add String Attributesのいずれかにそのカラム名を必ず明示記入する (DAT に書いてあるだけでは転送されない)- 同名カラムを Float / Int / String の複数に指定すると Float が優先され、Int / String 側は追加されない仕様を確認
- 後段に Attribute SOP を繋ぎ、アトリビュート一覧で実際に転送できたか確認
❌ Problem: Mesh が想定通りの形にならない
✅ Solution:
BuildをMesh with N Rows/Mesh with N Columnsにした場合、Nがポイント総数を割り切る値になっているか確認 (端数が出ると最終行・列が不完全になる)Connectivityを用途に合わせて切替 (ワイヤフレームだけほしいならRows and Columns、面が必要ならQuadrilateralsやTriangles)Closed U/Closed Vで意図せずメッシュをラップさせていないか確認 (円筒・トーラス用途以外は基本オフ)
❌ Problem: Merge パラメータが効かない / 無視される
✅ Solution:
- Merge パラメータは DAT to SOP に SOP 入力が接続されているときのみ有効。純粋に DAT からジオメトリを構築するモードでは無視される
- 意図したマージレイヤー (Points / Primitives / Detail) と DAT 側のデータ種別が一致しているか確認 (Points DAT 経由なのに Merge=Primitives になっている等)
- Detail マージを使う場合は Detail DAT 側が 1 行ヘッダ + 1 行データの 2 行構造になっているか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – DAT to SOP
- TouchDesigner公式ドキュメント – Point Attributes
- TouchDesigner公式ドキュメント – CHOP to SOP

