
概要 📖 – Bullet 物理シミュレーションの瞬間インパルス
Impulse Force COMPは、親 Bullet Solver COMP 配下で Pulse Force パルスを押した瞬間に Actor COMP の body へ 1 度だけ線形力・トルクを加える、Bullet 物理シミュレーション用のインパルス発生 COMPです。Force / Relative Position / Torque パラメータで加える力の大きさと作用点・回転モーメントを事前に設定しておき、Pulse Force を押した次フレームでそれらが 1 度だけ body に適用されます。ジャンプ・打撃・爆発トリガーなどイベント駆動の力学効果に最適です。
主な用途 🎯
- Actor COMP の body に対し パルスを押した次フレームで 1 度だけ 瞬間的な力 (インパルス) を加える
- Force (Newtons 単位の線形力) をジャンプ・打撃・キックなど離散イベントの瞬間衝撃として注入する
- Relative Position オフセット位置で力を加え、副次的な トルク を発生させて回転を伴うインパクトを作る
- Torque (回転モーメント) をパルスで一発加え、コマ回し・パンチで物体をスピンさせるトリガを構築する
- Force COMP の継続力とは異なる イベント駆動型の力 として、ユーザ入力・センサー閾値・タイミング検出に紐付ける
データフロー 🔄
親 Bullet Solver COMP
↓
Impulse Force COMP (Force / Relative Position / Torque 設定)
↓
Pulse Force パルス
↓
次フレームで Actor COMP の body に 1 回だけインパルス適用
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Force Page 📋
Pulse Force (パルストリガー) .pulse 💥
インパルス力を発火させるパルスボタン (次フレームで 1 度だけ適用):
- Pulse Force:
pulse— このパルスを押した瞬間にインパルス力を予約し、次フレームで Force / Relative Position / Torque の現在値を body に 1 回だけ適用する
Force (線形インパルス XYZ) .force 🚀
Pulse Force 発火時に body に加わる Newtons 単位の線形力 (ワールド XYZ 軸):
- Force X:
forcex— Pulse Force 発火時にワールド X 軸方向に加わるインパルス (Newtons) - Force Y:
forcey— ワールド Y 軸方向に加わるインパルス (Newtons)。ジャンプを表現するには重力と逆向きに正値を設定 - Force Z:
forcez— ワールド Z 軸方向に加わるインパルス (Newtons)
Relative Position (作用点オフセット) .relpos 📍
Force の作用点を body 中心からオフセットする座標:
- Relative Position X:
relposx— body の物理中心 (重心ではなく形状中心) からの X 方向オフセット - Relative Position Y:
relposy— body の物理中心からの Y 方向オフセット - Relative Position Z:
relposz— body の物理中心からの Z 方向オフセット
Torque (回転インパルス XYZ) .torque 🔄
Pulse Force 発火時に body に加わる回転モーメント (Newtons・XYZ 軸):
- Torque X:
torquex— X 軸まわりの回転インパルス (ピッチ方向) - Torque Y:
torquey— Y 軸まわりの回転インパルス (ヨー方向) - Torque Z:
torquez— Z 軸まわりの回転インパルス (ロール方向)
Common Page 🔧
Parent Shortcut .parentshortcut 🔗
コンポーネント内部からこの COMP へのパスとして使えるショートカット名:
- Parent Shortcut: コンポーネント内部の任意の場所からこの COMP を参照する際のショートカット名 (
parent.<name>形式で利用可能)
Global OP Shortcut .opshortcut 🌐
プロジェクト全体からこの COMP を参照するグローバル名:
- Global OP Shortcut: プロジェクト内のあらゆる場所からこの COMP へのパスとして使えるグローバル名 (
op.<name>形式で利用可能)
実践アイデア 💡
Example 1: ジャンプアクション (Y 軸インパルス) 🦘
Keyboard In CHOP (Space) → CHOP Execute DAT → Impulse Force COMP (Force Y = +500) → Pulse Force
プレイヤーキャラクターを表す Actor COMP の子に Impulse Force COMP を配置し、Force Y に重力と逆向きの正値を設定。スペースキー入力に紐付けた CHOP Execute DAT から pulse パラメータを発火させることで、ジャンプの瞬間衝撃を 1 回だけ加える定番構成。
- Bullet Solver COMP を root に配置し、Gravity を (0, -9.8, 0) に設定
- Actor COMP にキャラクタのジオメトリと Mass = 60kg を割り当て
- Actor COMP 配下に Impulse Force COMP を追加
- Force ページの forcey を +500 (Y 軸正方向のジャンプ力) に設定
- Keyboard In CHOP と CHOP Execute DAT で space キー押下を検出し
op('impulseforce1').par.pulse.pulse()を呼ぶ - キーを押すたびに次フレームでキャラクタが上方向に跳ね上がる
Example 2: オフセット位置の打撃でスピンを発生 🥊
Trigger CHOP → Impulse Force COMP (Force X + Relative Position Y > 0)
ボーリングのピンやコマのような物体に対し、Relative Position を中心から上方にずらしたうえで X 軸方向の Force をインパルスとして加える。中心軸を外れた打撃により body は並進と同時にトルクを受け、自然な回転を伴って吹き飛ぶ挙動が得られる。
- Actor COMP (ピン形状) を Bullet Solver 配下に配置
- Actor COMP 配下に Impulse Force COMP を追加
- Force ページの forcex を +300、relposy を +0.5 (中心より 50cm 上で打撃)
- Trigger CHOP からのイベントで
pulseを発火 - ピンが X 方向に飛びつつ、オフセットによる副次トルクで回転しながら倒れる
Example 3: コマ回し (Torque パルスでスピン起動) 🌀
Button COMP → Impulse Force COMP (Torque Y = +100, Pulse Force)
コマや独楽のような対称軸を持つ Actor COMP に対し、Torque Y にのみ大きな値を設定して Pulse Force を発火する。Y 軸まわりの回転モーメントが 1 度だけ加わり、後は Bullet ソルバの慣性で自然に減衰しながら回り続けるシミュレーションを作る。
- Hinge / 自由回転の Actor COMP (コマ形状) を配置
- Impulse Force COMP の torquey を +100 に設定 (Y 軸まわりの強い回転モーメント)
- Force / Relative Position はすべて 0 のまま (純粋な回転インパルスのみ)
- Button COMP の押下で
pulseを発火 - コマがその場で勢いよく回転を始め、摩擦と慣性で徐々に減衰する
関連オペレータ 🔗
類似機能OP 🔍
- Force COMP — 継続的な線形力・トルク・力場を加える親戚 COMP (Impulse は瞬間 1 回、Force は継続)
組み合わせ推奨OP 🔄
- Bullet Solver COMP — Impulse Force COMP の親ソルバ。配下に置かないとインパルスは適用されない
- Actor COMP — インパルスが作用する対象 body を持つコンポーネント
- Constraint COMP — Hinge 等で軸を拘束した body にインパルスを与えて回転駆動を実装
前処理・後処理COMP 🎯
- 前処理: Bullet Solver COMP、Actor COMP
- 後処理: Geometry COMP、Camera COMP
Info COMP情報 📊
Impulse Force COMP は Info CHOP / Info DAT による詳細情報取得に対応しています。
COMP 固有情報 📦
num_children: コンポーネント内部の子 OP の総数num_dats: 内部 DAT の数num_chops: 内部 CHOP の数num_tops: 内部 TOP の数num_sops: 内部 SOP の数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数cpu_memory / gpu_memory: OP が確保している CPU / GPU メモリ使用量
Object 固有情報 📊
tx / ty / tz: Impulse Force COMP 自体のワールド位置 (Translate)rx / ry / rz: Impulse Force COMP 自体の回転 (度)sx / sy / sz: Impulse Force COMP 自体のスケール
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Pulse Force を押してもインパルスが効かない / body が動かない
✅ Solution:
- Impulse Force COMP は必ず親の Bullet Solver COMP 配下に配置されている必要がある。階層を確認
- Bullet Solver COMP の Play / Start Sim パルスでシミュレーションが実際に走っているか確認 (pause 中はインパルスが次フレームに到達しない)
- Force / Torque の値が 0 のままだとパルスを押しても何も加わらない。事前に
forcex/y/zまたはtorquex/y/zに十分な値を設定する - 対象 Actor COMP の Mass に対し Force が小さすぎないか確認 (例: Mass 60kg のキャラに 1N を加えても動かない)
❌ Problem: 並進させたいだけなのに body が回転してしまう
✅ Solution:
Relative Position(relposx/y/z) が (0, 0, 0) になっているか確認。非ゼロだと中心軸外で力が加わり副次的トルクが発生する- Torque ページ (torquex/y/z) に意図しない値が入っていないか確認
- 純粋な並進インパルスだけ与えたい場合は Relative Position をすべて 0、Torque もすべて 0 にする
❌ Problem: Pulse Force を連打しても累積しない / 効果が薄い
✅ Solution:
- Impulse は 1 度のパルスで 1 frame だけ適用される仕様。短時間に複数回押す場合は frame 間隔を意識し、CHOP Execute DAT 等で確実に
.pulse()を発火する - 継続的に力を加えたい場合は Impulse Force COMP ではなく Force COMP を使う (継続力 + Force Field 対応)
- Mass が大きい body には Force / Torque 値を桁単位で大きく取らないと体感差が出ない (F = m·a の関係)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — COMP 概要
- TouchDesigner Wiki — Category:COMPs
- TouchDesigner Wiki — Category:Components
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Impulse Force COMP
- TouchDesigner公式ドキュメント – Force COMP
- TouchDesigner公式ドキュメント – Bullet Solver COMP

