
概要 📖 – 位相ベースの状態遷移とエッジ制御
Phaser CHOPは、入力された位相値に対しエッジ付きの状態遷移を生成し、サンプル数や境界処理を制御可能な CHOPです。位相を 0-1 で受け取り、Edge による遷移の鋭さと Extend Input による範囲外処理を組み合わせて自在な信号形状を生成します。
主な用途 🎯
- 位相値 (0-1) を入力としたエッジ付き状態遷移の生成
- Edge パラメータによるシャープ/ソフトな切替の制御
- 0-1 範囲外の入力に対する境界処理 (Clamp / Cycle / Mirror / Add) の切替
- Num Samples 指定による複数サンプル波形の一括生成
- アニメーション制御信号やトリガー前段の位相基準シグナル供給
データフロー 🔄
入力: 位相値 (0-1) または時間チャンネル
↓
Edge による境界鋭さ決定
↓
Extend Input による範囲外処理
↓
Output Format で形状確定
↓
出力: 位相に応じた値列
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Phaser Page 📋
Edge .edge 📐
位相に対する状態遷移の分離エッジ
Edge .edge 📐
– 2 つの状態間の分離エッジ幅を指定するパラメータ
– 値を小さくするほど位相差に対してシャープな分離になる
– Edge Input (上流接続) がある場合、このパラメータは無視され Edge Input が優先される
Num Samples .nsamples 🔢
出力サイズの指定
Num Samples .nsamples 🔢
– 出力チャンネルのサンプル数を指定
– 位相入力 (phase input) が上流に接続されている場合、このパラメータは無視され入力サンプル数が使用される
Output Format .outputformat 📤
出力フォーマットの選択メニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Multi-Samples | .samples |
1 チャンネル内に複数サンプルとして出力 |
Extend Input .extend 🔁
時間入力が 0-1 範囲外のときの解釈方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp | .clamp |
時間入力を 0-1 にクランプ |
| Cycle | .cycle |
0-1 範囲外で入力時間を周期的にサイクル |
| Mirror | .mirror |
入力時間を 0-1 範囲でジグザグ折り返し |
| Mirror Slope | .mirrorslope |
0-1 範囲でジグザグ折り返し、かつ Phaser の傾きも反転 |
| Add | .add |
時間入力が 1 を超える (または 0 を下回る) と Phaser 値が単調に増加 (または減少) し続ける |
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: 位相駆動のフェード切替 🎚️
LFO CHOP → Phaser CHOP (Edge=0.1) → Cross TOP の opacity
- LFO CHOP で 0-1 を周期的に行き来する位相信号を生成
- Phaser CHOP の Edge を 0.1 に設定してシャープめなクロスフェード境界を作る
- 出力をクロスフェード TOP の opacity にエクスポート
- 位相の進行に応じて 2 画像が切り替わる
Example 2: Extend Input によるトリガー前段の境界制御 🔁
Timer CHOP (fraction) → Phaser CHOP (Extend Input=Cycle) → Trigger CHOP
- Timer CHOP の fraction 出力 (経過率) を Phaser CHOP に渡す
- Extend Input を「Cycle」に設定し、Timer ループ後も周期的に位相が継続するようにする
- Phaser 出力を Trigger CHOP に通して状態遷移をイベント化
- ループ毎に同位相でトリガーが再発火する制御信号として活用
Example 3: Num Samplesで複数波形ルックアップ 🔢
Phaser CHOP (Num Samples=256, Edge=0.5) → Lookup CHOP / CHOP to TOP
- Phaser CHOP の Num Samples を 256 に設定し、滑らかな遷移波形を 1 サンプル分の位相から一括生成
- Edge=0.5 で中庸な遷移カーブにする
- 出力を Lookup CHOP のテーブルとして利用、または CHOP to TOP で GPU シェーダ uniform に渡す
- 位相基準の状態テーブルとして他オペレータから参照
関連オペレータ 🔗
類似機能OP 🔍
- LFO CHOP — 周期波形を直接生成する。Phaser は位相入力を受けて遷移形状を成形する補完関係
- Lookup CHOP — 位相 (インデックス) をテーブル参照に用いる。Phaser 出力をテーブル素材として併用可能
- Pattern CHOP — サンプル数指定で波形生成。Phaser はエッジパラメータで遷移鋭度を制御する点が異なる
組み合わせ推奨OP 🔄
- LFO CHOP — LFO の位相を Phaser に渡してエッジ付き遷移に整形
- Timer CHOP — Timer の fraction を位相入力として Phaser に供給
- Trigger CHOP — Phaser 出力でエンベロープ・状態遷移を起動
- Lookup CHOP — Phaser 出力をテーブル参照のインデックスとして利用
- CHOP to TOP — Phaser 出力を GPU シェーダ uniform に渡し、ピクセル単位の遷移マスクとして活用
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Phaser 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: Edge パラメータを変更しても出力が変わらない
✅ Solution:
- Edge Input (上流チャンネル) が接続されている場合、Edge パラメータは無視される仕様のため、上流接続の有無を確認
- Edge Input を外すか、上流側の Edge 値を変えて出力を制御
- 位相入力の値域 (0-1) を Math CHOP の From Range / To Range で確認・補正
❌ Problem: Num Samples を変えても出力サンプル数が変わらない
✅ Solution:
- 位相入力 (phase input) が上流に接続されている場合、Num Samples は無視され入力サンプル数が優先される
- Num Samples のみで制御したい場合は、位相入力の接続を外しエッジ+時間パラメータで駆動する
- 入力 CHOP のサンプル数自体を変えたい場合は前段で Resample CHOP を使う
❌ Problem: 0-1 範囲外の入力で値が暴走する/クランプされすぎる
✅ Solution:
- Extend Input の設定で範囲外処理の挙動が決まる (Clamp / Cycle / Mirror / Mirror Slope / Add) ため用途に合わせて選択
- 周期的なループが必要なら Cycle、ジグザグ反復が必要なら Mirror、累積したいなら Add
- 入力範囲が想定外の場合は前段で Math CHOP の From Range / To Range で 0-1 にノーマライズしておくと安定
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

