S Curve CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

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

S Curve CHOP のカーブ生成機能を示す図

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

概要 📖 – S字カーブ生成とイージング

S Curve CHOPは、Half Cosine / Logistic / Arctangent から選択した S 字状のイージングカーブを指定サンプル数で生成する CHOPです。Steepness / Linearize / Bias で曲線形状を細かく調整でき、From Range / To Range で入出力レンジも 1 オペレータでマッピング可能です。

主な用途 🎯

  • S字状のイージングカーブ生成(Half Cosine / Logistic / Arctangent)
  • アニメーション・トランジションの加減速制御
  • 値域変換用のルックアップカーブとしての利用(From Range / To Range)
  • 信号の急激な変化を滑らかに整形(ステップ応答のスムージング)
  • プロシージャルなオートメーション曲線の生成(カスタムサンプル数指定)

データフロー 🔄

入力: サンプルインデックス(From Range で指定)

Curve Type 選択(Half Cosine / Logistic / Arctangent)

Steepness / Linearize / Bias で形状調整

To Range にマッピング

出力: S字カーブのチャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

S Curve Page 📋

Curve Type .type 🎛️

生成する S 字カーブの数式を決定するメニューパラメータ

項目 内部名 説明
Half Cosine .halfcosine 半周期のコサイン波で滑らかなS字を生成(始点と終点で勾配ゼロ)
Logistic .log シグモイド(ロジスティック関数)でS字を生成(中央付近で急峻)
Arctangent .atan アークタンジェント関数でS字を生成(裾野がなだらか)

サンプル数・パディング 📏

Length .length 📏
– 本体カーブのサンプル数を設定
– 出力 CHOP の主部分の解像度を決定

Prepend .prepend ⏮️
– カーブの先頭側に追加するサンプル数(カーブ開始前のパディング)
– アニメーションの開始タイミング調整に使用

Append .append ⏭️
– カーブの末尾側に追加するサンプル数(カーブ終了後のパディング)
– アニメーションの終了タイミング調整に使用

形状調整パラメータ 🎚️

Steepness .steepness 📐
– S 字カーブの中央付近の傾きの急峻さを制御
– 値を大きくするほど中央でシャープに、小さくするほどなだらかになる

Linearize .linearize 📈
– カーブの曲率の強さを制御(線形への近づけ具合)
– 値を上げると直線的に、下げると S 字らしさが強調される

Bias .bias ↔️
– カーブのバイアス(中央位置)を前後にシフト
– 値を変えると S 字の変曲点が前寄り・後ろ寄りに移動

From Range .fromrange 📥

入力インデックスの想定レンジ:

  • From Range low / high: 入力インデックスの下限と上限。カーブ生成の基準範囲となる入力側のレンジを指定

To Range .torange 📤

出力カーブの値域:

  • To Range low / high: 出力カーブの最小値と最大値。生成された S 字カーブをこのレンジにマッピング

Channel Page 🎚️

チャンネル名・サンプルレート 🏷️

Channel Names .channelname 🏷️
– 出力チャンネル名を指定(パターン記法対応)
– 例: chan[1-20] で chan1〜chan20 の 20 チャンネルを一括生成

Sample Rate .rate ⏱️
– チャンネルのサンプルレート(samples/sec)
– デフォルトは me.time.rate(プロジェクトのタイムラインレート)

Extend Left .left ⬅️

チャンネル範囲より前(左側)の値を取得した場合の挙動

項目 内部名 説明
Hold .hold チャンネルの現在値を保持して返す
Slope .slope チャンネル開始前にも傾きを維持して外挿
Cycle .cycle チャンネルを繰り返して循環させる
Mirror .mirror 1 周期ごとに反転しながら循環させる
Default Value .default Default Value パラメータで指定した固定値を返す

Extend Right .right ➡️

チャンネル範囲より後(右側)の値を取得した場合の挙動

項目 内部名 説明
Hold .hold チャンネルの現在値を保持して返す
Slope .slope チャンネル終了後にも傾きを維持して外挿
Cycle .cycle チャンネルを繰り返して循環させる
Mirror .mirror 1 周期ごとに反転しながら循環させる
Default Value .default Default Value パラメータで指定した固定値を返す

Default Value .defval 🔢

Default Value モード時に返される固定値:

  • Default Value: Extend Left / Right で default を選択したときに範囲外で返される定数値

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: アニメーションのイージング曲線 🎬

Timer CHOP → S Curve CHOP (Half Cosine) → Lookup CHOP → Geometry tx
  1. Timer CHOP で 0〜1 の進行値を生成
  2. S Curve CHOP の Curve Type を「Half Cosine」、To Range を [0, 1] に設定
  3. Lookup CHOP で Timer 値を S Curve カーブで参照し、滑らかな進行値に変換
  4. Geometry の位置パラメータに渡し、始点・終点で減速する自然な動きを実現

Example 2: 音量フェードイン・フェードアウト 🎵

Audio Device In CHOP → Math CHOP (Multiply) ← S Curve CHOP (Logistic) → 音量カーブ
  1. S Curve CHOP の Curve Type を「Logistic」、Length をフェード時間に合わせて設定
  2. To Range を [0, 1] にして音量係数カーブを生成
  3. Math CHOP で Audio Device In CHOP に S Curve の値を乗算
  4. 音量が S 字状に立ち上がり・立ち下がる自然なフェード効果を実現

Example 3: センサー値の滑らかなマッピング 📊

Serial CHOP → Math CHOP (Normalize) → Lookup CHOP ← S Curve CHOP (Arctangent) → 制御値
  1. Math CHOP でセンサー値を 0〜1 に正規化
  2. S Curve CHOP の Curve Type を「Arctangent」、Steepness を調整して応答カーブを生成
  3. Lookup CHOP で正規化値を S Curve でルックアップし非線形マッピング
  4. センサーの中央域で敏感、端部でゆるやかな応答特性を持つ制御信号を得る

Example 4: ライティングのディマー曲線 💡

LFO CHOP → S Curve CHOP (Half Cosine, Bias) → DMX Out CHOP
  1. LFO CHOP で 0〜1 の周期的な進行値を生成
  2. S Curve CHOP で Half Cosine カーブを設定、Bias で立ち上がりタイミングを調整
  3. To Range を [0, 255] に設定して DMX 値レンジへマッピング
  4. DMX Out CHOP に渡し、人の知覚に近い滑らかな調光カーブを実現

関連オペレータ 🔗

類似機能OP 🔍

  • Pattern CHOP — Ramp / Sine / Square 等の波形パターンを生成(S 字に特化しない汎用波形ジェネレータ)
  • LFO CHOP — 周期的な低周波振動を生成(S 字は単発カーブ、LFO は連続振動)

組み合わせ推奨OP 🔄

  • Lookup CHOP — S Curve をルックアップテーブルとして使い、入力値を非線形マッピング
  • Math CHOP — S Curve の出力をスケーリング・オフセット調整
  • Timer CHOP — アニメーション進行値を S Curve でイージング処理
  • Trigger CHOP — イベント発火時に S Curve をエンベロープとして再生
  • Filter CHOP — 後段でさらにスムージングを加える

前処理・後処理CHOP 🎯


Info CHOP情報 📊

S Curve CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: カーブが直線的になってS字に見えない
✅ Solution:

  • Linearize の値を小さくしてカーブの曲率を強める
  • Steepness を上げて中央付近の傾きを急にする
  • Curve Type を「Logistic」に切り替えるとシグモイド特有のS字が明確に出る

❌ Problem: 出力値が想定の範囲外になる
✅ Solution:

  • To Range の low / high を出力したい値域に設定し直す
  • From Range の low / high が入力インデックスのレンジと一致しているか確認
  • 後段で Math CHOP の Range 変換を使って再マッピング

❌ Problem: サンプル数が足りずカーブがガタつく
✅ Solution:

  • Length パラメータを大きくして解像度を上げる
  • 後段で Resample CHOP を入れて補間する
  • Sample Rate を上げてフレーム間の値変化を滑らかにする

❌ Problem: カーブの開始・終了タイミングがズレる
✅ Solution:

  • Prepend / Append でカーブ前後のパディングサンプル数を調整
  • Bias パラメータで S 字の変曲点(中央位置)を前後にシフト
  • 前段の Timer CHOP 側で進行値のタイミングを整える

参考資料 📚

その他 🔗

公式リソース 📖

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