
概要 📖 – TOP 画像のピクセルを CHOP チャンネルに変換
TOP to CHOPは、TOP の画像ピクセルをサンプリングし、RGB / RGBA 各成分を CHOP チャンネルとして出力する CHOPです。GPU 側で生成・処理した画像データを CPU 側の制御信号に変換する橋渡し役で、Download Type で同期・非同期転送を選択できます。
主な用途 🎯
- TOP 画像のピクセル値を CHOP チャンネルとして取得(RGB / RGBA 各チャンネルを個別の CHOP チャンネルへ展開)
- GPU 演算結果の CPU 側読み出し(GLSL TOP や Feedback TOP の結果を制御信号として利用)
- 画像の特定ピクセル・行・列のサンプリング(Crop モードで Pixel / Row / Column / Block / Full Image を選択)
- センサーやカメラ映像の輝度値解析(Active Channel と Exclude NaNs で有効ピクセルだけを取得)
- UV 座標から動的にピクセルをサンプリング(入力 CHOP の UV チャンネルで lookup 位置を制御)
データフロー 🔄
入力: TOP 画像
↓
Image Page(Download Type / Color Space / Active Channel)
↓
Crop Page(Pixel / Row / Column / Block / Full Image)
↓
Extend Page(境界処理 Hold/Cycle/Mirror/Default)
↓
Channel Page(Start / Sample Rate / Extend)
↓
出力: CHOP チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Image Page 🖼️
TOP 入力 .top 🎯
サンプリング対象の TOP を指定
TOP .top 🎯
– サンプリング対象となる TOP オペレータのパスを指定
– 任意の TOP(Movie File In / Render / GLSL / Feedback など)を入力可能
Download Type .downloadtype ⬇️
GPU からのデータ転送方式(同期・非同期)の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Immediate (Slow) | .immediate |
そのフレーム内で即時に GPU からダウンロード(レンダリングを stall させる) |
| Next frame (Fast) | .nextframe |
次フレームに遅延してダウンロード(高速、レンダリングを stall させない) |
チャンネル名プリフィックス .channel_prefix 🏷️
RGBA 各成分から生成される CHOP チャンネルの名前プリフィックス
Red .r 🔴
– 赤ピクセルから生成される CHOP チャンネルのプリフィックス(デフォルト r)
– 複数行ある場合はスキャンライン番号がサフィックスとして付く(例: r0, r4)
Green .g 🟢
– 緑ピクセルから生成される CHOP チャンネルのプリフィックス(デフォルト g)
– 複数行ある場合はスキャンライン番号がサフィックスとして付く(例: g0, g4)
Blue .b 🔵
– 青ピクセルから生成される CHOP チャンネルのプリフィックス(デフォルト b)
– 複数行ある場合はスキャンライン番号がサフィックスとして付く(例: b0, b4)
Alpha .a ⚪
– アルファピクセルから生成される CHOP チャンネルのプリフィックス(デフォルト a)
– 複数行ある場合はスキャンライン番号がサフィックスとして付く(例: a0, a4)
Output Color Space .outputcolorspace 🎨
出力前にデータを変換する色空間
| 項目 | 内部名 | 説明 |
|---|---|---|
| sRGB | .srgb |
sRGB 色空間(sRGB transfer、SDR) |
| sRGB – Linear | .srgblinear |
sRGB 色空間(linear transfer、SDR) |
| Rec.601 (NTSC) | .rec601ntsc |
Rec.601 NTSC primaries(SDR) |
| Rec.709 | .rec709 |
Rec.709 色空間(SDR) |
| Rec.2020 | .rec2020 |
Rec.2020 色空間(HDR) |
| Rec.2020 ST2084PQ | .rec2020st2084pq |
Rec.2020 + Perceptual Quantizer(HDR) |
| Rec.2020 HLG | .rec2020hlg |
Rec.2020 + Hybrid Log Gamma(HDR) |
| DCI-P3 | .dcip3 |
DCI-P3(D65 / 2.6 gamma、HDR) |
| DCI-P3 (D60) | .dcip3d60 |
DCI-P3 D60 sim(HDR) |
| Display-P3 (D65) | .displayp3d65 |
Display-P3 D65 + sRGB gamma(HDR) |
| Display-P3 (D65) – Linear | .displayp3d65linear |
Display-P3 D65 + linear(HDR) |
| ACES2065-1 | .aces2065-1 |
ACES AP0 + linear(HDR) |
| ACEScg | .acescg |
ACES AP1 + linear(HDR) |
| ACESproxy | .acesproxy |
ACESproxy + log transfer(HDR) |
| Passthrough | .passthrough |
Working Color Space への変換なし、値をそのまま使用 |
Output Reference White .outputreferencewhite 💡
Working Color Space 変換時の Reference White の扱い
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default For Color Space | .default |
選択された色空間に応じて SDR / HDR の Reference White を自動選択 |
| Standard (SDR) | .sdr |
出力色空間を SDR Reference White として扱う |
| High (HDR) | .hdr |
出力色空間を HDR Reference White として扱う |
出力モード・フィルタ .output_filter 🎛️
スキャンラインの結合方式と NaN ピクセルの除外
Output as Single Channel Set .singleset 📦
– オン: 全スキャンラインを 1 つのチャンネルセットに連結(RGBA 画像なら 4 チャンネル)
– オフ: 各スキャンラインごとに別チャンネルセットを作成
Exclude NaNs .excludenans 🚫
– オン: いずれかの成分が NaN のピクセルを CHOP チャンネルから除外
– GLSL TOP やレンダリング結果に NaN が混入する場合の保険
Active Channel .activechannel 🎚️
指定した成分が非ゼロのピクセルだけを CHOP チャンネルに含めるフィルタ
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
フィルタリングなし(全ピクセルを取得) |
| Red | .red |
赤成分が非ゼロのピクセルのみ取得 |
| Green | .green |
緑成分が非ゼロのピクセルのみ取得 |
| Blue | .blue |
青成分が非ゼロのピクセルのみ取得 |
| Alpha | .alpha |
アルファ成分が非ゼロのピクセルのみ取得(マスク的に使用) |
RGBA Units .rgbaunit 📏
出力値のスケーリング範囲
| 項目 | 内部名 | 説明 |
|---|---|---|
| 0 to 1 | .u1 |
0〜1 の正規化範囲(デフォルト、シェーダ感覚) |
| 0 to 255 | .u256 |
0〜255 の 8bit 範囲(一般的な画像処理感覚) |
| 0 to 65535 | .u65536 |
0〜65535 の 16bit 範囲(高精度画像) |
Crop Page ✂️
Crop .crop ✂️
画像から抽出する範囲の指定方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Pixel (U,V) | .pixel |
U / V で指定した 1 ピクセルを抽出 |
| Row (U) | .row |
U で指定した 1 行を抽出(V Start / V End で範囲指定) |
| Column (V) | .col |
V で指定した 1 列を抽出(U Start / U End で範囲指定) |
| Rows and Columns | .block |
U / V Start・End で囲んだ矩形領域を抽出 |
| Full Image | .full |
画像全体を抽出 |
UV Units .uvunits 📐
U / V Start・End パラメータの単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| 0 to 1 | .norm |
0〜1 の正規化座標(解像度非依存) |
| Pixels | .pixel |
ピクセル座標(解像度依存、$NR / $NC 変数を使用可) |
UV 範囲・補間 .uv_range 🎯
サンプリング範囲と補間設定
U Start .ustart 📍
– U 方向のサンプリング開始位置
– 範囲外の値は Extend Page の境界条件で決まる
U End .uend 📍
– U 方向のサンプリング終了位置
V Start .vstart 📍
– V 方向のサンプリング開始位置
V End .vend 📍
– V 方向のサンプリング終了位置
Interpolate .interp 🔀
入力 CHOP で UV サンプリングするときの補間方式
| 項目 | 内部名 | 説明 |
|---|---|---|
| Linear | .linear |
線形補間(隣接ピクセルを重み付け平均) |
Extend Page ↔️
Image Left .imageleft ⬅️
U が 0 未満のときの境界処理
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
端のピクセル値を保持 |
| Cycle | .cycle |
反対側の端へループ |
| Mirror | .mirror |
鏡像で折り返し |
| Default Color | .default |
Default Color パラメータの色を使用 |
Image Right .imageright ➡️
U が 1 を超えたときの境界処理
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
端のピクセル値を保持 |
| Cycle | .cycle |
反対側の端へループ |
| Mirror | .mirror |
鏡像で折り返し |
| Default Color | .default |
Default Color パラメータの色を使用 |
Image Bottom .imagebottom ⬇️
V が 0 未満のときの境界処理
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
端のピクセル値を保持 |
| Cycle | .cycle |
反対側の端へループ |
| Mirror | .mirror |
鏡像で折り返し |
| Default Color | .default |
Default Color パラメータの色を使用 |
Image Top .imagetop ⬆️
V が 1 を超えたときの境界処理
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
端のピクセル値を保持 |
| Cycle | .cycle |
反対側の端へループ |
| Mirror | .mirror |
鏡像で折り返し |
| Default Color | .default |
Default Color パラメータの色を使用 |
Default Color .defcolor 🎨
境界処理が Default Color のときに使用する色
Red .defcolorr 🔴
– デフォルトカラーの赤成分
Green .defcolorg 🟢
– デフォルトカラーの緑成分
Blue .defcolorb 🔵
– デフォルトカラーの青成分
Alpha .defcolora ⚪
– デフォルトカラーのアルファ成分
Channel Page 🎚️
Start / Sample Rate .start_rate 🎬
出力 CHOP チャンネルの開始位置とサンプルレート
Start .start 🎬
– チャンネルの開始位置(右側の Start Unit で単位を指定)
– チャンネル長はスキャンラインのピクセル数で決まる
Sample Rate .rate 📡
– 出力 CHOP のサンプルレート(samples/sec)
Start Unit .startunit ⏱️
Start パラメータの単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| I (Samples) | .samples |
サンプル単位 |
| F (Frames) | .frames |
フレーム単位 |
| S (Seconds) | .seconds |
秒単位 |
Extend Left .left ⏪
チャンネル範囲より前(左側)にアクセスしたときの値
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネル開始値を保持 |
| Slope | .slope |
開始時の傾きで外挿 |
| Cycle | .cycle |
チャンネルを繰り返し |
| Mirror | .mirror |
鏡像で繰り返し |
| Default Value | .default |
Default Value パラメータの値を使用 |
Extend Right .right ⏩
チャンネル範囲より後(右側)にアクセスしたときの値
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネル終了値を保持 |
| Slope | .slope |
終了時の傾きで外挿 |
| Cycle | .cycle |
チャンネルを繰り返し |
| Mirror | .mirror |
鏡像で繰り返し |
| Default Value | .default |
Default Value パラメータの値を使用 |
Default Value .defval 🔢
Default Value 境界条件で使用する固定値
Default Value .defval 🔢
– Extend Left / Extend Right が Default Value のとき範囲外で使用する値
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: GLSL TOP の計算結果を CPU 側で取得 🧮
GLSL TOP → TOP to CHOP (Full Image / Next frame) → Math CHOP → 制御信号
- GLSL TOP で粒子位置や物理シミュレーションの結果を画像として出力
- TOP to CHOP の Crop を「Full Image」、Download Type を「Next frame (Fast)」に設定
- RGBA 各チャンネルから CHOP チャンネルが生成され、CPU 側で読み出し可能になる
- Math CHOP や Logic CHOP で後段処理して制御信号として活用
Example 2: カメラ映像の中央 1 ピクセルの輝度を取得 📷
Video Device In TOP → TOP to CHOP (Pixel, U=0.5 V=0.5) → Filter CHOP → 値
- Video Device In TOP でカメラ映像を取得
- TOP to CHOP の Crop を「Pixel (U,V)」、UV Units を「0 to 1」、U=0.5 / V=0.5 に設定
- 中央ピクセルの RGBA 値が CHOP チャンネルとして出力される
- Filter CHOP で時間方向にスムージングして安定した輝度値を得る
Example 3: Render TOP の特定行をオシロスコープ風に読み出す 📊
Render TOP → TOP to CHOP (Row, V=0.5) → Trail CHOP → 表示
- Render TOP の出力から特定行のピクセル列を取得
- TOP to CHOP の Crop を「Row (U)」、V を 0.5、U Start=0 / U End=1 に設定
- 1 行分のピクセルがチャンネルの時系列サンプルとして出力される
- Trail CHOP やオシロ風 UI に渡して波形として可視化
Example 4: Alpha マスクで有効ピクセルだけを取得 🎭
Composite TOP → TOP to CHOP (Active Channel: Alpha, Exclude NaNs) → 解析
- アルファ付きの Composite TOP(人物切り抜き映像等)を入力
- TOP to CHOP の Active Channel を「Alpha」、Exclude NaNs をオンに設定
- アルファが非ゼロのピクセル(被写体領域)だけが CHOP チャンネルに含まれる
- 後段でピクセル数のカウントや平均輝度の解析に利用
関連オペレータ 🔗
類似機能OP 🔍
- CHOP to TOP — 逆方向の変換(CHOP チャンネル → TOP 画像)
- Analyze CHOP — CHOP チャンネルから単一統計値(最大・平均・ピーク)を抽出
組み合わせ推奨OP 🔄
- Math CHOP — TOP to CHOP 後段でピクセル値の範囲変換やノーマライズ
- Filter CHOP — ピクセル値の時間方向スムージング
- Analyze CHOP — 取得したチャンネルから平均・最大・ピーク等の統計値を計算
- Trail CHOP — TOP to CHOP 出力の時間履歴を可視化
- Logic CHOP — 輝度値の閾値判定でトリガーを生成
前処理・後処理CHOP 🎯
Info CHOP情報 📊
TOP to 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: レンダリングが重くなる・フレームレートが落ちる
✅ Solution:
- Download Type を「Immediate (Slow)」にすると GPU 同期で stall が発生する。リアルタイム用途では「Next frame (Fast)」を使用
- Crop を「Full Image」のまま大解像度 TOP を渡すと転送量が膨大になる。前段で Math CHOP ではなく Resolution TOP でダウンサンプリングしてから渡す
- Active Channel や Exclude NaNs で本当に必要なピクセルだけに絞り、出力チャンネル数を最小化する
❌ Problem: 色の値が想定と違う・コントラストがズレる
✅ Solution:
- Output Color Space の選択が出力先の色空間と一致しているか確認
- 色変換を行いたくない場合は Output Color Space を「Passthrough」にして値をそのまま使用
- Output Reference White の SDR / HDR 設定が Working Color Space と合っているか確認
❌ Problem: NaN / Inf が CHOP に混入する
✅ Solution:
- Exclude NaNs をオンにして問題のあるピクセルを除外
- 前段の GLSL TOP / Feedback TOP で 0 除算や log(0) 等を発生させていないか確認
- 後段に Logic CHOP や Limit CHOP を入れて異常値を遮断
❌ Problem: サンプル数(チャンネル長)が想定と違う
✅ Solution:
- Crop が「Full Image」「Row」「Column」「Block」のいずれかで取得範囲が変わる
- UV Units が「0 to 1」と「Pixels」で U Start / U End / V Start / V End の意味が変わる
- Output as Single Channel Set のオン・オフでチャンネルセット数が変わる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

