
概要 📖 – SOP / CHOP / POP からレーザー描画用ストリーム生成
Laser CHOPは、SOP / CHOP / POP のジオメトリをレーザー描画用の x, y, r, g, b 点列に変換する CHOPです。Step Size と Corner Hold で走査品質を調整し、Output Sample Rate(既定 48000sps)でレーザー DAC に同期したサンプルを出力します。
主な用途 🎯
- SOP / CHOP / POP のジオメトリをレーザー走査用の x, y, r, g, b 点列に変換
- Step Size / Blanking Step Size による走査速度・空走区間の制御
- Corner Hold(最小・最大)で角の鋭さを保つホールド時間の自動算出
- Pre / Post Blanking Delay と Color Delay によるレーザー機器の応答補正
- Output Sample Rate(既定 48000sps)でレーザー DAC の駆動レートに同期
データフロー 🔄
入力: SOP / CHOP / POP の点群
↓
Source OP 選択(SOP / CHOP / POP)
↓
Step Size / Blanking Step Size でサンプル化
↓
Corner Hold(Min / Max)で角を保持
↓
Color Scale と Pre/Post Blanking Delay
↓
出力: x, y, r, g, b の時系列サンプル(Output Sample Rate)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Laser Page 📋
Active .active 🔌
Laser CHOP の有効化スイッチ:
- Active: オフのときは全チャンネルをゼロ出力にする
Source OP .source 🎛️
レーザー描画のソースオペレータ種別
| 項目 | 内部名 | 説明 |
|---|---|---|
| SOP | .sop |
SOP の position / color アトリビュートをソースに使用 |
| CHOP | .chop |
CHOP の x, y チャンネル(任意で z, r, g, b, id)を点列としてサンプル |
| POP | .pop |
POP の position / color アトリビュートをソースに使用 |
ソース OP パス .sourcepaths 📥
Source OP メニューに対応した SOP / CHOP / POP のパス入力
SOP .sop 🎯
– 参照する SOP のパス
– position と color、LasCorner 等のアトリビュートからレーザー点列を生成
CHOP .chop 🎚️
– 参照する CHOP のパス
– 必須チャンネル: x, y。任意: z, r, g, b, id(id でシェイプを区切る)
– 任意の追加色チャンネル(RGB 以外のレーザー出力対応)と lascorner / lascornerholdadd / lascornerholdlookupfactor を認識
POP .pop 🎯
– 参照する POP のパス
– position と color、LasCorner 等のアトリビュートからレーザー点列を生成
出力レートとトランスフォーム .outputrate ⚙️
出力サンプルレートと座標トランスフォーム
Output Sample Rate .outputrate ⚙️
– Laser CHOP の出力サンプルレート(レーザー DAC への送信レート)
– 既定 48000 sps、60fps では 1 フレームあたり 800 点を出力可能
Swap Output .swap 🔄
– 出力の x 軸と y 軸を入れ替える
X Scale .xscale 📏
– 出力の水平方向スケール
Y Scale .yscale 📏
– 出力の垂直方向スケール
Rotate .rotate 🔄
– 出力の回転量
Camera .camera 🎥
– SOP をカメラ視点で描画する場合に参照する Camera COMP のパス
Update Method .updatemethod 🔁
ソースから新しいサンプルを取得するタイミングの制御。1 フレームで描画しきれない高密度入力で挙動が変わる
| 項目 | 内部名 | 説明 |
|---|---|---|
| When All Points Drawn | .alldrawn |
前フレームのすべての点を描画し終えたタイミングでソースから新しいサンプルを取り込む(既定) |
| Every Frame | .everyframe |
前フレームの描画完了を待たず毎フレーム入力を更新する(描画途中でも値を入れ替える) |
デバッグ・フレームマーカー .debug 📋
フレーム先頭のパルスとデバッグ用ステートチャンネルの追加
Frame Start Pulse .startpulse 📋
– フレーム先頭に全カラー -1 のサンプルを 1 つ挿入する
– 受信側でフレーム境界を検出する用途
Debug Channel .debugchan 📋
– 各サンプルの状態を 1 ch 追加する(-1: Frame Start Pulse / 0: Color / 1: Corner Hold Point / 2: Start Point Hold Time / 3: Pre Blank On / 4: Post Blank On / 5: Blanking / 6: Pre Blank Off / 7: Post Blank Off)
コーナー検出アトリビュート名 .cornerattrs 🎛️
SOP / POP 入力時に使用するコーナー検出系のポイントアトリビュート名のオーバーライド
Corner Attribute Name .cornerattr 🎛️
– 角点を示すポイントアトリビュート名(既定 LasCorner)
Corner Hold Add Attribute Name .cornerholdaddattr 🎛️
– 角点ホールド時間に加算する定数のアトリビュート名(既定 LasCornerHoldAdd)
Corner Hold Factor Attribute Name .cornerholdfactorattr 🎛️
– 角点ホールドのルックアップ係数に使うアトリビュート名(既定 LasCornerHoldLookupFactor)
Scanning Page 📐
Step Size .stepsize 📏
走査時の 1 サンプルあたりの移動量(描画中・空走中それぞれ)
Step Size .stepsize 📏
– 色を出力中(描画中)に x, y が 1 サンプルで移動できる距離
– 小さい値ほど線が滑らかになるが、1 フレームで描ける長さは短くなる
Blanking Step Size .bstepsize 📏
– 色を出力していないとき(空走中)に x, y が 1 サンプルで移動できる距離
– 通常は描画中より大きく取り、空走時間を短縮
Corner Hold .cornerhold 📐
角点でレーザーを停止させるホールド時間。前点・自点・次点の角度から線形補間して算出
Minimum Corner Hold .mincornerhold 📐
– 角度 180 度(直線)の点に適用される最小ホールド時間
– 直線上では実質ホールドしない値を設定
Maximum Corner Hold .maxcornerhold 📐
– 角度 0 度(鋭角)の点に適用される最大ホールド時間
– 最大値が最小値より小さい場合は最小値まで自動的に切り上げ
Corner Hold Lookup CHOP .cornerholdchop 🎚️
– min から max への補間に使うルックアップカーブの CHOP 参照
– 未指定のときは線形補間
Closed Shape Overlap .closedoverlap 🔁
– 閉じた形状の始点・終点を重ねるサンプル数(ms 指定)
– 色補間で形状の継ぎ目を均一化
Color Page 🎨
Color Scale .colorscale 🎨
出力カラーの強度スケーリング
Red Scale .redscale 🎨
– 赤チャンネルの強度スケール
Green Scale .greenscale 🎨
– 緑チャンネルの強度スケール
Blue Scale .bluescale 🎨
– 青チャンネルの強度スケール
Blanking Delay .blankingdelay ⚙️
色出力 ON / OFF 切り替え前後の待機時間(ms)。レーザー機器の応答遅延を補正する
Pre Blanking On Delay .preblankon ⚙️
– 色を OFF にする前にその位置で待機する時間(ms)
Post Blanking On Delay .postblankon ⚙️
– 色を OFF にした後にその位置で待機する時間(ms)
Pre Blanking Off Delay .preblankoff ⚙️
– 色を ON にする前にその位置で待機する時間(ms)
Post Blanking Off Delay .postblankoff ⚙️
– 色を ON にした後にその位置で待機する時間(ms)
タイミングと補間 .timing 🎚️
フレーム先頭の待機・色チャンネルの遅延・補間と輝度ルックアップ
Start-Point Hold Time .starthold 🎚️
– 新しいデータフレームの先頭点で待機する時間(ms)
Color Delay .colordelay 🎚️
– 出力カラーチャンネルの遅延量(ms)
Interpolate Colors .interpcolors 🔄
– 点と点の間でカラーを補間する
Brightness Curve Lookup CHOP .brightnesscurvechop 🎚️
– 閉じた形状のソフトエッジブレンドに使うルックアップカーブの CHOP 参照
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: SOP のラインジオメトリをレーザー描画ストリームに変換 🎯
Line SOP → Laser CHOP (Source OP: SOP) → Laser Device CHOP
- 描画したいラインを Line SOP で構築
- Laser CHOP の Source OP を「SOP」、SOP パスに上記 SOP を指定
- Step Size を小さく、Blanking Step Size を大きめに設定して走査効率を確保
- 出力を Laser Device CHOP に渡してレーザー機器に送信
Example 2: 音声波形を CHOP 経由でレーザー描画 🎵
Audio Device In CHOP → Math CHOP (x, y チャンネル化) → Laser CHOP (Source OP: CHOP) → Laser Device CHOP
- Audio Device In CHOP で音声入力を取得
- Math CHOP で振幅を [-1, 1] にスケーリングし、時間軸の x チャンネルと振幅の y チャンネルを構築
- Laser CHOP の Source OP を「CHOP」、CHOP パスに上記 Math CHOP を指定
- Output Sample Rate をレーザー DAC の駆動レート(例: 30000 / 48000sps)に合わせる
- Color Scale で発色強度を調整、Pre/Post Blanking Delay で機器応答に合わせて補正
Example 3: 閉形状の継ぎ目をなめらかに 🔁
Circle SOP → Laser CHOP (Closed Shape Overlap) → Laser Device CHOP
- 閉じた形状を Circle SOP / Sort SOP で用意
- Laser CHOP の Source OP を「SOP」に設定
- Closed Shape Overlap を 1〜3 ms 程度から開始し、継ぎ目の段差が消えるまで微調整
- Interpolate Colors を ON にして始点・終点のカラー補間で輝度差を均一化
関連オペレータ 🔗
類似機能OP 🔍
- Laser Device CHOP — Laser CHOP の出力を EtherDream / Helios / ShowNET 等のレーザー機器に送信
- DMX Out CHOP — ライティング機器用のシリアル出力(レーザーではなく一般照明制御)
組み合わせ推奨OP 🔄
- Laser Device CHOP — Laser CHOP の x, y, r, g, b 出力をレーザー機器に送信
- Math CHOP — x, y, r, g, b の値域を [-1, 1] や [0, 1] に正規化
- Filter CHOP — ジッタの多い入力を平滑化してから走査
- Trail CHOP — レーザー軌跡のプレビュー・デバッグ表示
- CHOP to TOP — レーザー走査内容を 2D テクスチャ化してプレビュー
前処理・後処理CHOP 🎯
- 前処理: Math CHOP、Filter CHOP、Resample CHOP、Audio Device In CHOP
- 後処理: Laser Device CHOP、Trail CHOP、Null CHOP
Info CHOP情報 📊
Laser 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:
- 1 フレームで描画しきれない高密度入力が原因。Step Size を大きく / Blanking Step Size を大きくしてサンプル数を削減
- Update Method を「Every Frame」に切り替えて毎フレーム入力を更新
- Output Sample Rate を上げる(レーザー DAC の最大値まで)
- 前段に Resample CHOP を入れて入力点数を削減
❌ Problem: 角がなまる / 鋭角が丸まって出る
✅ Solution:
- Maximum Corner Hold を増やして鋭角点での停止時間を長くする
- SOP / POP の角点に
LasCornerアトリビュートを付けてマーキング(Corner Attribute Name で名前を変更可) - Corner Hold Lookup CHOP に min→max のカーブを与えて中間角度の挙動を調整
❌ Problem: 色のオン・オフ切り替えで端がぼやける / 残像が出る
✅ Solution:
- Pre Blanking On Delay / Post Blanking On Delay を増やしてレーザーの立ち下がり遅延を補正
- Pre Blanking Off Delay / Post Blanking Off Delay で立ち上がり側も同様に補正
- Color Delay を機器仕様に合わせて調整(DAC とガルバノの応答差を吸収)
❌ Problem: 閉じた形状の継ぎ目に段差が見える
✅ Solution:
- Closed Shape Overlap を 1〜数 ms に設定し始点・終点を重ねる
- Interpolate Colors を ON にしてカラー補間
- Brightness Curve Lookup CHOP でソフトエッジブレンドのカーブを与える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

