
概要 📖 – 頂点と法線を整理
Facet SOPは、ポイントの統合・法線の再計算・カスプ処理によってメッシュの破綻やシェーディング異常を一括で整える SOPです。Extrude / Boolean / インポート直後のメッシュにかけて、近接ポイントの重複・法線の欠落・直線部の不要点・面の裏返りなどをまとめて整え、後段のレンダリングや変形に渡せる形に仕上げます。
主な用途 🎯
- 近接ポイントの統合によるジオメトリ清掃 — Consolidate で重複・近接ポイントを 1 点にまとめ、隣接ポリゴン境界の隙間や重なりを解消
- シェーディング用の法線再計算 — Compute Normals でサーフェス法線を再生成し、共有ポイントは滑らか・独立ポイントは面取り感のシェーディングに
- カスプ処理による角張りエッジの強調 — Cusp Polygons + Cusp Angle で指定角度を超える隣接面の境界をシャープエッジ化
- 直線上の不要ポイント削除 — Remove Inline Points で直線部に並ぶ無駄なポイントを削減し、メッシュ軽量化
- ポリゴンの巻き方向 (向き) 統一 — Orient Polygons で全プリミティブの巻き方向を揃え、裏返り面・シェーディング異常を防止
データフロー 🔄
入力 0: ジオメトリ SOP (Extrude / File In / Boolean 等の出力)
↓
法線計算 (Compute Normals)
↓
ポイント統合 (Consolidate) / 直線上ポイント削除 / カスプ処理 / 向き揃え / 縮退削除
↓
出力: 清掃済みジオメトリ SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
対象グループ絞り込み 🎯
Group .group 🎯
– Group (対象プリミティブグループ) — 入力にプリミティブグループが含まれている場合、ここで指定したグループのみを処理対象にします
– 空欄なら入力の全プリミティブが対象
– * や [0-10] 等のパターンマッチングが使用可能
法線の計算 📐
Make Normals Unit Length .unit 📏
– Make Normals Unit Length (法線の単位長正規化) — オンにすると全ての法線の長さを 1 に揃えます
– シェーディング計算で法線長を 1 と仮定する箇所が多いため、変形・スケール後の法線崩れを直すのに有効
Compute Normals .prenml 🧮
– Compute Normals (Consolidate / Cusp 前の法線計算) — オンにするとサーフェス法線を計算します
– 共有ポイントでは滑らかシェーディング、独立ポイントでは面取り感のシェーディングになります
– 入力ジオメトリに法線が無い・古い場合は、まずこちらをオンにしておくと後段の処理が安定します
Compute Normals .postnml 🧮
– Compute Normals (Consolidate / Cusp 後の法線計算) — Consolidate や Cusp で頂点共有関係が変化した後に、もう一度法線を計算し直します
– Cusp / Consolidate のいずれかをオンにしたときは、こちらもオンにするのが推奨
– シェーディングがおかしくなったら、まずこのチェックを疑います
頂点を独立化 ✂️
Unique Points .unique ✂️
– Unique Points (頂点の独立化) — オンにすると全頂点を独立ポイントにします (ポリゴン間でポイントを共有しない状態)
– 全エッジがハード (シャープ) になり、滑らかシェーディングは失われます
– 全面をはっきり面取り表示したいローポリ感を出したいときに有効
ポイントの統合方式 .cons 🔗
近接するポイントをまとめる方式を決めるメニューパラメータ。隣接プリミティブの境界で隙間や法線崩れを解消するのが目的。
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Consolidate | .none |
統合を行いません (入力をそのまま出力) |
| Consolidate Points Slow | .points |
全ポイント同士を距離比較して統合 (低速だが厳密) |
| Consolidate Points Fast | .fpoints |
空間分割で高速にポイントを統合 (大規模メッシュ向け) |
| Consolidate Normals Slow | .normals |
法線方向まで近いものを統合し平均化 (低速・厳密) |
| Consolidate Normals Fast | .fnormals |
空間分割で高速に法線方向の近いポイントを統合・平均化 |
※ 注意: Consolidate をオンにすると共有ポイントの関係が変化するため、後段のシェーディングが滑らかすぎる・ハードすぎると感じたら下記
Compute Normals(postnml) を併せてオンにして法線を再計算してください。
統合の距離閾値 📏
Distance .dist 📏
– Distance (統合判定距離) — Consolidate でポイント・法線が「近い」と判定する距離の閾値
– 通常は 0.01 などごく小さい値を指定
– 0.0 を指定すると、完全に同じ位置のポイントのみが統合対象
– 値を大きくしすぎると別ポリゴンの頂点まで巻き込んで形状が崩れるため注意
直線上ポイントの削除 📉
Remove Inline Points .inline 🗑️
– Remove Inline Points (直線上ポイントの削除) — 隣接ポイントと直線上に並んでいる無駄なポイントを削除
– 押し出しやスイープ直後で直線部に並んだ余剰ポイントを掃除し、メッシュを軽量化
– 後段の Polyreduce SOP との併用で更にローポリ化が進みます
Distance .inlinedist 📏
– Distance (直線判定の閾値) — Remove Inline Points がオンのとき、どの程度まで直線とみなすかの距離許容
– 大きくするほど多少のカーブも直線扱いで削除、小さくするほど厳密に直線部のみ削除
ポリゴンの向き整列 🧭
Orient Polygons .orientpolys 🧭
– Orient Polygons (ポリゴンの向き統一) — 全プリミティブの巻き方向 (winding) を揃えます
– インポートしたメッシュの一部が裏返って黒く描画される場合や、シェーディングの陰陽が一部反転する場合に有効
– 法線方向の一貫性が必要なバックフェイスカリング・透過マテリアル設定でも重要
面のカスプ処理 🔺
Cusp Polygons .cusp 🔺
– Cusp Polygons (カスプ処理の有効化) — オンにすると隣接ポリゴンの境界角度に応じて、滑らかシェーディングと面取り (シャープ) を自動切り替え
– 低い角度で接する面は滑らか、急角度で接する面はシャープエッジに
– テキスト押出やローポリモデルでエッジを目立たせたいときに有効
Cusp Angle .angle 📐
– Cusp Angle (カスプ判定の閾値角度) — Cusp Polygons がオンのとき、この角度を超える隣接面の境界をシャープエッジ化
– デフォルトは 20 度 (公式推奨)
– 大きくするほど滑らかな仕上がり、小さくするほどシャープエッジが増えます
縮退ジオメトリの削除 🧹
Remove Degenerate .remove 🧹
– Remove Degenerate (縮退ジオメトリの削除) — 使われていない孤立ポイントや、面積 0 等の意味を持たないプリミティブを削除
– インポート直後のジオメトリで「クックは通るのに描画されない」「Info CHOP の点数が合わない」といった症状の救済策
– 通常はオフでよく、症状が出たときだけオンに
実践アイデア 💡
Example 1: テキスト押出後の清掃 🧹
Text SOP → Extrude SOP → Facet SOP (Consolidate + Compute Normals + Cusp) → Geometry COMP
Extrude SOP で立体化したテキストは、文字の角に微小な重複ポイントや欠落した法線が残りやすく、そのままレンダリングするとエッジの黒い線やシェーディング崩れになりがちです。Facet SOP を直後に挟み、Consolidate で近接ポイントを統合、Compute Normals (postnml) で法線を再計算、Cusp Polygons で文字角を程よくシャープにすることで、3D タイトル / ロゴが一気にきれいに仕上がります。
- Text SOP に表示したい文字列を入力し、Extrude SOP で立体化
- Facet SOP を Extrude の直後に接続
ConsolidateをConsolidate Points Fastに、Distanceを 0.001 程度にCompute Normals(postnml) をオンにして法線を再計算Cusp Polygonsをオン、Cusp Angleを 20〜30 度- 後段の Geometry COMP に渡してレンダリング、エッジの黒線が消えたか確認
Example 2: インポートメッシュの法線整備 🧭
File In SOP (.obj / .fbx) → Facet SOP (Orient Polygons + Compute Normals + Make Normals Unit Length) → Material SOP
外部 DCC ツールから持ち込んだ .obj / .fbx メッシュは、ポリゴンの裏返りや法線の欠落・長さ崩れがあるとシェーディング崩れの原因になります。Facet SOP で Orient Polygons で巻き方向を揃え、Compute Normals で法線を再生成、Make Normals Unit Length で長さを 1 に正規化すれば、安定したシェーディングのベースが作れます。
- File In SOP で外部メッシュを読み込む
- Facet SOP を直後に接続
Orient Polygonsをオンにしてポリゴンの巻き方向を統一Compute Normals(prenml) をオンにして法線を再生成Make Normals Unit Lengthをオンにして法線長を 1 に- Material SOP / Geometry COMP に渡し、裏返り面の黒抜けが解消したか確認
Example 3: ローポリ化の前処理 📉
Heavy Mesh → Facet SOP (Consolidate + Remove Inline Points) → Polyreduce SOP → Convert SOP
Polyreduce SOP でローポリ化する前に Facet SOP を挟むと、まず Consolidate で近接ポイントの重複を取り除き、Remove Inline Points で直線部の無駄頂点を整理できるので、後段 Polyreduce の削減効率と仕上がりが大きく向上します。リアルタイム表示向けの軽量メッシュを作るときの定番前処理。
- 重いメッシュ (例: File In SOP の出力) を Facet SOP に渡す
ConsolidateをConsolidate Points Fast、Distanceを 0.01 程度にRemove Inline Pointsをオンにして直線部の頂点を削減- 後段に Polyreduce SOP を接続して目標ポリゴン数まで削減
- Convert SOP でメッシュタイプを整え、レンダリングへ
関連オペレータ 🔗
類似機能OP 🔍
- Polyreduce SOP — ポリゴン数自体を削減してローポリ化。Facet が頂点・法線の品質整備なのに対し、Polyreduce は数量削減が主目的
- Convert SOP — メッシュタイプ (Polygon / Mesh / NURBS 等) の変換が主目的。Facet と組合せると整備 + 変換が 1 ライン化
組み合わせ推奨OP 🔄
- Extrude SOP — 立体化直後のエッジ・法線崩れを Facet で整える定番の組み合わせ
- Boolean SOP — ブール演算の結果に発生する近接ポイント・重複頂点を Facet の Consolidate で清掃
- Subdivide SOP — 細分化後の余剰頂点・滑らかすぎる法線を Facet で再整備
- Polyreduce SOP — ローポリ化の前段に Facet を挟むと、削減効率と仕上がりが大幅改善
- Material SOP — Facet で法線・向きを整えた後にマテリアルを割当てると、シェーディング崩れが起きにくい
前処理・後処理SOP 🎯
- 前処理: Extrude SOP、Boolean SOP、Subdivide SOP、File In SOP、Carve SOP
- 後処理: Convert SOP、Polyreduce SOP、Material SOP、Transform SOP、Null SOP
Info CHOP情報 📊
Facet 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— 直近のクック所要時間 (ミリ秒、Consolidate / Cusp の処理負荷の指標)cook_frame:cook_frame— このオペレータが最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: シェーディングが期待と違う (滑らかすぎ / 角ばりすぎ)
✅ Solution:
Compute Normals(postnml) をオンにして Consolidate / Cusp 後の法線を再計算Cusp Polygonsをオン +Cusp Angleを 20〜30 度から微調整 (大きいほど滑らか / 小さいほどシャープ)Unique Pointsをオンにすると全エッジがシャープになり、面取りの強いローポリ感に切替可能
❌ Problem: Consolidate しても近接ポイントが統合されない
✅ Solution:
Distanceを 0.001 → 0.01 → 0.1 と段階的に上げ、入力ジオメトリのスケール感に合わせるConsolidateモードをConsolidate Points Slowに切替えて厳密判定で再確認- 前段の Transform SOP で大きくスケールしている場合、ワールド単位での距離判定が想定とズレることがあるので Transform 後のスケールに合わせて Distance を再設定
❌ Problem: メッシュの一部が真っ黒・裏返りに見える
✅ Solution:
Orient Polygonsをオンにしてポリゴンの巻き方向を統一Compute Normals(prenml / postnml の両方) をオンにして法線を再生成Make Normals Unit Lengthをオンにして法線長を 1 に正規化
❌ Problem: Remove Degenerate / Remove Inline Points の効果が見えない
✅ Solution:
Remove Inline PointsのDistance閾値を少し上げて、僅かに曲がっている直線部にも適用Remove Degenerateをオンにして孤立ポイント・面積 0 のプリミティブを削除し、Info CHOP のnum_points/num_primsで削減量を確認- 後段の Polyreduce SOP を併用して、Facet では除けない大規模なポリゴン数削減を担当させる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Facet SOP
- TouchDesigner公式ドキュメント – Polyreduce SOP
- TouchDesigner公式ドキュメント – Convert SOP
- TouchDesigner公式ドキュメント – Subdivide SOP

