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

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

Fillet SOP のプリミティブ間フィレット生成機能を示す図

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

概要 📖 – 曲線・面を丸く繋ぐ

Fillet SOPは、2 つのプリミティブ間にフィレット (丸み・円弧型) を構築し、CAD 的な角取りや滑らかな遷移面を生成する SOPです。Freeform / Convex / Circular の 3 種類のフィレットタイプと、Left UV / Right UV による開始位置や LR Width / LR Scale による形状の細かな制御に対応し、Match Input to Fillets で継ぎ目のないシームレス接続も実現します。

主な用途 🎯

  • 2 つのプリミティブ間に丸みフィレットを生成し、CAD 的な角取り (round-off) を 1 ノードで作成して曲線・面の交差部を滑らかに繋ぐ
  • Circular Arc Fillet による円弧型フィレットで、入力プリミティブ間の距離と接線から半径を自動算出し、最小設定で round fillet を作成
  • Match Input to Fillets による継ぎ目なし接続で、入力プリミティブとフィレットの isoparm を連続化し、レンダリング時のアーティファクトを抑えた統合サーフェスを構築
  • NURBS / Bezier プリミティブ間の spline フィレット生成で、Primitive Type と Order を統一した自動補間フィレットを作り、CAD 用の高品質曲面を量産
  • Cut Primitives による既存プリミティブのトリミングで、フィレット開始位置を境に入力プリミティブを切り詰めて自然な接合面を実現
  • Groups of N Primitives モードによる連続フィレットで、複数プリミティブを N 個ずつ束ねて一括フィレット化し、繰り返しパターンの round 仕上げを 1 ノードで完了

データフロー 🔄

入力: 2 個以上のプリミティブ (NURBS / Bezier の曲線または面)

Group で対象プリミティブを指定

Fillet モード (All Primitives / Groups of N Primitives) と Fillet Type (Freeform / Convex / Circular) を選択

Left UV / Right UV / LR Width / LR Scale で形状を制御

出力: 入力プリミティブ間に挿入された丸み・円弧型フィレットサーフェス

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

対象プリミティブ 🎯

Group .group 🎯
Group (対象プリミティブのパターン) — フィレット対象とするプリミティブの Pattern 文字列
– 空欄の場合は入力全プリミティブを対象とする
– 例: 0-3 はプリミティブ番号 0〜3 を対象、*.0 は全プリミティブの 0 番目プロファイルを対象
Pattern Matching 構文に従う

フィレット適用範囲 .fillet 🔄

プリミティブ全体をひとまとめにフィレットするか、N 個単位で繰り返しフィレットするかを切り替えるメニューパラメータ

項目 内部名 説明
All Primitives .all 入力全プリミティブをまとめてフィレット対象とする
Groups of N Primitives .group N で指定した数のプリミティブごとに区切ってフィレットを繰り返す (例: 6 プリミティブ + N=2 → 0-1 / 2-3 / 4-5 の 3 組)

繰返し単位と接続 🔢

N .inc 🔢
N (繰返し単位プリミティブ数) — FilletGroups of N Primitives のときに使用する 1 グループあたりのプリミティブ数
N=2 なら 2 プリミティブごとに 1 フィレット、N=3 なら 3 プリミティブごと、というように繰り返しパターンを決定

Wrap Last to First .loop 🔁
Wrap Last to First (末尾と先頭をつなぐ) — オンにするとフィレット系列の最後のプリミティブの末端と最初のプリミティブの始端を接続
– プリミティブが 1 つだけの場合は、そのプリミティブの両端同士をフィレットで閉じる動作になる
– 閉じた輪状のフィレット連鎖を作りたいときに使用

方向の指定 .dir 🧭

入力がサーフェスの場合に、フィレットを行うパラメトリック方向 (U または V) を選択するメニューパラメータ

項目 内部名 説明
in U .ujoin U 方向 (列方向) でフィレットを実行
in V .vjoin V 方向 (行方向) でフィレットを実行

※ 注意: Direction は入力がサーフェス (NURBS / Bezier の面) のときのみ意味を持ちます。曲線が入力の場合はこの設定は無視されます。

引用元: 公式 docs

フィレット種類の選択 .fillettype

フィレットの種類を 3 種類から選択するメニューパラメータ

項目 内部名 説明
Freeform .freeform フィレット形状を Left UV / Right UV / LR Width / LR Scale / LR Offset で完全自由指定するモード
Convex .convex 凸形状を保証するため必要に応じて Scale 値を負反転するモード
Circular .circular 入力プリミティブ間の距離と接線から半径を自動算出する円弧型フィレット。Tangent Scale は符号のみが参照され大きさは無視される (Bridge SOP の Circular Arc Fillet と同様)。法線の正負を意識せずに済む利点あり

出力プリミティブ種類 .primtype 🧬

生成されるフィレットプリミティブの種類を選択するメニューパラメータ

項目 内部名 説明
Input Geometry Type .input 入力プリミティブと同じ種類のフィレットを生成。種類が混在する場合は最も一般的な型 (NURBS > Bezier > Polygon の順) が採用される
NURBS .nurbs 指定 Order で NURBS フィレットを生成
Bezier .bezier 指定 Order で Bezier フィレットを生成

spline 次数 🧮

Order .order 🧮
Order (spline 次数) — フィレットを構築する spline の次数
– 大きいほど滑らかな曲面になるが、内部の制御点が増えて計算負荷も上がる
– 一般的に 3 (キュービック) ~ 4 が標準

開始位置の指定 📍

Left UV .leftuv ⬅️
Left UV (左側プリミティブ上の開始点) — 各左プリミティブ上でフィレットを開始するパラメトリック点
0.0 で始端、1.0 で終端、中間値で内部の任意位置を指定

Right UV .rightuv ➡️
Right UV (右側プリミティブ上の開始点) — 各右プリミティブ上でフィレットを開始するパラメトリック点
– 左右の UV を独立に調整することで、非対称なフィレット形状を作れる

幅とスケール 📐

LR Width .lrwidth 📏
LR Width (左右の幅比率) — 2 値で、第 1 値が左プリミティブをフィレットがどの程度占有するかの比率、第 2 値が右プリミティブ側の比率
– 大きいほどフィレットが入力プリミティブを深く覆い、滑らかに長く伸びる形状になる

LR Scale .lrscale 📐
LR Scale (左右の接線スケール) — フィレット最初と最後のセグメントの方向と倍率を制御
– Circular モードでは 符号 (正負) のみが参照され、フィレットがどちら側に膨らむかが決まる (大きさは無視)

LR Offset .lroffset 📊
LR Offset (左右のオフセット) — フィレット最初と最後のセグメントの位置をずらす値
– フィレット端点を入力プリミティブの接線方向にスライドさせ、接続位置を微調整する用途に使用

仕上げ処理 ✨

Match Input to Fillets .seamless 🔗
Match Input to Fillets (継ぎ目なし接続) — オンにすると入力プリミティブを修正し、isoparm がプリミティブからフィレットを経由して反対プリミティブまで連続して見えるようにする
– さらに入力プリミティブをフィレットと同じ種類・同じ Order に格上げ (promote) するため、レンダリング時のアーティファクトを最小限に抑制
– 代償として出力ジオメトリの精細度 (refined geometry) が増えるため、ポイント数・プリミティブ数は増加する

Cut Primitives .cut ✂️
Cut Primitives (フィレット端でプリミティブを切る) — オンにするとフィレット開始位置で入力プリミティブを切り詰める
– フィレットと入力プリミティブが重複しないクリーンな接合を作りたいときに使用


実践アイデア 💡

Example 1: 2つの円を丸く繋ぐ 🔵

Circle SOP × 2 (上下に配置) → Merge SOP → Fillet SOP (Fillet=All Primitives, Fillet Type=Freeform, Order=3) → Out SOP

上下に配置した 2 つの円プロファイルを Fillet SOP で滑らかに接続し、Freeform モードでキュービック (Order=3) の補間フィレットを作る基本パターンです。Bridge SOP の skin と異なり、Fillet SOP はプリミティブ間の局所的な丸み接続に特化しており、Left UV / Right UV で開始位置を細かく調整できます。

  1. Circle SOP を 2 個作成し、それぞれ Center Y05 に設定して上下に配置
  2. 両 Circle SOP を Merge SOP で 1 入力にまとめる
  3. Merge SOP の出力を Fillet SOP に接続
  4. Fillet SOP の FilletAll Primitives に、Fillet TypeFreeform に設定
  5. Order3 (キュービック) に設定し、LR WidthLR Scale を調整して滑らかなフィレットになるか Geometry Viewer で確認

Example 2: 円弧フィレット作成 🌀

Sphere SOP + Box SOP → 各々のエッジを Profile SOP / Carve SOP で抽出 → Merge SOP → Fillet SOP (Fillet Type=Circular, LR Scale の符号で方向制御, Cut Primitives=ON) → Material SOP

独立した 2 つのプリミティブの境界曲線を抽出し、Fillet SOP の Circular モードで半径自動算出の円弧型フィレットを作る用途です。Circular Arc Fillet は LR Scale の符号のみを参照して膨らみ方向を決め、半径は入力曲線間の距離と接線から自動算出されるため、CAD 的な round fillet を最小設定で作れます。

  1. Sphere SOP と Box SOP を配置し、フィレットしたいエッジ曲線を Profile SOP または Carve SOP で抽出
  2. 抽出した 2 本の境界曲線を Merge SOP で 1 入力にまとめる
  3. Merge SOP の出力を Fillet SOP に接続
  4. Fillet TypeCircular に切り替え
  5. LR Scale X / Y / Z の 符号でフィレットの膨らむ側を制御 (大きさは無視される)
  6. Cut Primitives をオンにして元プリミティブをフィレット開始位置でトリミングし、Material SOP に渡して陰影で確認

Example 3: 継ぎ目なし接続 🔗

NURBS Curve A + B → Merge SOP → Fillet SOP (Match Input to Fillets=ON, Primitive Type=NURBS, Order=4) → Refine SOP → Render TOP

2 本の NURBS 曲線を Fillet SOP で接続する際に Match Input to Fillets をオンにし、入力曲線とフィレットの isoparm を連続化することで、レンダリング時のアーティファクトを抑えたシームレスな統合サーフェスを構築します。後段に Refine SOP を入れて Unrefine オプションで複雑度を抑えるのが定石。

  1. 2 本の NURBS 曲線を作成し、Merge SOP で 1 入力にまとめる
  2. Fillet SOP の Primitive TypeNURBSOrder4 に設定
  3. Match Input to Fillets をオンにして入力曲線とフィレットを同種類・同 Order に揃える
  4. 出力ジオメトリが増えるため、後段に Refine SOP を入れて Unrefine オプションで複雑度を低減
  5. Render TOP で陰影付きレンダリングを行い、接続部に継ぎ目が出ていないことを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Bridge SOP — 2 つ以上のプロファイル間に skin surface を張る (Fillet は端点間の丸み、Bridge は全体スキン補間)
  • Skin SOP — 並んだ複数 open curve / face から skin を生成 (Fillet は端点接続、Skin は全曲線統合)

組み合わせ推奨OP 🔄

  • Profile SOP — サーフェスから profile curve を抽出して Fillet の入力に渡す
  • Carve SOP — 曲線・サーフェスの一部を切り出してフィレット対象の rails を作成
  • Merge SOP — 複数の独立プリミティブを 1 入力にまとめてから Fillet に渡す前処理
  • Refine SOP — Match Input でジオメトリが増えた後段で複雑度を Unrefine オプションで簡素化
  • Convert SOP — Polygon 入力を NURBS / Bezier に変換してから Fillet で丸めを掛ける前処理

前処理・後処理SOP 🎯


Info CHOP情報 📊

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

ジオメトリ統計 📐

  • num_points: この SOP に含まれるポイント数
  • num_prims: この SOP に含まれるプリミティブ数
  • num_particles: この SOP に含まれるパーティクル数

GPU 転送タイミング 🎮

  • last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)
  • last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: 直近のクック所要時間 (ミリ秒)
  • cook_frame: このオペレータが最後にクックされたフレーム番号
  • warnings: このオペレータの警告数
  • errors: このオペレータのエラー数

クック統計 ⏱️

  • total_cooks: total_cooks — プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: cook_time — 直近のクック所要時間 (ミリ秒)
  • cook_frame: cook_frame — このオペレータが最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: フィレットが生成されない・期待通りに繋がらない
✅ Solution:

  • 入力プリミティブが NURBS / Bezier であることを確認 — Polygon は spline フィレットの対象にならないため、前段で Convert SOP で NURBS / Bezier に変換
  • Group パラメータで対象プリミティブを明示 — 全プリミティブを対象にしたい場合は空欄、特定プリミティブのみなら Pattern 文字列で指定
  • プリミティブの順序を確認 — Fillet SOP は連続するプリミティブ同士をフィレットするため、必要に応じ前段の Merge SOP で順序を整える

❌ Problem: Circular Arc Fillet が膨らみ方向に効かない
✅ Solution:

  • Circular モードでは LR Scale符号 (正負) のみが参照され、大きさは無視される仕様を確認
  • 膨らむ方向を変えたい場合は LR Scale X / Y / Z の符号を反転する
  • 半径自体は入力プリミティブ間の距離と接線から自動算出されるため手動指定は不可 — 半径を変えたい場合は入力プリミティブ側の配置を調整する

❌ Problem: フィレットが過剰に膨らむ・歪む
✅ Solution:

  • LR Width の 2 値を小さめ (例: 0.2 / 0.2) に下げて、フィレットが入力プリミティブを占有する割合を減らす
  • LR Scale の値を 1.0 付近から少しずつ調整し、接続部の膨らみをコントロール
  • Fillet TypeConvex に切り替えると、Scale 値が必要に応じて自動で負反転され凸形状が保証される

❌ Problem: Match Input で出力ジオメトリが重くなる
✅ Solution:

  • 後段に Refine SOP を追加し、Unrefine オプションで U 値を Fillet の Order 付近に設定して複雑度を削減
  • Order34 程度に抑え、過剰な高次 spline を避ける
  • 本当に isoparm 連続化が必要か再検討 — レンダリング時のアーティファクトが目立たない場面では Match Input to Fillets をオフにして軽量化

参考資料 📚

その他 🔗

公式リソース 📖

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