
概要 📖 – 画素値に数学関数を適用
Function TOPは、入力画像の各ピクセルに対数・三角関数・累乗などの数学関数を 1 つ適用し、ピクセル単位で値を変換する TOPです。GLSL を書かずに GUI 設定だけでピクセル単位の数式演算が実現でき、RGBA チャンネルごとに別の関数を割り当てた加工にも対応します。
主な用途 🎯
- HDR 画像の対数圧縮(
log10やlnでトーンマッピングの前処理) - 三角関数による画素値の周期変調(
sinやcosでゆらぎ・波打ちパターンを生成) - 音響データの dB ⇔ 振幅 単位変換(
Amplitude to dBやdB to Amplitude) - 累乗・指数によるガンマ補正・カーブ整形(
powやexpで諧調を補正) - 絶対値・符号取得など値の正規化(
absやsignで前処理)
データフロー 🔄
入力: 任意の TOP テクスチャ
↓
ピクセルごとに選択した関数 (sin / log / exp 等) を RGBA 各チャンネルへ適用
↓
出力: 変換後テクスチャ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Function Page 📁
Re-Range Integers .rerange 📏
整数フォーマット入力に対するスケール・シフト前処理 (浮動小数フォーマットでは無視):
- Re-Range Integers 1:
rerange1(シフト値) — 入力値に加算する shift 値です。式は(input × rerange2) + rerange1。整数テクスチャフォーマットのみ有効で、浮動小数フォーマットでは無視されます - Re-Range Integers 2:
rerange2(スケール値) — 入力値に乗算する scale 値。整数テクスチャ専用 (同上)
Function .funcrgba 🎛️
RGBA 全チャンネルに適用する数学関数を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| x Input | .input |
入力値をそのまま通過 (恒等関数) |
| Constant Value | .constant |
Constant Value (定数値) パラメータで入力を置換 |
| sqrt(x) Square Root | .sqrt |
平方根 √x |
| abs(x) Absolute Value | .abs |
絶対値 |x| |
| sign(x) Sign | .sign |
符号関数 (x が負なら -1、0 なら 0、正なら 1) |
| cos(x) Cosine | .cos |
余弦 cos(x) |
| sin(x) Sine | .sin |
正弦 sin(x) |
| tan(x) Tangent | .tan |
正接 tan(x) |
| acos(x) Arccosine | .acos |
逆余弦 acos(x) |
| asin(x) Arcsine | .asin |
逆正弦 asin(x) |
| atan(x) Arctan (Input1) | .atan |
逆正接 atan(x) |
| atan2(x,y) Arctan (Input1 / Input2) | .atan2 |
2 引数逆正接 atan2(x, y) — 入力 1 と入力 2 から角度を計算 |
| cosh(x) Hyperbolic Cosine | .cosh |
双曲線余弦 cosh(x) |
| sinh(x) Hyperbolic Sine | .sinh |
双曲線正弦 sinh(x) |
| tanh(x) Hyperbolic Tangent | .tanh |
双曲線正接 tanh(x) |
| log10(x) Log Base 10 | .log10 |
常用対数 log₁₀(x) |
| log2(x) Log Base 2 | .log2 |
2 を底とする対数 log₂(x) |
| logN(x) Log Base N | .logn |
Base Value (底値) パラメータを底とする対数 log_N(x) |
| ln(x) Natural Log | .ln |
自然対数 ln(x) |
| exp(x) e ^ Input1 | .exp |
自然指数 e^x |
| exp2(x) 2 ^ Input1 | .exp2 |
2 の x 乗 (2^x) |
| exp10(x) 10 ^ Input1 | .exp10 |
10 の x 乗 (10^x) |
| pow(x) Base ^ Input1 | .powb |
Base Value ^ x (底固定・指数=入力) |
| pow(x) Input1 ^ Exponent | .powe |
x ^ Exponent Value (指数値) (底=入力・指数固定) |
| pow(x,y) Input1 ^ Input2 | .powxy |
入力 1 ^ 入力 2 (底と指数を別の TOP から供給) |
| dB to Power | .dbtopow |
デシベル → パワー変換 |
| Power to dB | .powtodb |
パワー → デシベル変換 |
| dB to Amplitude | .dbtoamp |
デシベル → 振幅変換 |
| Amplitude to dB | .amptodb |
振幅 → デシベル変換 |
※ 注意: 入力値が関数の定義域を外れた場合 (例:
log10やsqrtに負の値、acosやasinに [-1, 1] 範囲外の値)、出力は NaN または Inf になります。Replace ErrorsをオンにしてError Valueに置換値を設定するか、前段で値域をクランプしてください。
チャンネル別関数 .funcchannels 🎨
RGBA 各チャンネルに個別の関数を割り当てるオーバーライドパラメータ群 (下位ほど優先):
- Function RGB:
funcrgb(RGB 共通関数) — R / G / B 3 チャンネル共通で適用する関数 (アルファ除外、Function RGBA より優先)。選択肢は Function RGBA と同一 - Function R:
funcr(赤チャンネル関数) — 赤チャンネル専用の関数 (Function RGB より優先)。選択肢は Function RGBA と同一 - Function G:
funcg(緑チャンネル関数) — 緑チャンネル専用の関数 (同上)。選択肢は Function RGBA と同一 - Function B:
funcb(青チャンネル関数) — 青チャンネル専用の関数 (同上)。選択肢は Function RGBA と同一 - Function A:
funca(アルファチャンネル関数) — アルファチャンネル専用の関数 (同上)。選択肢は Function RGBA と同一
補助パラメータ .auxvalues 🔢
Log Base N / pow Base / pow Exponent / Constant の各関数が参照する固定値:
- Base Value:
baseval(底値) —logN(x) Log Base Nの底、またはpow(x) Base ^ Input1の底として使用される定数値 - Exponent Value:
expval(指数値) —pow(x) Input1 ^ Exponentの指数として使用される定数値 - Constant Value:
constval(定数値) —Constant Value関数を選んだときの出力固定値
Angle Units .angunit 📐
三角関数 (sin / cos / tan 等) で入力値を解釈する角度単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .deg |
入力値を度 (deg) として解釈 (1 周 = 360) |
| Radians | .rad |
入力値をラジアン (rad) として解釈 (1 周 = 2π) |
| Cycles | .cycle |
入力値をサイクル (cycle) として解釈 (1 周 = 1.0) |
エラー処理 .errorhandling ⚠️
関数の定義域外入力で発生する NaN / Inf の置換設定:
- Replace Errors:
replace(エラー置換) — オンにすると、関数が無効値 (NaN / Inf) を返した時にError Valueで置換します (例:log(-1)のような定義域外入力) - Error Value:
errval(置換値) —Replace Errorsオン時に出力する置換値 (デフォルト 0)
実践アイデア 💡
Example 1: HDRの対数トーン圧縮 🌅
Movie File In TOP (EXR) → Function TOP (log10) → Math TOP (gain/offset) → 出力モニタ
高ダイナミックレンジの EXR テクスチャに Function TOP で log10 を適用して輝度を圧縮し、暗部と明部のコントラストを 8-bit ディスプレイで扱える範囲に整える基本フロー。
- Movie File In TOP で EXR / HDR フォーマットの画像を読み込む
- Function TOP を接続し、
Function RGBをlog10(x) Log Base 10に設定 Replace Errorsをオンにし、輝度ゼロのピクセルが-Infにならないようにする- 後段の Math TOP で gain / offset を調整して 0-1 範囲に正規化
Example 2: 正弦波で周期ゆらぎ生成 🌊
Ramp TOP (X 方向) → Function TOP (sin, Angle Units = Cycles) → Composite TOP
Ramp TOP の連続値に対し Function TOP で sin を適用し、Angle Units を Cycles に設定することで 0-1 範囲の入力から周期的な明暗パターンを生成する例。
- Ramp TOP を作成し X 方向に 0 → 1 のグラデーションを敷く
- Function TOP を接続して
Function RGBAをsin(x) Sineに設定 Angle UnitsをCyclesにすると、入力 0-1 が sin の 1 周期にマップされる- 後段で時間オフセットを加算するとアニメーションする波模様になる
Example 3: 音響スペクトルdB変換 🎚️
Audio Spectrum CHOP → CHOP to TOP → Function TOP (Amplitude to dB) → 可視化
Audio Spectrum CHOP の振幅スペクトルを CHOP to TOP で画像化し、Function TOP の Amplitude to dB 関数で線形振幅をデシベル値に変換することで、人間の聴覚特性に近いスケールでスペクトルを表示する流れ。
- Audio Spectrum CHOP で音声入力の周波数スペクトルを取得
- CHOP to TOP で振幅値を 1 行のテクスチャに変換
- Function TOP の
Function RをAmplitude to dBに設定 - 後段でカラーマップを適用して可視化に流す
関連オペレータ 🔗
類似機能OP 🔍
- Math TOP — 加減乗除・スケーリングなど線形演算をピクセル単位で行う
- Threshold TOP — 閾値判定で 2 値化
- Lookup TOP — ルックアップテーブルで任意の値変換
組み合わせ推奨OP 🔄
- Level TOP — 後段で gamma / brightness / contrast を微調整
- Composite TOP — Function TOP の出力を別画像と合成
- Channel Mix TOP — Function 適用後に R / G / B チャンネルを再マッピング
- Add TOP — 別ソース画像と加算合成
- Luma Level TOP — 輝度ベースのレベル調整を後段に追加
前処理・後処理TOP 🎯
Info CHOP情報 📊
Function TOPは Info CHOP による詳細情報取得に対応しています。
TOP固有情報 🖼️
resx: TOP の出力解像度 X (ピクセル単位)resy: TOP の出力解像度 Y (ピクセル単位)aspectx: アスペクト比 Xaspecty: アスペクト比 Ydepth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 出力が NaN / Inf になる (黒抜けや真っ白になる)
✅ Solution:
Replace Errorsをオンにし、Error Valueに安全な代替値 (例: 0) を設定- 前段の Math TOP や Threshold TOP で入力値域を関数の定義域に収めるクランプを行う
log10やsqrtに負の値が入る場合はabs(x)を前段で適用
❌ Problem: 三角関数の出力が想定と異なる (周期がズレる・振幅が極端)
✅ Solution:
Angle UnitsがDegrees/Radians/Cyclesのどれに設定されているか確認- 入力値域が 0-1 のテクスチャを正弦波 1 周期にマップしたい場合は
Cyclesを選択 - 前段で
Math TOPの Multiply / Add を使い、入力値を意図した角度範囲にプリスケール
❌ Problem: 整数フォーマットの入力値が変換されず素通りする
✅ Solution:
Re-Range Integers 1/Re-Range Integers 2は整数フォーマットでのみ有効で、浮動小数フォーマットでは無視される点に注意- Common Page の
Pixel Formatを16-bit float以上に変更し、関数を浮動小数精度で適用 - 整数フォーマットのまま処理したい場合は
rerange2でスケール、rerange1でシフトを設定
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

