
概要 📖 – 属性値に三角関数を適用
Trig POPは、入力ジオメトリの属性値に対して正弦・余弦・正接などの三角関数を適用し、角度単位を変換しながら結果を出力する POPです。点・頂点・プリミティブの各属性クラスごとに、入力の角度単位と出力の角度単位を個別に指定でき、波状の動きや方向計算を 1 ノードで表現します。
主な用途 🎯
- ポイント位置 (P) や色 (Cd) などの属性値への正弦・余弦・正接の適用
- 角度値の単位変換 (Degrees / Radians / Cycles) と相互変換
- 逆三角関数 (asin / acos / atan) による角度の逆算
- atan2 を用いた 2 入力からの方向角の算出
- 双曲線関数 (sinh / cosh / tanh) を使った非線形カーブの生成
データフロー 🔄
入力: POP ジオメトリ(属性付き)
↓
属性スコープと三角関数設定に基づく演算処理
↓
出力: 同形状ジオメトリ(演算後の属性値)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Trigonometry Page 📋
属性クラス .attrclass 🧱
演算対象とする属性の所属クラス (点・頂点・面) を指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Point | .point |
ポイント属性 (位置 P や色 Cd 等、頂点共有データ) を対象に演算 |
| Vertex | .vertex |
頂点属性 (Tex 等、プリミティブ別に持つデータ) を対象に演算 |
| Primitive | .primitive |
プリミティブ属性 (面単位で持つ法線や色 等) を対象に演算 |
グループとスコープ 🎯
Group .group 🗂️Group (グループ名) — 入力にグループがある場合、ここで名前を指定するとそのグループ内の要素のみを対象に演算します。空欄なら全体に適用。
Input Attribute Scope A .inputattrscopea 🅰️Input Attribute Scope A (入力属性スコープ A) — 関数の引数 A に渡す入力属性または属性コンポーネントを指定します。多くの単項関数 (sin など) はこの A のみを使用します。
Input Attribute Scope B .inputattrscopeb 🅱️Input Attribute Scope B (入力属性スコープ B) — 関数の引数 B に渡す入力属性または属性コンポーネントを指定します。atan2(A,B) など 2 引数の関数で使用します。
Function 演算 .operation 🎛️
属性値に適用する三角関数を選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
演算を適用しない (素通し) |
| cos(A) | .cos |
余弦 |
| sin(A) | .sin |
正弦 |
| tan(A) | .tan |
正接 |
| acos(A) | .acos |
逆余弦 |
| asin(A) | .asin |
逆正弦 |
| atan(A) | .atan |
逆正接 |
| atan2(A,B) | .atan2 |
2 引数の逆正接 (A と B から方向角を算出) |
| cosh(A) | .cosh |
双曲線余弦 |
| sinh(A) | .sinh |
双曲線正弦 |
| tanh(A) | .tanh |
双曲線正接 |
入力角度単位 .fromunit 📐
演算が角度を引数に取る場合の入力角度単位を指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .deg |
度単位 (0〜360 で 1 回転) |
| Radians | .rad |
ラジアン単位 (0〜2π で 1 回転) |
| Cycles | .cycle |
サイクル単位 (0〜1 で 1 回転) |
出力角度単位 .tounit 📐
演算結果が角度になる場合の出力角度単位を指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .deg |
度単位で出力 |
| Radians | .rad |
ラジアン単位で出力 |
| Cycles | .cycle |
サイクル単位で出力 |
出力属性スコープ .outputattrscope 📤
演算結果を書き出す出力属性の指定
| 項目 | 内部名 | 説明 |
|---|---|---|
| P | .P |
ポイント位置 (3 成分 float) |
| N | .N |
法線ベクトル (3 成分 float) |
| Color | .Color |
色 (RGBA 4 成分) |
| Color.rgb | .Color.rgb |
色の RGB 3 成分のみ (アルファ除外) |
| Tex | .Tex |
テクスチャ座標 (UV) |
| PointScale | .PointScale |
ポイントスケール属性 |
| LineWidth | .LineWidth |
ラインの太さ属性 |
出力属性オーバーライド 🛡️
出力属性の型・コンポーネント数・デフォルト値を手動で上書き
Override Automatic Attribute .overrideautoattr 🔓Override Automatic Attribute (自動属性上書き) — オンにすると、入力とパラメータから自動決定される属性の種類を、以下の Attribute Type / Components で手動指定できます。
Attribute Type .attrtype 🏷️Attribute Type (属性型) — 出力属性のデータ型を選択します (デフォルトは float)。
- float / double (単精度 / 倍精度浮動小数点)
- int / uint (整数 / 符号なし整数)
- Color / Color (double) (色、float / double 版)
- Direction / Direction (double) (方向ベクトル、float / double 版)
Components .attrnumcomps 🧮Components (コンポーネント数) — 新規カスタム属性のコンポーネント数 (1〜4) を指定します。
Default Value .attrdefaultval 🎁Default Value (デフォルト値) — 演算で算出できないケースに使用される属性の初期値を、コンポーネントごとに最大 4 個まで指定します。
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
- 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用
Free Extra GPU Memory .freeextragpumem 🧠
蓄積した GPU メモリの解放:
- Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
- 用途: 大規模パーティクル系で出力サイズが大きく変動した後、未使用メモリを返却して VRAM を節約
Delete Input Attributes .delinputattrs 🗑️
出力属性の絞り込みパターン:
- Delete Input Attributes パターン: 出力に残したい属性名のパターン (例:
P N Cd) を指定。指定外の属性は破棄される - 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約
実践アイデア 💡
Example 1: ポイントを波状に揺らす 🌊
Grid POP → Trig POP (sin on P + From Radians) → Render TOP
グリッド状に並んだポイント位置 (P) に対し Trig POP の sin 演算を適用し、X 座標を入力とした正弦波で Y 座標を持ち上げることで、布や水面のような波打つ動きを生成する基本フロー。時間項を加えればアニメーションも可能。
- Grid POP で平面状のポイント群を生成
- Trig POP の Attribute Class を Point、Input Attribute Scope A に
Pの X 成分を指定 - Operation を sin、From Angle Units を Radians に設定
- Output Attribute Scope を
Pの Y 成分にして波状の高低差を生成
Example 2: 2 軸から方向角を求める 🧭
In POP → Trig POP (atan2 on A,B) → Render TOP
ポイント属性の 2 成分 (例: 速度ベクトルの X と Z) を入力 A・B に渡し、Trig POP の atan2(A,B) 演算で各ポイントの進行方向角を算出する例。パーティクルの向きや色相マッピングへの応用に使える。
- In POP で速度や位置の属性を持つジオメトリを受け取る
- Trig POP の Operation を atan2(A,B) に設定
- Input Attribute Scope A / B にそれぞれ方向計算に使う 2 成分を指定し、To Angle Units を Degrees にして方向角を出力
Example 3: 色相を周期的に変化 🎨
Particle POP → Trig POP (cos on Cd) → Render TOP
パーティクルの色属性 (Color) に cos 演算を適用し、入力値の周期に応じて RGB 成分を滑らかに往復させることで、虹色のグラデーション演出やアンビエントなカラーアニメーションを作る用途。
- Particle POP で動的なポイント群を生成
- Trig POP の Output Attribute Scope を
Color.rgb、Operation を cos に設定 - From Angle Units を Cycles にして 0〜1 の入力で 1 周期の色変化を得る
関連オペレータ 🔗
類似機能OP 🔍
- Math POP — 加算・乗算・関数を含む汎用的な属性演算
- Math Combine POP — 複数入力属性の数学的合成
- Math Mix POP — 重み付きで複数属性をブレンド
- Normalize POP — ベクトル属性の単位化に特化
組み合わせ推奨OP 🔄
- Attribute POP — 新規属性を追加してから Trig POP で角度演算
- Noise POP — ノイズで生成した値を Trig POP で波状に変換
- Math POP — Trig POP の前後でスケール・オフセットを調整
- ReRange POP — 三角関数の出力を別の値域にリマップ
前処理・後処理POP 🎯
Info情報 📊
POP ファミリには専用の Info OP が存在しません。Trig POP の出力情報は下流の Null POP で値を確認したり、Python から POP クラスメンバーで取得します。
POP固有情報 ✨
num_verts: POP に含まれる頂点 (vertex) 数num_points: POP に含まれるポイント数num_prims: POP に含まれるプリミティブ数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)cook_start_time: 最後のクック開始時刻 (ミリ秒)cook_end_time: 最後のクック終了時刻 (ミリ秒)cooked_this_frame: 現フレームでクックされたか (0 / 1)warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 三角関数の結果が想定と違う
✅ Solution:
From Angle Unitsが入力データの単位 (Degrees / Radians / Cycles) と合っているか確認- 出力が角度になる関数 (asin / acos / atan) では
To Angle Unitsも確認 - 上流に Math POP を挟んで入力値を適切な範囲に整える
❌ Problem: 演算結果が反映されない
✅ Solution:
Attribute Classが対象属性のクラス (Point / Vertex / Primitive) と一致しているか確認Input Attribute Scope A/Output Attribute Scopeに対象属性名 (P / N / Color 等) が含まれているか確認- 上流に同名属性が存在しない場合は Attribute POP で先に属性を追加
❌ Problem: atan2 の出力が不正
✅ Solution:
Operationを atan2(A,B) にしたときInput Attribute Scope Bが正しく指定されているか確認- A・B の成分数が揃っているか確認 (片方だけ多成分だと意図しない結果になる)
- 出力角度の単位を
To Angle Unitsで明示し下流での解釈と揃える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

