Alembic In POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

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

Alembic In POP による Alembic ファイル読込の図

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

概要 📖 – 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

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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) を推奨します。

引用元: 公式 docs

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 と定義され、かつ変換情報を持つ場合にのみ動作します。静的ジオメトリでは効果がありません。

引用元: 公式 docs


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 でマテリアル付きでレンダリングする。

  1. Houdini 側で ROP Alembic Output で .abc を書き出し
  2. Alembic In POP の Alembic File に .abc のパスを指定
  3. Object Path = * (All Objects) で全階層を取込み
  4. Transform = Static World Transformation で親階層含めた位置情報を反映
  5. 下流の 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 パラメータでスローモーション・倍速再生にも対応できる。

  1. Load Type = Next Frame (Fast) で非同期ロードに切替えてクック負荷を分散
  2. Play Mode = Sequential を選択し、Play をオンにして再生開始
  3. Transform = Dynamic Transformation でアニメーション変換を時間軸に沿って適用
  4. Interpolation = Linear Interpolation でサンプル間を滑らかに補間
  5. 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) にすると正規化済み値での制御が便利。

  1. Play Mode = Specify Index に切替
  2. Index Unit を Fraction に設定 (0=先頭 / 1=末尾の正規化制御)
  3. LFO CHOP / Audio Spectrum CHOP / Slider COMP 等から 0〜1 の信号を生成
  4. 右クリック → Export CHOP で生成した CHOP 値を Index パラメータへバインド
  5. 再生中に外部 CHOP が変動すると、Alembic アニメーションがその値に同期してスクラブ

関連オペレータ 🔗

類似機能OP 🔍

  • Particle POP — ファイル取込ではなく動的生成だが、ポイントクラウド系のジェネレータとして役割が近い

組み合わせ推奨OP 🔄

  • Transform POP — 取込ジオメトリの位置・回転・スケールを下流で調整
  • Math POP — 取込頂点属性 (位置 / 法線等) の正規化・スケーリング
  • Attribute POP — 取込属性のリネーム・削除・スキーマ整形

前処理・後処理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 で頂点間の滑らかさを補強する手も検討

参考資料 📚

その他 🔗

公式リソース 📖

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