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

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

Subdivide SOP のポリゴン細分化機能を示す図

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

概要 📖 – ポリゴンを滑らかに細分化

Subdivide SOPは、低ポリのポリゴンメッシュを反復的に分割して滑らかな曲面に変換する SOPです。Depth で分割段数を、Creases 入力と Crease Weight で残したい折り目の鋭さを指定し、ハイポリのスムーズメッシュを生成します。

主な用途 🎯

  • 低ポリ形状を滑らかな曲面に変換 (Catmull-Clark 系の細分化でカクカクのメッシュを丸める)
  • Depth で細分化の段数を制御し、レンダリング解像度とクックコストのバランスを取る
  • Creases 入力で折り目を保持しながら細分化 (キャラクター造形でエッジを残しつつ全体を丸める用途)
  • Crease Weight で折り目の鋭さを調整し、完全な角・半端な丸み・完全な滑らかさを連続的に切り替え
  • 後段モデリング向けのハイポリ素体を生成 (Noise SOP / Deform 系の細かい変形を載せる土台)

データフロー 🔄

入力 1: 細分化したいポリゴンメッシュ

入力 2 (オプション): 折り目を指定するエッジセット

Depth で反復回数を指定

Override Crease Weight で折り目の鋭さを上書き

出力: 細分化された滑らかなメッシュ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

対象範囲指定パラメータ 🎯

Group .group 🗂️
Group (対象グループ) — 入力 1 のうち細分化の対象とするポリゴンメッシュのサブセットを指定
– 空欄なら入力 1 のジオメトリ全体が細分化される
*[0-9] 等のパターンマッチングが使える

Creases .creases ✂️
Creases (折り目指定) — 入力 2 のうち折り目として扱うエッジセットを指定
– 入力 2 のポリゴンエッジが入力 1 のメッシュエッジと同じポイント番号を共有していると、そのエッジが折り目として認識される
– ポイント座標は無視されポイント番号のみが照合される (物理的に近いだけでは折り目にならない)

細分化深度パラメータ 🔢

Depth .iterations 📈
Depth (細分化の反復回数) — メッシュを何回細分化するかを指定
– 値が大きいほど面はより滑らかになるが、ポリゴン数が指数的に増加してクックコストが急増する
– 通常は 1〜3 が実用域。レンダリング解像度と性能のバランスで決定

折り目の鋭さ関連パラメータ 🔧

Override Crease Weight Attribute .overridecrease 🔁
Override Crease Weight Attribute (折り目の鋭さ属性を上書き) — 折り目の鋭さを下記 Crease Weight パラメータで一括上書きするかを切替
– オフのとき: 入力ジオメトリの primitive / vertex の creaseweight 属性が使われる
– オンのとき (デフォルト): すべての折り目に対し Crease Weight 単一値が適用される

Crease Weight .creaseweight ⚖️
Crease Weight (折り目の鋭さ) — Override Crease Weight Attribute がオンのとき適用される折り目の鋭さ値
– 0 = 完全に滑らか (折り目なし扱い)、大きい値ほど鋭い角として保持される
– 個別エッジで鋭さを変えたい場合は Vertex SOP / Primitive SOP で creaseweight 属性を直接設定する

折り目出力関連パラメータ 📤

Generate Resulting Creases .outputcrease 📝
Generate Resulting Creases (残った折り目を出力) — Depth よりも鋭い折り目が残った場合、その情報を結果ジオメトリの primitive 属性として出力するかを切替
– オンのとき: 残った折り目が下記 New Group で指定したグループに格納される (後段で再利用可能)
– 多段細分化のパイプラインで折り目情報を引き継ぐときに使う

New Group .outcreasegroup 🏷️
New Group (出力グループ名) — Generate Resulting Creases で出力される残存折り目を入れるグループの名前
Generate Resulting Creases がオンのときのみ意味を持つ

亀裂処理関連パラメータ 🩹

Close Cracks .closeholes 🧷
Close Cracks (亀裂の処理方法) — 出力ジオメトリで発生する亀裂 (細分化境界の隙間) をどう扱うかを選択するメニュー
– 細分化後にメッシュの境界に隙間が出るケース (グループ指定で部分細分化したときなど) で挙動を制御する

Surrounding Faces .surroundpoly 🔲
Surrounding Faces (周辺面の扱い) — 亀裂を引き寄せて閉じる際に、亀裂の両側にある周辺ポリゴンをどう扱うかを選択するメニュー
Close Cracks と組み合わせて細分化境界の連続性を制御するときに使う

Bias .bias ⚖️
Bias (寄せ方の比率) — 亀裂を閉じる際にどちらのポイントを動かすかを 0〜1 で指定
– 0 = 細分化された側のポイントを境界側に寄せる
– 1 = 境界側のポイントを細分化された側に寄せる
– 0.5 で中間の位置に両側を歩み寄らせる


実践アイデア 💡

Example 1: Box を滑らかに変換 🟢

Box SOP → Subdivide SOP (Depth=2) → Geometry COMP → Render TOP

Box SOP のカクカクした立方体を Subdivide SOP で 2 段細分化し、滑らかな丸みのある形状に変換する最小構成。プレースホルダ造形を一気に有機的なシルエットに仕上げる定番パターン。

  1. Box SOP を配置してデフォルトの立方体を生成
  2. Subdivide SOP を後段に接続し Depth を 2 に設定 (1 から始めて段階的に上げると挙動が掴みやすい)
  3. Override Crease Weight Attribute をオフのままにして全エッジを均等に丸める
  4. Geometry COMP に接続し、Camera COMP / Light COMP / Render TOP でレンダリング結果を確認
  5. Depth を上げると滑らかさが増すが、ポリゴン数も指数的に増えるので Info CHOP の num_prims で確認しながら調整

Example 2: 折り目を保持して細分化 ✂️

Box SOP → Subdivide SOP (input1=mesh, input2=crease edges, Depth=2)

立方体の特定のエッジセットを入力 2 として Subdivide SOP に渡し、その折り目を保持したまま他の部分だけを滑らかに細分化する例。キャラクターの顔の輪郭や工業製品のエッジを残しつつ全体を丸める用途。

  1. Box SOP で素体を生成し、Group SOP で折り目として残したいエッジセットだけを抽出
  2. Subdivide SOP の input1 に素体メッシュを、input2 に折り目エッジセットを接続
  3. Creases パラメータに input2 のグループ名を指定
  4. Override Crease Weight Attribute をオンにして Crease Weight を 5.0 程度に設定 (鋭く保持)
  5. Depth を 2〜3 に上げて、指定エッジ以外がしっかり丸まることを確認

Example 3: Noise で有機形状を作る 🌊

Box SOP → Subdivide SOP (Depth=3) → Noise SOP → Geometry COMP

Subdivide SOP で頂点密度を上げたメッシュを後段の Noise SOP で変位させてプロシージャル形状を作る典型パターン。Noise の細かい揺らぎを乗せるには十分な頂点密度が必要なため、Subdivide で素体の解像度を確保する。

  1. Box SOP で素体を配置
  2. Subdivide SOP を後段に置き Depth を 3 に設定して頂点密度を確保 (低い Depth では Noise の細かい揺らぎが乗らない)
  3. Noise SOP を後段に接続し、Amplitude / Frequency / Roughness で形状を変形
  4. 頂点数が増えすぎるとクックコストが急増するため、Info CHOPnum_points で常時確認
  5. Geometry COMP に接続して結果を確認

関連オペレータ 🔗

類似機能OP 🔍

  • Facet SOP — ポイント結合・法線処理・面の平面化など細分化以外の面属性編集を行う SOP
  • Divide SOP — ポリゴンを単純に分割するシンプルな細分化 SOP (滑らかさは付与しない)
  • Refine SOP — 曲線・サーフェスのコントロールポイント密度を細かくする (NURBS / Bezier 向けの細分化)
  • Polyreduce SOP — ポリゴン数を減らす逆方向の操作 (細分化結果が重い場合の対処)

組み合わせ推奨OP 🔄

  • Noise SOP — Subdivide で増やした頂点をノイズで変位させて有機形状を作る
  • Transform SOP — Subdivide 後の出力にさらに移動・回転・スケールを掛ける
  • Group SOP — Subdivide の Group / Creases パラメータに渡すエッジ・ポリゴンサブセットを作る
  • Convert SOP — 細分化結果を別のジオメトリ型 (NURBS / Bezier / Polygon) に変換
  • Geometry COMP — 細分化結果をレンダリングパイプラインに投入

前処理・後処理SOP 🎯


Info CHOP情報 📊

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

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

よくある問題と解決策 🔧

❌ Problem: Depth を上げるとフレームレートが急激に落ちる
✅ Solution:

  • Subdivide はポリゴン数を指数的に増やす仕様 — Depth を 1 段下げるだけでクックコストが大幅に減るので、最小段数で求めるシルエットが得られないか試す
  • 細分化後の頂点数は Info CHOPnum_points / num_prims で常に把握しておく
  • 重い場合は後段に Polyreduce SOP を入れて見た目に影響しない範囲でポリゴン数を削減

❌ Problem: 折り目として保持したいエッジが丸まってしまう
✅ Solution:

  • input2 の Creases グループに該当エッジが含まれているか、また Creases パラメータにそのグループ名を指定しているかを確認
  • Override Crease Weight Attribute をオンにして Crease Weight を 5.0〜10.0 と大きめに設定すると折り目が鋭く保持される
  • input2 のエッジが input1 のメッシュエッジと同じポイント番号を共有していないと折り目認識されない仕様 — ポイント番号のずれが疑われる場合は Group SOP でエッジセットを作り直す

❌ Problem: 部分的に Group 指定で細分化すると境界に隙間が出る
✅ Solution:

  • Close Cracks パラメータで境界の亀裂をどう扱うかを切替えて、隙間が閉じる挙動を試す
  • Surrounding Faces パラメータで亀裂の周辺ポリゴンの寄せ方を変えると、片側だけ動くか両側が歩み寄るかを切替えられる
  • Bias を 0.5 にすると境界と細分化側のポイントが中間に歩み寄り、自然な接続になりやすい

❌ Problem: 細分化後のメッシュが想定より滑らかにならない
✅ Solution:

  • input1 のメッシュに既に creaseweight 属性が設定されており、それが残って細分化を妨げている可能性 — Group SOP や Vertex SOP で属性をクリア
  • Override Crease Weight Attribute をオンにして Crease Weight を 0 にすると、すべての折り目を無視して完全に滑らかに細分化される
  • Depth を 1 から段階的に上げ、目的の滑らかさが得られる最小段数を見つける

参考資料 📚

その他 🔗

公式リソース 📖

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