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

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

Blend SOP の複数ジオメトリブレンド機能を示す図

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

概要 📖 – 複数ジオメトリ入力の重み付きブレンド合成

Blend SOPは、複数のジオメトリ入力を重み付きで線形補間し、ブレンドシェイプ(モーフィング)や属性別ブレンドを 1 ノードで実現する SOPです。ポイント位置・カラー・法線・テクスチャ座標・Up Vector を属性別に独立してブレンドでき、CHOP 由来のチャンネル /blend1/blendN でアニメーション駆動も可能です。

主な用途 🎯

  • 複数ジオメトリのモーフィング(同一ポイント数・同一トポロジの形状を Weight 値で線形補間して中間形状を生成)
  • ブレンドシェイプ(モーフターゲット)の合成でキャラクター表情・ポーズ・口形(リップシンク)を複数ターゲットから動的に合成
  • Differencing モードによる誇張変形(第 1 入力を基準に他入力との差分を計算し、1 を超える Weight で形状を強調)
  • 位置・カラー・法線・UV・Up Vector の属性別ブレンド制御でジオメトリ属性ごとに独立した補間を実現
  • CHOP 由来のアニメーションチャンネル(/blend1/blendN)でフレームごとに動的に重みを駆動
  • Group パターンで部分的ブレンドを行い、特定のポイントやプリミティブのみを補間対象に限定

データフロー 🔄

入力: 2 個以上の同一トポロジ SOP(ベース形状 + ブレンドターゲット群)

Weights Page で各入力の重みを設定(または CHOP チャンネル経由で駆動)

Blend Page で対象属性(Position / Colors / Normals / Texture / Up)を選択

出力: 重み付き合成された 1 つの SOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Blend Page 📋

対象ポイント・プリミティブの選別 🎯

Group .group 🎯
– 第 1 入力におけるポイント または プリミティブ グループを指定するパターン文字列(*0-15 等の Pattern Matching 表記)
– 指定したグループ内のポイント・プリミティブのみが全入力間でブレンドされ、グループ外は第 1 入力の値がそのまま使われる
– 例: 第 1 入力と第 3 入力のポイントを含むグループを指定すると、第 1 と第 3 ポイントのみがブレンドされ、第 2 / 第 4 / 第 5 ポイントは第 1 入力の値に一致したまま
– 未指定(空欄)の場合は全ポイント・プリミティブが対象

ブレンドモード切替 🔄

Differencing .diff 🔀
– オンにすると、Weight 値が 1 を超える / 0 未満になる場合に誇張ブレンドを生成(チャンネル値が合計 1 に正規化されない)
– 第 1 入力を基準(base)として固定し、第 2 入力以降との差分を各ポイントごとに計算
– 1 より大きい Weight で形状を強調、0 未満で逆方向に誇張
第 1 入力自身のブレンドチャンネル /blend1 は無効化される(base が固定のため)。第 1 入力のジオメトリを変形させたい場合は別入力に回す
– デフォルト: オフ(標準の線形補間モード)

ブレンド対象属性の有効化 🎚️

Blend Position .dopos 📍
– オンにするとポイント位置(XYZ)をブレンドチャンネルの重みで補間
– オフ時は入力ジオメトリの位置は変化せず、Colors / Normals / Textures / Up のみがブレンド対象になる

Blend Colors .doclr 🎨
– オンにするとポイントカラー(RGBA)をブレンドチャンネルの重みで補間

Blend Normals .donml 📐
– オンにするとポイント法線(normal)をブレンドチャンネルの重みで補間

Blend Texture .douvw 🖼️
– オンにするとポイントのテクスチャ座標(UVW)をブレンドチャンネルの重みで補間

Blend Up .doup ⬆️
– オンにするとポイントの Up Vector をブレンドチャンネルの重みで補間


Weights Page 📋

入力ウェイトシーケンス ⚖️

Input .input 🔢
– 各入力に対応するウェイトのシーケンス(マルチパラメータ)
– 接続された入力数に応じて自動的に Input 0 / Input 1 / Input 2 … の Weight パラメータが展開される

Weight .input0weight ⚖️
– 該当入力の寄与度(01 の正規化値が標準)
0: その入力の寄与なし、1: その入力の全寄与
– Differencing オフ時は内部で合計 1 に正規化されるため、相対比率としても機能する
– Differencing オン時は値が 1 を超える/0 未満で誇張ブレンドが発生
– CHOP チャンネル /blend1/blendN をエクスポートしてフレーム単位で重みを動的に駆動可能


実践アイデア 💡

Example 1: 球と立方体をWeightでモーフ 🔮

Sphere SOP + Box SOP → (同一ポイント数化) → Blend SOP (dopos=ON, input0weight & input1weight をアニメ駆動) → Out SOP

球と立方体の中間形状を時間経過でモーフィングさせる基本パターンです。Blend SOP は同一ポイント数・同一トポロジを前提とするため、両入力のポイント数を揃えた上で、各入力の Weight を LFO CHOP 等で 01 に駆動して滑らかな形態変化を作ります。

  1. Sphere SOP と Box SOP を配置し、Rows / Cols 等のサブディビジョンパラメータを揃えて両者のポイント数を一致させる
  2. Blend SOP の入力 0 に Sphere SOP、入力 1 に Box SOP を接続
  3. Blend Page の Blend Position をオンに設定(位置のみブレンド)
  4. Weights Page の Input 0 Weight1.0Input 1 Weight0.0 に初期設定
  5. LFO CHOP を作成し Input 0 WeightInput 1 Weight に逆位相で Export して、再生中に球 ↔ 立方体のモーフィングを観察

Example 2: Differencing モードによる表情の誇張ブレンド 😄

Base Face SOP + Smile Target SOP + Frown Target SOP → Blend SOP (diff=ON, Weight に 1.5 等の誇張値) → Material SOP → Render

ニュートラル顔をベースに、笑顔・困り顔のブレンドターゲットを Differencing モードで合成し、Weight に 1 を超える値を入れて表情を誇張する用途です。第 1 入力(ベース顔)は固定され、他入力との差分のみが誇張されるため、ベース形状を維持したまま表情の振れ幅を強調できます。

  1. ニュートラル顔ジオメトリを入力 0、笑顔ターゲットを入力 1、困り顔ターゲットを入力 2 に接続(全て同一ポイント数)
  2. Blend SOP の Differencing をオンに切替(誇張ブレンドモード)
  3. Blend Position をオンに設定し、形状のみブレンド対象に
  4. Weights Page で Input 1 Weight1.5 に設定して笑顔を 1.5 倍誇張
  5. Input 0 Weight(ベース顔 /blend1)は Differencing オン時には無視される点に注意

Example 3: Group パターンで頭部のみブレンドし胴体は固定 🧩

Body+Head A SOP + Body+Head B SOP → Group SOP (頭部ポイントを抽出) → Blend SOP (Group 指定, dopos=ON) → Out SOP

全身ジオメトリのうち頭部だけをブレンドし、胴体は第 1 入力の形状を維持したいケースです。Group SOP で頭部ポイントグループを作成し、その名前を Blend SOP の Group パラメータに指定することで、部分ブレンドを実現します。

  1. Group SOP で第 1 入力の頭部ポイントを head という名前のグループにまとめる
  2. Blend SOP に同一トポロジの 2 つの全身ジオメトリを入力 0 / 入力 1 として接続
  3. Blend SOP の Group パラメータに head を指定
  4. Blend Position をオンに設定し、Weights Page で両入力に 0.5 ずつ重みを与える
  5. 出力で頭部のみが中間形状にブレンドされ、胴体は第 1 入力のままになっていることを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Sequence Blend SOP — 時系列に並んだ複数 SOP を時間軸で順次ブレンド(ポーズシーケンス補間に特化)

組み合わせ推奨OP 🔄

  • Switch SOP — ブレンドではなく入力切替が必要なケースで使い分ける
  • Group SOP — 部分ブレンド用にポイント・プリミティブグループを事前生成
  • Merge SOP — ブレンド前に複数 SOP を 1 入力にまとめる、または並列パスを集約
  • LFO CHOP — Weight パラメータに Export して周期的なモーフィングアニメーションを駆動
  • Constant CHOP/blend1/blendN チャンネルを静的に与える

前処理・後処理SOP 🎯


Info CHOP情報 📊

Blend 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:

  • Blend Position がオンになっているか確認 — オフ時はポイント位置がブレンド対象から外れ、入力 0 の形状がそのまま出力される
  • Weights Page の Input N Weight が想定どおりに設定されているか確認(全入力が 1 や全入力が 0 だと変化が見えない)
  • 全入力のポイント数とトポロジが一致しているか確認 — 不一致だと正しくブレンドされない(前段に Box SOP 等で同一サブディビジョンを揃える)

❌ Problem: Differencing をオンにしたら第 1 入力の Weight が効かなくなった
✅ Solution:

  • Differencing モードは仕様通り、第 1 入力 (/blend1) は base として固定され Weight が無視される
  • 第 1 入力のジオメトリも Weight で動かしたい場合は、その入力を入力 1 以降の別スロットに移動
  • 第 1 入力のスロットには、変形させたくない base ジオメトリ(ニュートラルポーズ等)を置く

❌ Problem: カラーや法線がブレンドされない(位置だけ補間されている)
✅ Solution:

  • Blend Colors / Blend Normals / Blend Texture / Blend Up の該当属性トグルがオンになっているか確認 — 各属性は独立にオン/オフ制御される
  • 入力ジオメトリ側にカラー / 法線 / UV / Up 属性が実際に存在するか確認(無い属性はブレンドできない)
  • 前段で Point SOP 等で必要な属性を付与してから Blend SOP に渡す

❌ Problem: Group を指定しても部分ブレンドにならない
✅ Solution:

  • Group パターンが第 1 入力のポイント・プリミティブグループ名と一致しているか確認(パターンマッチングは大文字小文字を区別)
  • 前段の Group SOP で意図したポイント・プリミティブが実際にグループに含まれているか Geometry Viewer で確認
  • グループ外のポイント・プリミティブは第 1 入力の値に固定される仕様を踏まえ、第 1 入力に意図する base 形状を置く

❌ Problem: CHOP チャンネル経由でブレンド重みを動かしたいが反映されない
✅ Solution:

  • /blend1/blendN のチャンネル名規則どおりに CHOP の出力チャンネル名を設定(数字は入力スロット番号と対応)
  • Weights Page の Input N Weight パラメータに対し、CHOP のチャンネルを Export または参照式で接続
  • Differencing オン時は /blend1 は無視される仕様を踏まえ、ベース入力は別スロットに回す

参考資料 📚

その他 🔗

公式リソース 📖

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