
概要 📖 – ジオメトリへの法線・タンジェント属性の自動付与
Attribute Create SOPは、ジオメトリに法線 (Normal) とタンジェント (Tangent) 属性を生成して付与する SOPです。法線はライティング計算、タンジェントはノーマルマッピングに必要な頂点属性で、Use MikkTSpace を有効にすると DCC ツールで広く使われる MikkTSpace 規格に従ったタンジェント計算が選択されます。
主な用途 🎯
- 法線情報を持たないプリミティブ SOP (Box / Sphere / Grid 等) への法線属性の自動付与 によるライティング計算の前提整備
- UV を持つジオメトリへのタンジェント属性の生成 でノーマルマップシェーディングを実現
- MikkTSpace 規格でのタンジェント計算 により Substance Painter / Blender 等の DCC ツールでベイクしたノーマルマップとの整合性を確保
- Alembic / FBX 等で取り込んだ外部ジオメトリ に欠落した法線・タンジェントの後付け補完
- Phong / PBR MAT 等のシェーダ前段 での頂点属性整備によるシェーディング品質向上
データフロー 🔄
入力: ジオメトリ SOP (頂点・面情報)
↓
法線 / タンジェントの自動計算 (Compute Normals / Compute Tangents / Use MikkTSpace 設定)
↓
出力: 法線・タンジェント属性が付与されたジオメトリ SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
法線・タンジェント生成オプション 📐
Compute Normals .compnml 🧭
– 入力ジオメトリに法線 (Normal) 属性 N を計算して付与するトグル
– デフォルト: オフ。法線未付与のジオメトリ (Box / Sphere / Grid SOP の初期出力等) で Phong / PBR MAT を使うときは原則オン
– 法線は頂点ごとに計算され、隣接する面法線の平均から自動的に導出される
Compute Tangents .comptang 📍
– タンジェント (Tangent) 属性を計算して付与するトグル
– デフォルト: オフ。ノーマルマップを使うシェーディングではオン必須
– タンジェント計算は UV (Vertex 属性 uv) を前提とする (UV のないジオメトリではタンジェントは生成されない)
Use MikkTSpace .mikktspace 🔄
– Compute Tangents がオンのときに MikkTSpace 規格でタンジェント計算を行うトグル
– デフォルト: オフ。Substance Painter / Blender / Marmoset 等の主要 DCC ツールが採用する規格に揃えたい場合にオン
– 通常のタンジェント計算より処理速度が遅いが、ノーマルマップのシーム (UV の継ぎ目) における不整合が解消される
実践アイデア 💡
Example 1: プリミティブ SOP への法線自動付与 💡
Box SOP → Attribute Create SOP (compnml=on) → Geometry COMP (Phong MAT) → Render TOP
Box SOP / Sphere SOP / Grid SOP 等のプリミティブ生成系 SOP は初期状態で法線属性 N を持たず、そのまま Phong / PBR MAT に渡すと平坦なシェーディングや暗い見た目になります。Attribute Create SOP の Compute Normals をオンにしてライティング計算に必要な法線を後付けで生成する、最も基本的なフローです。
- Box SOP 等のプリミティブ SOP を配置
- Attribute Create SOP を接続し
Compute Normalsをオン - Geometry COMP に格納して Phong MAT 等を割り当て
- Render TOP で正しいライティングが当たることを確認
Example 2: Alembic 取り込みジオメトリへのタンジェント補完 🎨
Alembic SOP → Attribute Create SOP (comptang=on, mikktspace=on) → PBR MAT (ノーマルマップ) → Render TOP
外部 DCC ツール (Maya / Houdini / Blender) から Alembic 経由で取り込んだジオメトリには法線はあってもタンジェント属性が欠落していることがあります。ノーマルマップを正しくシェーディングするために Compute Tangents をオン、ベイク元と整合させるため Use MikkTSpace もオンにして補完する例です。
- Alembic SOP で
.abcファイルを読込 - Attribute Create SOP を接続し
Compute Tangentsをオン - DCC ツール側でベイクしたノーマルマップとの整合性が必要なら
Use MikkTSpaceもオン - PBR MAT のノーマルマップスロットにテクスチャを割り当て、Render TOP でシェーディングを確認
Example 3: Facet SOP との組み合わせによるシェーディング切替 🔀
Sphere SOP → Facet SOP (法線処理) → Attribute Create SOP (compnml=on) → Geometry COMP
Facet SOP で法線を一旦リセット (フラットシェーディング状態) してから Attribute Create SOP で再計算するパイプライン。Facet SOP の Unique Points / Pre-Compute Normals オプションと組み合わせて、フラットとスムーズの境界を意図的に設計したい場合に使います。
- Sphere SOP を配置
- Facet SOP で法線処理 (Unique Points / Smooth / Hard 等) を選択
- Attribute Create SOP を接続し
Compute Normalsをオンにして法線を再計算 - Render TOP でシェーディング結果の差分を確認
関連オペレータ 🔗
類似機能OP 🔍
- Attribute SOP — 既存属性の削除・リネーム (本 SOP の対概念)
- Facet SOP — 法線の再計算・スムーズ / フラット切替の専用 SOP
組み合わせ推奨OP 🔄
- Texture SOP — タンジェント計算の前提となる UV (
uv) を生成 - Phong MAT — 生成した法線でディフューズ / スペキュラを計算
- PBR MAT — 生成したタンジェントでノーマルマップシェーディング
- Geometry COMP — 属性付き SOP を 3D シーンに配置
- Render TOP — 最終的なシェーディング結果を 2D 画像化
前処理・後処理SOP 🎯
- 前処理: Box SOP、Sphere SOP、Grid SOP、Alembic SOP、Texture SOP
- 後処理: Facet SOP、Transform SOP、Material SOP、Attribute SOP
Info CHOP情報 📊
Attribute Create 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: Compute Normals をオンにしても法線が反映されない
✅ Solution:
- 下流に Facet SOP や別の SOP があり、その出力で法線が再計算 / 上書きされていないか確認
- Geometry COMP / MAT 側で法線を参照するシェーディング設定 (Phong / PBR MAT 等) になっているか確認
- Info DAT で出力ジオメトリの属性一覧を見て
Nが Point または Vertex 属性として存在することを確認
❌ Problem: Compute Tangents をオンにしてもタンジェントが生成されない
✅ Solution:
- 入力ジオメトリに UV (Vertex 属性
uv) が存在するか確認 (UV なしではタンジェント計算は走らない) - 前段に Texture SOP を入れて UV を生成
- Attribute SOP 等で UV を別名にリネームしている場合、TouchDesigner が認識する
uv名へ戻す
❌ Problem: ノーマルマップのシームに違和感が出る
✅ Solution:
Use MikkTSpaceをオンにして DCC ツール (Substance Painter / Blender 等) ベイク時の規格と一致させる- UV シェルの継ぎ目 (UV シーム) と法線の継ぎ目 (ハードエッジ) が一致しているか元データを確認
- ノーマルマップそのもののベイク設定 (Tangent Space / World Space) が PBR MAT 側の解釈と合っているか確認
❌ Problem: パフォーマンスが重い
✅ Solution:
Use MikkTSpaceは通常のタンジェント計算より低速なため、必要な箇所 (ノーマルマップ使用ジオメトリ) のみオン- 毎フレーム変形しないジオメトリなら前段に Cache SOP を入れて再計算を抑制
Compute Normals/Compute Tangentsは不要な方をオフにする (両方常時オンの状態は避ける)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Attribute Create SOP
- TouchDesigner公式ドキュメント – Attribute SOP
- MikkTSpace (外部リファレンス) – Mikkelsen Tangent Space

