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

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

Function TOP で画素値に数学関数を適用する図

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

概要 📖 – 画素値に数学関数を適用

Function TOPは、入力画像の各ピクセルに対数・三角関数・累乗などの数学関数を 1 つ適用し、ピクセル単位で値を変換する TOPです。GLSL を書かずに GUI 設定だけでピクセル単位の数式演算が実現でき、RGBA チャンネルごとに別の関数を割り当てた加工にも対応します。

主な用途 🎯

  • HDR 画像の対数圧縮log10ln でトーンマッピングの前処理)
  • 三角関数による画素値の周期変調sincos でゆらぎ・波打ちパターンを生成)
  • 音響データの dB ⇔ 振幅 単位変換Amplitude to dBdB to Amplitude
  • 累乗・指数によるガンマ補正・カーブ整形powexp で諧調を補正)
  • 絶対値・符号取得など値の正規化abssign で前処理)

データフロー 🔄

入力: 任意の TOP テクスチャ

ピクセルごとに選択した関数 (sin / log / exp 等) を RGBA 各チャンネルへ適用

出力: 変換後テクスチャ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 振幅 → デシベル変換

※ 注意: 入力値が関数の定義域を外れた場合 (例: log10sqrt に負の値、acosasin に [-1, 1] 範囲外の値)、出力は NaN または Inf になります。Replace Errors をオンにして Error Value に置換値を設定するか、前段で値域をクランプしてください。

引用元: 公式 docs

チャンネル別関数 .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 ディスプレイで扱える範囲に整える基本フロー。

  1. Movie File In TOP で EXR / HDR フォーマットの画像を読み込む
  2. Function TOP を接続し、Function RGBlog10(x) Log Base 10 に設定
  3. Replace Errors をオンにし、輝度ゼロのピクセルが -Inf にならないようにする
  4. 後段の 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 範囲の入力から周期的な明暗パターンを生成する例。

  1. Ramp TOP を作成し X 方向に 0 → 1 のグラデーションを敷く
  2. Function TOP を接続して Function RGBAsin(x) Sine に設定
  3. Angle UnitsCycles にすると、入力 0-1 が sin の 1 周期にマップされる
  4. 後段で時間オフセットを加算するとアニメーションする波模様になる

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 関数で線形振幅をデシベル値に変換することで、人間の聴覚特性に近いスケールでスペクトルを表示する流れ。

  1. Audio Spectrum CHOP で音声入力の周波数スペクトルを取得
  2. CHOP to TOP で振幅値を 1 行のテクスチャに変換
  3. Function TOP の Function RAmplitude to dB に設定
  4. 後段でカラーマップを適用して可視化に流す

関連オペレータ 🔗

類似機能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: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 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 TOPThreshold TOP で入力値域を関数の定義域に収めるクランプを行う
  • log10sqrt に負の値が入る場合は abs(x) を前段で適用

❌ Problem: 三角関数の出力が想定と異なる (周期がズレる・振幅が極端)
✅ Solution:

  • Angle UnitsDegrees / Radians / Cycles のどれに設定されているか確認
  • 入力値域が 0-1 のテクスチャを正弦波 1 周期にマップしたい場合は Cycles を選択
  • 前段で Math TOP の Multiply / Add を使い、入力値を意図した角度範囲にプリスケール

❌ Problem: 整数フォーマットの入力値が変換されず素通りする
✅ Solution:

  • Re-Range Integers 1 / Re-Range Integers 2 は整数フォーマットでのみ有効で、浮動小数フォーマットでは無視される点に注意
  • Common Page の Pixel Format16-bit float 以上に変更し、関数を浮動小数精度で適用
  • 整数フォーマットのまま処理したい場合は rerange2 でスケール、rerange1 でシフトを設定

参考資料 📚

その他 🔗

公式リソース 📖

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