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

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

Iso Surface SOP の等値面生成機能を示す図

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

概要 📖 – 数式から3D等値面を生成

Iso Surface SOPは、陰関数 f(x,y,z)=0 で定義した3次元の等値面をポリゴンメッシュとして出力する SOPです。Minimum / Maximum Bound で評価範囲を、Divisions で解像度を決め、Implicit Function に書いた数式から代数的・解析的な3D曲面を直接構築します。

主な用途 🎯

  • 陰関数 (implicit function) で定義したアイソサーフェスのポリゴン化
  • 楕円体・双曲放物面 (サドル) などの代数的曲面の生成
  • プロシージャルなブロブ形状や有機的ジオメトリのスケッチ
  • 数式可視化や教育コンテンツ向けの数学曲面の表示
  • Metaball SOP の代替として任意の連続関数からサーフェスを構築

データフロー 🔄

入力: なし (パラメータの数式のみ)

指定境界内を Divisions で離散化

各セルで陰関数 f(x,y,z)=0 のアイソサーフェスをポリゴン化

出力: ポイントとポリゴンを持つ SOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

陰関数定義関連パラメータ 🧮

Implicit Function .func 🧮
Implicit Function (陰関数式) — アイソサーフェスを構築する数式を Python 式として記述する
me.curPos.x / me.curPos.y / me.curPos.z で評価点の座標を参照する
– 例 1 (双曲放物面 / サドル形状): (me.curPos.x**2)/(4*4) - (me.curPos.y**2)/(3*3) + me.curPos.z
– 例 2 (楕円体): (me.curPos.x**2)/0.1 + (me.curPos.y**2)/2 + (me.curPos.z**2)/6 - 1

境界関連パラメータ 📐

Minimum Bound .min 🔻
Minimum Bound (最小境界) — アイソサーフェスを表示するクリッピング平面の最小側の境界を決定する
– X / Y / Z 各軸方向の評価開始位置を指定する

  • X 軸方向の最小値
  • Y 軸方向の最小値
  • Z 軸方向の最小値

Maximum Bound .max 🔺
Maximum Bound (最大境界) — アイソサーフェス表示のクリッピング平面の最大側の境界を決定する
– X / Y / Z 各軸方向の評価終了位置を指定する

  • X 軸方向の最大値
  • Y 軸方向の最大値
  • Z 軸方向の最大値

解像度関連パラメータ 🧱

Divisions .divs 🔢
Divisions (分割数) — X / Y / Z 各方向のアイソサーフェスポリゴンの密度・解像度を指定する
– 値が大きいほど滑らかな曲面になるが、ポリゴン数とクック時間が増加する

  • X 軸方向の分割数
  • Y 軸方向の分割数
  • Z 軸方向の分割数

法線関連パラメータ 🧭

Compute Normals .normals 🧭
Compute Normals (法線計算) — 生成したアイソサーフェスに法線属性を付与する
– オフの場合、後段で法線を別途計算する必要がある (シェーディングが正しく出ない原因になる)


実践アイデア 💡

Example 1: 楕円体の等値面を生成 🌐

Iso Surface SOP (Implicit Function=楕円体式, Divisions=40 40 40) → Geometry COMP → Render TOP

Iso Surface SOP 単体で楕円体の陰関数を評価し、Geometry COMP に渡してレンダリングする最小構成。数式可視化や3D形状の試作の起点として使えます。

  1. Iso Surface SOP を配置する
  2. Implicit Function(me.curPos.x**2)/0.1 + (me.curPos.y**2)/2 + (me.curPos.z**2)/6 - 1 を入力
  3. Minimum Bound-3 -3 -3Maximum Bound3 3 3 に設定
  4. Divisions40 40 40 に設定して曲面の滑らかさを確保
  5. Geometry COMP に接続し Render TOP で楕円体が描画されることを確認

Example 2: サドル曲面を作って変形 🎢

Iso Surface SOP (双曲放物面式) → Transform SOP → Material SOP → Geometry COMP

双曲放物面 (サドル) の陰関数からアイソサーフェスを生成し、Transform SOP で位置・スケールを調整したうえで Material SOP でマテリアルを割り当てるパイプライン。代数曲面を素材にしたビジュアルの起点として有効です。

  1. Iso Surface SOP の Implicit Function(me.curPos.x**2)/(4*4) - (me.curPos.y**2)/(3*3) + me.curPos.z を入力
  2. Minimum Bound / Maximum Bound でサドル全体が収まる範囲を設定
  3. 後段に Transform SOP を配置して位置・回転・スケールを補正
  4. Material SOP でレンダリング用マテリアルを割り当て、Geometry COMP に接続
  5. Render TOP でサドル形状が陰影付きで表示されることを確認

Example 3: 有機的なブロブ生成 🫧

Iso Surface SOP (複数の球の合成式) → Facet SOP (法線スムーズ化) → Geometry COMP

複数のガウシアン的な項を合算した陰関数を Iso Surface SOP に与え、Metaball SOP の代替として有機的なブロブ形状を生成する例。任意の連続関数を扱えるため、Metaball では表現しにくい形状にも展開しやすいのが利点です。

  1. Implicit Function に 2 つ以上の球関数を足した式 (例: 1/((me.curPos.x-1)**2 + me.curPos.y**2 + me.curPos.z**2 + 0.1) + 1/((me.curPos.x+1)**2 + me.curPos.y**2 + me.curPos.z**2 + 0.1) - 1.5) を入力
  2. Divisions60 60 60 程度に上げて滑らかな結合面を確保
  3. 後段に Facet SOP を配置し法線をスムーズ化
  4. Geometry COMP に接続してブロブ形状をレンダリングし、項を増減して形状変化を確認

関連オペレータ 🔗

類似機能OP 🔍

  • Metaball SOP — ガウス分布の暗黙的曲面で球状のブロブを合成する SOP
  • Particle SOP — 粒子シミュレーションから派生形状を生成 (陰関数ベースではないが代替起点として)

組み合わせ推奨OP 🔄

  • Transform SOP — Iso Surface で生成した曲面の位置・回転・スケールを後段で補正
  • Facet SOP — アイソサーフェスのポリゴン法線をスムーズ化または再計算
  • Convert SOP — 出力ポリゴンを NURBS / Bezier 等別表現に変換
  • Geometry COMP — 生成したアイソサーフェスをレンダリングパイプラインに投入

前処理・後処理SOP 🎯


Info CHOP情報 📊

Iso Surface 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 — 直近のクック所要時間 (ミリ秒)。Divisions を上げると増加する
  • cook_frame: cook_frame — このオペレータが最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: アイソサーフェスがまったく表示されない
✅ Solution:

  • Implicit Function に書いた数式が指定した境界内で 0 を横切る点を持つか確認 (符号変化がないと等値面は生成されない)
  • Minimum Bound / Maximum Bound を広げて、曲面が評価範囲外に出ていないか確認
  • Divisions が極端に小さい場合は曲面が離散セルに収まらず描画されない — 各軸 20 以上から試す

❌ Problem: 曲面がカクカク (低ポリ) になる
✅ Solution:

  • Divisions を X / Y / Z 各方向で増やしてセル密度を上げる (例: 20 → 60)
  • 後段に Facet SOP を配置し法線をスムーズ化する
  • Bounds を実際の曲面サイズに合わせて絞り込み、同じ Divisions でも単位セルを細かくする

❌ Problem: シェーディングがおかしい / 真っ黒になる
✅ Solution:

  • Compute Normals がオンになっているか確認 (オフだと法線属性が無く、シェーダが正しく光を計算できない)
  • 後段に Facet SOP を入れて法線を再計算する
  • Material 側の Two-Sided Lighting を有効にして裏面の暗黒化を回避する

❌ Problem: クック時間が長い / フレームレートが落ちる
✅ Solution:

  • Divisions を必要最小限に下げ、見た目に影響しない範囲で評価点数を削減する
  • Minimum Bound / Maximum Bound を曲面が実際に存在する領域に絞り、無駄な評価セルを減らす
  • 後段に Polyreduce SOP を入れてポリゴン数を間引き、下流の負荷も軽減する

参考資料 📚

その他 🔗

公式リソース 📖

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