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

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

DAT to SOP の DAT データから SOP ジオメトリを構築する機能を示す図

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

概要 📖 – 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 ジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 からジオメトリを構築する場合) はこのパラメータの値は無視されます。

引用元: 公式 docs

追加アトリビュートの指定 🏷️

Add Float Attributes .float 🔢
– Points DAT / Primitives DAT 等に書かれた非標準カラムを float 型のアトリビュートとして SOP に転送するための名前リスト
– 標準アトリビュート (P / Pw / Cd / N / uv) は自動で float として認識されるため、ここに書く必要なし
– 例: カスタムな energyweight2 など独自カラムをジオメトリに乗せたいとき

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) 規約に揃えるだけで位置・色アトリビュートが自動認識されます。

  1. Table DAT を作成し、1 行目に index P(0) P(1) P(2) Cd(0) Cd(1) Cd(2) のカラムヘッダを記述
  2. 2 行目以降に各ポイントの座標と色を記述 (CSV ファイル読込でも可)
  3. DAT to SOP を配置し、Points DAT パラメータに Table DAT のパスを指定
  4. BuildConnect All Points に設定 (ポイントだけ可視化したい場合は Particle System using All Points + Particle Type = Render as Point Sprites でも可)
  5. 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 のようにコードから幾何を生成したいときに有効で、フレームごとに再評価すればアニメーションするジオメトリも作れます。

  1. Script DAT に Python コードを書き、P(0) P(1) P(2) カラムを持つポイントテーブルを op('points_out') に出力
  2. 別の Script DAT (または同一 DAT の追加出力) で index vertices close 形式のプリミティブテーブルを構築
  3. DAT to SOP の Points DAT / Primitives DAT パラメータに各 DAT のパスを指定
  4. BuildConnect All Points 等の自動構築に頼らず、Primitives DAT 側で vertices を明示指定して厳密に組立
  5. 後段に 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 で復元するワークフローです。ポイント・プリミティブ・ディテールのアトリビュートを保ったままジオメトリを移送できるため、軽量フォーマットでのアセットエクスポートに向きます。

  1. ソース側で SOP to DAT を 3 個配置 (Points / Vertices / Primitives 各々を Table 化)
  2. それぞれを File Out DAT で CSV ファイルとして書き出し
  3. ターゲット側で File In DAT (または Table DAT) で 3 つの CSV を読込
  4. DAT to SOP を配置し、Points DAT / Vertices DAT / Primitives DAT に各 DAT のパスを指定
  5. Add Float Attributes / Add Int Attributes に元の非標準アトリビュートを列挙して完全復元
  6. 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 🎯


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 Rows N=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:

  • BuildMesh with N Rows / Mesh with N Columns にした場合、N がポイント総数を割り切る値になっているか確認 (端数が出ると最終行・列が不完全になる)
  • Connectivity を用途に合わせて切替 (ワイヤフレームだけほしいなら Rows and Columns、面が必要なら QuadrilateralsTriangles)
  • 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 行構造になっているか確認

参考資料 📚

その他 🔗

公式リソース 📖

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