
概要 📖 – Alembicを読み込む
Alembic In POPは、Alembic (.abc) フォーマットのジオメトリ・アニメーションキャッシュを読込み、ポイント・頂点・プリミティブ属性として出力する POPです。Houdini / Maya / Blender 等の外部 DCC ツールから書き出した .abc ファイルを直接取込めるため、複雑なシミュレーションやキャラクターアニメーションを TouchDesigner のリアルタイム描画パイプラインへ持ち込めます。Load Type の Next Frame モードで非同期ロードに切替えればクック負荷を分散でき、Cue / Trim / Extend で部分再生やループ再生も柔軟に制御できます。
主な用途 🎯
- 外部 DCC ツール (Houdini / Maya / Blender) から書き出した Alembic ジオメトリの取込
- キャッシュ済みアニメーションシーケンスの再生 (頂点・トランスフォーム単位)
- 大規模ポイントクラウド・パーティクルキャッシュの GPU 上での再生
- 非同期ロード (Next Frame) によるクック負荷の分散と滑らかな再生
- Cue / Index / Trim を活用したタイムラインスクラブ・部分再生
データフロー 🔄
Alembic (.abc) ファイル
↓
Alembic In POP(ファイル読込 + 再生制御)
↓
出力: ポイント・頂点・プリミティブ属性を持つ POP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Alembic Page 📋
ファイル指定とオブジェクト選択 📂
Alembic File .file 📄
– 読込む Alembic (.abc) ファイルのパス
– 絶対パス・プロジェクト相対パス・tdu.expandFilePath() 風の TouchDesigner パス展開に対応
Object Path .objectpath 🎯
– ファイル内のどのジオメトリオブジェクトを読込むかを指定
– デフォルトは * (All Objects、全オブジェクトを階層ごと取込)
– 個別オブジェクトパス (例: /box_object1/color1) で部分読込も可能
Unload .loadfile 🚪
– オンにするとファイルをアンロード・クローズ (他アプリからの上書き・削除を許可)
– オフに戻すと再ロード。ファイルの差し替えワークフローで使う
Load Type .loadtype ⏱️
ファイルロードのタイミング選択 (同フレーム即時 / 次フレーム非同期)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Immediate (Slow) | .immediate |
現フレームで同期的にファイル全体をロード。クック時間に直接ファイル読込・パース・書出のコストが乗る (動画ではフレーム落ちの原因) |
| Next Frame (Fast) | .nextframe |
現フレームで非同期にロード開始、次フレームで同期完了。2 フレームに分散されるため全体クック時間が大幅に短縮される (推奨) |
※ 注意: Immediate (Slow) は全 I/O が現フレームに集中するため、大規模 Alembic では数百ミリ秒〜数秒のフレーム遅延を起こします。リアルタイム描画では Next Frame (Fast) を推奨します。
Transform .xform 🔄
Alembic ファイル内の変換情報の適用方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
変換を一切適用せず、ジオメトリは原点 (0,0,0) に配置される |
| Static Local Transformation | .staticlocalxform |
Object Path で選択したジオメトリの静的ローカル変換のみ適用 (親階層の変換は無視) |
| Static World Transformation | .staticworldxform |
選択ジオメトリのワールド変換 (親階層含む累積変換) を静的に適用 |
| Dynamic Transformation | .dynamicxform |
Alembic に動的 / アニメーション変換が含まれる場合、ローカルとワールドの両変換を時間軸に沿って適用 (キャラクターアニメ等) |
Interpolation .interp 🎞️
Alembic サンプル間 (キーフレーム間) の補間方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
サンプル間補間なし。最寄りキーフレームの値をそのまま使用 (ステップ補間) |
| Linear Interpolation | .interp |
隣接 2 サンプル間で線形補間。キーフレーム間隔が粗い場合でも滑らかなアニメーションが得られる |
※ 注意: Interpolation は、選択ジオメトリが Alembic ファイル内で dynamic と定義され、かつ変換情報を持つ場合にのみ動作します。静的ジオメトリでは効果がありません。
Play Page ▶️
再生・サンプルレート設定 🎚️
Shift Animation Start .shiftanimationstart ↩️
– オンにすると、Alembic ファイル内のアニメーション開始時刻を 0 にシフトして再生
– ファイル側で開始時刻が中途半端 (例: フレーム 1001 開始) でも TouchDesigner 側の 0 から再生できる
Sample Rate Mode .sampleratemode 📐
– サンプルレート (1 秒あたりのサンプル数) の決定方式
– Custom を選ぶと下の Sample Rate パラメータで任意のレートを指定
– ファイル側のレートを優先したい場合は Custom 以外のモードを選択
Sample Rate .samplerate 🔢
– Sample Rate Mode = Custom 時のサンプルレート (Hz)
– 60 にすれば 60fps 駆動、24 にすれば映画系の 24fps 駆動として再生
Play .play ▶️
– 再生のオン / オフ。オフでアニメーションを停止
– Play Mode = Sequential と組合せて使う
Speed .speed ⚡
– 再生速度の倍率。1.0 が等速、2.0 で 2 倍速、0.5 でスローモーション
– 負値で逆再生も可能
Initialize .initialize 🔄
– アニメーションを初期状態 (開始位置) に戻すパルスパラメータ
– ループ開始時 / 再生リセット時にトリガー
Start .start 🟢
– アニメーションシーケンスの再生開始パルス
– Initialize の直後に発火させると先頭から再生開始できる
Play Mode .playmode 🎮
アニメーション再生の制御方式 (インデックス指定 / シーケンシャル再生)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Specify Index | .specifyindex |
Index パラメータの値で直接アニメーション位置を指定。外部 CHOP / DAT で Index を駆動してスクラブ・同期再生する用途に最適 |
| Sequential | .sequential |
Play / Speed / Start に従って時間経過で進行する標準的な再生モード。Cue / Trim 機能はこのモードでのみ有効 |
Cue とインデックス制御 📍
Cue .cue 📌
– オンにすると Cue Point の位置にジャンプし、そこで停止保持
– Play Mode = Sequential のときのみ有効
Cue Point .cuepoint 🎯
– Cue でジャンプするアニメーション位置
– 単位は右側の Cue Point Unit で Index / Frames / Seconds / Fraction から選択
Index .index 🔢
– Play Mode = Specify Index 時のアニメーション位置
– 単位は右側の Index Unit で Index / Frames / Seconds / Fraction から選択
– 外部 CHOP の値を Index にエクスポートすればタイムラインスクラブが可能
Trim 設定 ✂️
Trim .trim 🔘
– オンにすると Trim Start / Trim End で再生範囲を制限
– アニメーション全長の一部だけをループ・部分再生したい場合に使用
Trim Start .tstart ⏮️
– 再生開始位置 (この時刻が新しい 0 として扱われる)
– 単位は右側の Trim Start Unit で Index / Frames / Seconds / Fraction から選択
Trim End .tend ⏭️
– 再生終了位置
– 単位は右側の Trim End Unit で Index / Frames / Seconds / Fraction から選択
Extend Left .textendleft ◀️
Trim Start より前の時刻に対するアニメーションの拡張方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
Trim Start の値を保持し続ける (静止) |
| Cycle | .cycle |
Trim 範囲を周期的にループ。境界で Trim End から Trim Start へジャンプ |
| Mirror | .mirror |
Trim 範囲を反転再生してミラーリング。境界で正再生 / 逆再生が交互に切替わる |
Extend Right .textendright ▶️
Trim End より後の時刻に対するアニメーションの拡張方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
Trim End の値を保持し続ける (静止) |
| Cycle | .cycle |
Trim 範囲を周期的にループ。境界で Trim Start から Trim End へジャンプ |
| Mirror | .mirror |
Trim 範囲を反転再生してミラーリング。境界で正再生 / 逆再生が交互に切替わる |
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
- 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用
Free Extra GPU Memory .freeextragpumem 🧠
蓄積した GPU メモリの解放:
- Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
- 用途: 大規模パーティクル系で出力サイズが大きく変動した後、未使用メモリを返却して VRAM を節約
Delete Input Attributes .delinputattrs 🗑️
出力属性の絞り込みパターン:
- Delete Input Attributes パターン: 出力に残したい属性名のパターン (例:
P N Cd) を指定。指定外の属性は破棄される - 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約
実践アイデア 💡
Example 1: Houdini で書き出した静的ジオメトリのインポート 🏗️
Alembic In POP (.abc ファイル, Transform=Static World) → Render TOP / Geometry COMP
Houdini でモデリング・シミュレーションした結果を .abc エクスポートし、TouchDesigner 側で取込んで描画する典型例。Transform を Static World Transformation に設定するとファイル内の階層情報を保ったまま正しい位置に配置できる。Object Path = * で全オブジェクトを一括取込み、Render TOP でマテリアル付きでレンダリングする。
- Houdini 側で ROP Alembic Output で .abc を書き出し
- Alembic In POP の
Alembic Fileに .abc のパスを指定 Object Path=*(All Objects) で全階層を取込みTransform= Static World Transformation で親階層含めた位置情報を反映- 下流の Render TOP でマテリアル付き (色・質感) を付与して最終描画
Example 2: シーケンシャル再生 + 線形補間でのアニメーション再生 🎞️
Alembic In POP (Load Type=Next Frame, Play Mode=Sequential, Interpolation=Linear) → Transform POP → Render TOP
Maya や Blender で書き出した頂点アニメーション付き Alembic を、Sequential モードで通常再生する例。Load Type を Next Frame (Fast) にしてロードを非同期化、Interpolation を Linear に設定するとサンプル間隔が粗くても滑らかなアニメーションが得られる。Speed パラメータでスローモーション・倍速再生にも対応できる。
Load Type= Next Frame (Fast) で非同期ロードに切替えてクック負荷を分散Play Mode= Sequential を選択し、Playをオンにして再生開始Transform= Dynamic Transformation でアニメーション変換を時間軸に沿って適用Interpolation= Linear Interpolation でサンプル間を滑らかに補間Speedを 0.5 や 2.0 に設定して、スローモーション・倍速演出を加味
Example 3: 外部 CHOP からのインデックス駆動によるタイムライン同期 🕹️
LFO CHOP / Audio CHOP → CHOP to POP / export → Alembic In POP (Play Mode=Specify Index, Index) → 下流処理
Alembic アニメーションのタイムライン位置を外部 CHOP の値で直接駆動する例。Play Mode を Specify Index に切替え、Index パラメータに CHOP 値をエクスポートすることで、音楽の BPM やインタラクションに合わせてアニメーションをスクラブ再生できる。Index Unit を Fraction (0〜1) にすると正規化済み値での制御が便利。
Play Mode= Specify Index に切替- Index Unit を
Fractionに設定 (0=先頭 / 1=末尾の正規化制御) - LFO CHOP / Audio Spectrum CHOP / Slider COMP 等から 0〜1 の信号を生成
- 右クリック → Export CHOP で生成した CHOP 値を
Indexパラメータへバインド - 再生中に外部 CHOP が変動すると、Alembic アニメーションがその値に同期してスクラブ
関連オペレータ 🔗
類似機能OP 🔍
- Particle POP — ファイル取込ではなく動的生成だが、ポイントクラウド系のジェネレータとして役割が近い
組み合わせ推奨OP 🔄
- Transform POP — 取込ジオメトリの位置・回転・スケールを下流で調整
- Math POP — 取込頂点属性 (位置 / 法線等) の正規化・スケーリング
- Attribute POP — 取込属性のリネーム・削除・スキーマ整形
前処理・後処理POP 🎯
- 後処理: Transform POP、Math POP
Info POP情報 📊
Alembic In POPは Info CHOP / Info DAT による詳細情報取得に対応しています。
POP固有情報 ✨
num_verts: POP に含まれる頂点 (vertex) 数num_points: POP に含まれるポイント数num_prims: POP に含まれるプリミティブ数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)cook_start_time: 最後のクック開始時刻 (ミリ秒)cook_end_time: 最後のクック終了時刻 (ミリ秒)cooked_this_frame: 現フレームでクックされたか (0 / 1)warnings: 警告数errors: エラー数
ジオメトリ・属性情報 🧬
num_points: Alembic から取込んだ出力ポイント数num_point_attribs: 出力 POP の point 属性数 (位置 P / 法線 N / カラー Cd 等の合計)num_vertex_attribs: 出力 POP の vertex 属性数 (UV 等の頂点単位属性数)num_prim_attribs: 出力 POP の primitive 属性数num_prims: 出力プリミティブ数 (取込ジオメトリのメッシュ / カーブ数)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: ジオメトリが原点 (0,0,0) に集まっていて配置がおかしい
✅ Solution:
Transformが None になっていないか確認 (None は変換を一切適用しない)- 親階層含めた配置が必要なら
Transform= Static World Transformation を選択 - 個別オブジェクトのローカル変換のみで良ければ Static Local Transformation を選択
❌ Problem: アニメーションが再生されない / 静止したまま
✅ Solution:
Play Modeが Sequential になっているか確認 (Specify Index では Play / Speed は無視される)Playがオン、Startパルスが発火済みか確認Transform= Dynamic Transformation でないと変換アニメーションは適用されない- ファイル側のジオメトリが dynamic として書き出されているか DCC 側のエクスポート設定を再確認
❌ Problem: クック時間が極端に長くフレーム落ちが発生する
✅ Solution:
Load Type= Next Frame (Fast) に切替えて非同期ロードに変更Object Pathを*から個別パスに絞って読込対象を最小化- Common Page の
Delete Input Attributesで下流に渡す属性を最小限に絞り、VRAM・帯域を節約
❌ Problem: サンプル間がカクついて滑らかに動かない
✅ Solution:
Interpolation= Linear Interpolation に切替えてサンプル間を補間- ジオメトリが Alembic ファイル内で dynamic として定義されているか確認 (静的ジオメトリでは Interpolation は無効)
Sample Rate Mode= Custom にしてSample Rateを引き上げる (例: 60Hz)- 後処理として Math POP で頂点間の滑らかさを補強する手も検討
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Alembic In POP
- Attribute – TouchDesigner 属性概念ページ
- Transform POP – 取込ジオメトリの下流調整に組合せる関連 OP

