
概要 📖 – CPU 負荷シミュレータと意図的フレームレート低下
Hog CHOPは、CPU サイクルを意図的に消費して低スペック環境のパフォーマンスを再現したり、シンセのフレームレートを人為的に下げる CHOPです。Active と Delay / Delay Unit の組合せで、指定した時間ぶん CPU を占有して下流のクックを遅延させます。
主な用途 🎯
- 低スペックマシンでのパフォーマンスを意図的に再現してテスト
- シンセサイザー / シミュレーションのフレームレートを人為的に低下
- 重い処理を模擬するスタブとしての CPU 負荷生成
- Cook 時間の遅延が下流に与える影響の検証
- ターゲット環境でのフレーム落ち挙動を開発機で再現するデバッグ用途
データフロー 🔄
入力: トリガー条件
↓
Active 判定 (オン/オフ)
↓
Delay 時間ぶん CPU サイクルを消費 (busy-wait)
↓
出力: クック時間が遅延した状態
Tips
初心者の方は、以下日本語書籍も手元にあると安心です。
リンク
リンク

まる。
実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Null Page 📋
Active .active 🔌
Hog CHOP の有効/無効を切り替えるトグル:
- Active トグル: オン: Hog CHOP が CPU を消費する。オフ: パススルー状態になり CPU 消費は行われない
Cook Every Frame .cookalways 🔁
毎フレーム強制クックさせるかのトグル:
- Cook Every Frame トグル: オン: Hog CHOP を毎フレーム強制クックさせ、下流からのデータ要求がなくても CPU を消費し続ける。オフ: 通常の dirty 駆動で必要時のみクック
Delay .delay ⏳
1 回のクックで CPU を消費させる時間量:
- Delay 値: 1 クックあたりに Hog CHOP が CPU を占有する最小時間。値の単位は次の
Delay Unitパラメータで決定
Delay Unit .delayunit 📐
Delay 値を解釈する時間単位:
- Delay Unit:
Delay値の単位を決定するメニューパラメータ
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: 低スペック環境のフレーム落ち再現 🐢
Hog CHOP (Active=on, Delay=20ms) → メインプロジェクトのクックチェーン
- プロジェクト末端付近に Hog CHOP を配置し Active をオン
- Delay を 20ms 程度、Delay Unit を milliseconds に設定
- Cook Every Frame をオンにして毎フレーム CPU を占有
- 目標とするターゲット環境のフレームレートに近い挙動を開発機上で再現
Example 2: 重い処理のスタブとしてのプレースホルダ 🛠️
Trigger CHOP → Hog CHOP (Delay=50ms) → 下流ロジック
- 後で重い解析処理が入る予定の位置に Hog CHOP をスタブ配置
- Delay を予想処理時間(例: 50ms)に設定
- 下流ノードの応答性をスタブ状態で評価
- 後日、本実装に差し替えた際にネットワーク全体の挙動変化を最小化
Example 3: 意図的フレームレート低下によるエフェクト演出 🎬
Hog CHOP (Active toggle) → ライブシンセ → 出力
- Hog CHOP を Active=off で常時配置
- 演出タイミングで Active をオン、Delay を高めに設定
- 短時間だけシンセのフレームレートが下がり、スローモーション風の演出が発生
- Active をオフに戻すと通常フレームレートへ復帰
関連オペレータ 🔗
類似機能OP 🔍
- Null CHOP — 中継パススルー、CPU 消費は行わず Cook Type で下流クックを制御
- Timer CHOP — 時間進行を扱うが CPU 占有はせず、タイマー値の生成に特化
組み合わせ推奨OP 🔄
- Trigger CHOP — Trigger で Active を切替えて任意タイミングで CPU 負荷を投入
- Constant CHOP — Constant で Delay 値をエクスポート参照し一括調整
- Timer CHOP — Timer の経過時間に応じて Active をオン/オフし負荷シナリオを再現
- Logic CHOP — 条件判定で Active をトグルし、特定状態のときだけ CPU を占有
- Math CHOP — Math で Delay の値域や単位スケールを動的に算出
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Hog CHOPは Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Active をオンにしても CPU 負荷が想定より上がらない
✅ Solution:
- Cook Every Frame がオフのままだと dirty 駆動でしかクックされず、下流からデータ要求がない場合は CPU を消費しない。Cook Every Frame をオンにする
- Delay 値が小さすぎる(例: 0 や 1ms 未満)と消費時間が無視できる程度になる、Delay を上げる
- Delay Unit が想定と違う単位になっている場合、実時間が大幅に短くなることがある。Delay Unit を確認
❌ Problem: プロジェクト全体がフリーズしたように見える
✅ Solution:
- Delay が大きすぎる(例: 数百 ms 以上)と毎フレームの占有時間が長く UI も応答しなくなる、Delay を下げる
- Cook Every Frame をオンにしたまま Delay が大きいと累積負荷が極端に上がる、片方のみオンにする
- 緊急時は Active をオフに戻す(Active をオフにすれば Hog は CPU を消費しない)
❌ Problem: Hog CHOP を外しても遅延が残る
✅ Solution:
- 他の重い処理(GPU 待ち / ファイル I/O 等)が同時に走っていないか Performance Monitor で確認
- 前段に Null CHOP を入れて Hog 以外の負荷源を切り分ける
- Hog CHOP を delete せず Active=off に切替えるだけだと参照が残るので、参照側のキャッシュ・export 状態も併せて確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

