
概要 📖 – Bullet 剛体物理ソルバ
Bullet Solver COMPは、Actor COMP 群を子として剛体物理シミュレーションを駆動し、衝突・重力・外力を 1 frame ごとに解いて transform を更新する物理ソルバ COMPです。Actor COMP を子として配置し、Gravity や Force COMP を設定することで剛体落下・衝突・拘束など Bullet 物理エンジンによるリアルタイムシミュレーションを構築できます。
主な用途 🎯
- Actor COMP 群を子に持ち、剛体物理シミュレーション全体を駆動するソルバコンポーネント
- Gravity / Dimension / Linear Multiplier / Angular Multiplier でシミュレーション空間の物理条件を定義 (2D/3D 切替・軸拘束)
- Sample Rate / Simulation Speed によるタイムステップとシミュレーション速度の制御 (スローモーション・高精度モード)
- Initialize Sim / Start Sim / Play パルスでシミュレーションのリセット・開始・一時停止を制御
- Callbacks DAT による衝突発生時 (
onCollision) ・フレーム開始/終了 (onFrameStart/End) ・初期化 (onInit/onStart) の Python イベントフック
データフロー 🔄
入力: Actor COMP リスト + Global Force COMP + 物理条件 (Gravity / Dimension / Rate)
↓
Bullet 物理エンジンで 1 frame ステップ (Sample Rate に応じた timestep)
↓
出力: 子 Actor COMP の Translate / Rotate 更新 + Bullet Solver CHOP / Callbacks DAT 経由でデータ取得
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Solver Page 📁
Actors / Forces 🧩
シミュレーション対象 Actor とグローバル外力 Force COMP の指定:
- Actors:
actors— シミュレーションに含める Actor COMP のリスト。既に他の Bullet Solver COMP に登録されている Actor は指定不可 - Global Forces:
forces— シミュレーション全体に作用するグローバル Force COMP のリスト。非 Static (Dynamic) アクター全てに適用される (重力・風・引力など)
Gravity 🌍
全アクター共通のグローバル重力:
- Gravitational Acceleration:
gravity (gravityx, gravityy, gravityz)— シミュレーション全体に適用される重力加速度 (m/s²)。質量に依らず全アクターに適用される (地球重力なら Y 軸-9.8)
Dimension .dimension 🎛️
シミュレーション空間の次元 (2D / 3D 切替):
- Dimension:
dimension— シミュレーション空間の次元 (2D / 3D など)。このメニューの動作は Linear Multiplier と Angular Multiplier の組合せで再現可能。例えば 2D を選ぶと Z 軸の並進と X/Y 軸まわりの回転が拘束される
Linear / Angular Multiplier 📏
軸別の並進・回転拘束マスク:
- Linear Multiplier:
linmult (linmultx, linmulty, linmultz)— 並進速度の軸別係数 (0 で拘束、1 で通常)。例:(0, 1, 1)なら X 軸方向の並進は不可。Dimension パラメータの値と内部で乗算されるため、両方で軸を絞ると AND 拘束になる - Angular Multiplier:
angmult (angmultx, angmulty, angmultz)— 角速度の軸別係数 (0 で回転拘束)。例:(1, 0, 0)なら X 軸まわりのみ回転可。Dimension と同様に内部乗算される
Initialize / Start / Play ▶️
リセット・開始・一時停止の制御パラメータ:
- Initialize Sim and Collision Shapes:
initall— 全 body を初期状態 (位置・姿勢・速度) に戻し、コリジョン形状も再生成するパルス。各 Actor COMP の Initialize Actor をまとめて打つことに相当。コリジョン形状の再生成は重いので、形状が変わってないなら下の Initialize Sim を使う - Initialize Sim:
init— 全 body を初期状態 (位置・姿勢・速度) に戻すパルス。コリジョン形状は再生成しない (軽量)。シミュレーションは開始せず初期化のみ - Start Sim:
start— 初期化してシミュレーションを開始 (ステップ実行) するパルス - Play:
play— オンの場合、シミュレーションをステップ実行 (再生)。オフで一時停止
Sample Rate / Speed ⏱️
サンプルレート・シミュレーション速度:
- Sample Rate:
rate— シミュレーションのサンプルレート。timestep は1/rateとなり、値を上げると物理計算は精密になるが負荷が増える - Simulation Speed:
simspeed— timestep サイズに対する速度倍率。1.0 が等倍、0.5 でスローモーション、2.0 で倍速再生 (物理精度には影響せず再生速度のみ変化)
Feedback / Contact 🔄
Feedback CHOP・接触判定・常時シミュレーション設定:
- Feedback CHOP:
feedback— 参照 CHOP から transform / velocity チャンネルを読み取り、次フレーム冒頭で対応する Actor の値を上書きする。Bullet Solver CHOP 出力を Switch CHOP で加工して書き戻すことで、ボタン 1 押下で全アクターの速度を反転するような操作が可能 (必須チャンネルはactor_idとbody_id、その他はオプション。force[xyz]/torque[xyz]で力も加算可能、scale は feedback 不可) - Perform Contact Test:
contacttest— 全 body の接触判定を有効化。Bullet Solver CHOP のcolliding/total_collisionsチャンネルはこれが ON でないと更新されない (body 数が多いとパフォーマンスに影響) - Always Simulate:
alwayssim— オンの場合、毎フレーム必ず cook (シミュレーションを実行)
Callbacks 📜
Python コールバック DAT 参照:
- Callbacks DAT:
callbacks— Python コールバック関数を含む DAT への参照。利用可能なコールバックはonCollision(solverComp, collisions)/onFrameStart(solverComp)/onFrameEnd(solverComp)/onInit(solverComp)/onStart(solverComp)。onCollisionは Perform Contact Test ON が前提で、衝突中の body ペア(bodyA, bodyB)の namedtuple リストを受け取る
Xform Page 📁
Transform Order .xord 🎛️
コンポーネントに対する Scale / Rotate / Translate の適用順序を指定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Scale Rotate Translate | .srt |
T * R * S * Position (デフォルト) |
| Scale Translate Rotate | .str |
R * T * S * Position |
| Rotate Scale Translate | .rst |
T * S * R * Position |
| Rotate Translate Scale | .rts |
S * T * R * Position |
| Translate Scale Rotate | .tsr |
R * S * T * Position |
| Translate Rotate Scale | .trs |
S * R * T * Position |
Rotate Order .rord 🎛️
X / Y / Z 軸の回転を合成する順序を指定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rx Ry Rz | .xyz |
R = Rz * Ry * Rx |
| Rx Rz Ry | .xzy |
R = Ry * Rz * Rx |
| Ry Rx Rz | .yxz |
R = Rz * Rx * Ry |
| Ry Rz Rx | .yzx |
R = Rx * Rz * Ry |
| Rz Rx Ry | .zxy |
R = Ry * Rx * Rz |
| Rz Ry Rx | .zyx |
R = Rx * Ry * Rz |
Transform 値 📏
位置・回転・スケールを XYZ 軸で指定する基本パラメータ:
- Translate:
t (tx, ty, tz)— X / Y / Z 軸の移動量。Bullet Solver COMP 自体の配置位置 (シミュレーション空間のオフセット) - Rotate:
r (rx, ry, rz)— X / Y / Z 軸まわりの回転角度 (度) - Scale:
s (sx, sy, sz)— X / Y / Z 軸の非一様スケール - Pivot:
p (px, py, pz)— Scale / Rotate の基準点 - Uniform Scale:
scale— 3 軸を一括スケーリング
Parent Transform Source .parentxformsrc 🎛️
コンポーネントの初期位置の参照元を選択するメニューパラメータ (旧 Constrain To)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Parent (Hierarchy) | .parent |
親階層の transform を使用 (デフォルト) |
| Specify Parent Object | .specifyparent |
Parent Object で指定した任意 OP の transform を使用 |
| World Origin | .worldorigin |
ワールド原点を基準にする (親階層の transform を無視) |
Forward Direction .forwarddir 🎛️
前方として扱う軸を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| +X | .posx |
X 軸正方向を前方とする |
| -X | .negx |
X 軸負方向を前方とする |
| +Y | .posy |
Y 軸正方向を前方とする |
| -Y | .negy |
Y 軸負方向を前方とする |
| +Z | .posz |
Z 軸正方向を前方とする |
| -Z | .negz |
Z 軸負方向を前方とする (デフォルト) |
Look At Up Vector .lookup 🎛️
Look At 制約での上方向ベクトルの扱いを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Don’t Use Up Vector | .off |
上方向ベクトルを使用しない (Look At ターゲットが Y 軸を跨がない場合に有効) |
| Use Up Vector | .on |
Orient Up Vector で指定した軸を上方向として精密に回転を定義 |
| Use Quaternions | .quat |
クォータニオンで球面上の最短経路として回転を計算 |
| Use Roll | .roll |
Roll パラメータでパス上の回転を指定 |
Look At / Path 🎯
Look At 制約 / SOP パス追従パラメータ:
- Parent Object:
parentobject— Parent Transform Source がspecifyparentのとき、親として使う任意 OP のパス - Look At:
lookat— 常に向き続けるターゲット 3D COMP のパス - Path SOP:
pathsop— このコンポーネントが追従するパスを定義する SOP - Roll:
roll— パス上を移動するときの回転角度 - Position:
pos— パス上の位置 (0 = 開始点, 1 = 終端点, 最大 10 で複数周回) - Orient along Path:
pathorient— オンの場合、コンポーネントの +Z 軸がパスの進行方向を向く - Orient Up Vector:
up (upx, upy, upz)— Look At 制約の上方向ベクトル - Auto-Bank Factor:
bank— パスの曲率に応じた自動バンク (0 で無効)
Pre-Xform Page 📁
Transform Order (Pre) .pxord 🎛️
Pre-Xform レイヤの Scale / Rotate / Translate 適用順序を指定するメニューパラメータ (Xform Page と同じ 6 種)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Scale Rotate Translate | .srt |
T * R * S * Position |
| Scale Translate Rotate | .str |
R * T * S * Position |
| Rotate Scale Translate | .rst |
T * S * R * Position |
| Rotate Translate Scale | .rts |
S * T * R * Position |
| Translate Scale Rotate | .tsr |
R * S * T * Position |
| Translate Rotate Scale | .trs |
S * R * T * Position |
Rotate Order (Pre) .prord 🎛️
Pre-Xform レイヤの回転合成順序を指定するメニューパラメータ (Xform Page と同じ 6 種)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rx Ry Rz | .xyz |
R = Rz * Ry * Rx |
| Rx Rz Ry | .xzy |
R = Ry * Rz * Rx |
| Ry Rx Rz | .yxz |
R = Rz * Rx * Ry |
| Ry Rz Rx | .yzx |
R = Rx * Rz * Ry |
| Rz Rx Ry | .zxy |
R = Ry * Rx * Rz |
| Rz Ry Rx | .zyx |
R = Rx * Ry * Rz |
Pre-Xform レイヤ 📁
Pre-Xform レイヤ (メイン Xform の前に適用される追加 transform):
- Apply Pre-Transform:
pxform— Pre-Xform レイヤの有効化 - Translate / Rotate / Scale / Pivot (Pre):
pt / pr / ps / pp— Pre レイヤの位置・回転・スケール・ピボット - Uniform Scale (Pre):
pscale— Pre レイヤの一括スケーリング - Reset Transform / Commit to Main:
preset/pcommit— Pre レイヤをリセット、または Main へコミット - Xform Matrix/CHOP/DAT:
xformmatrixop— 4×4 行列を直接指定して transform を適用 (XformMatrix * PreXForm * Position)
Render Page 📁
Render 設定 🖌️
レンダリング動作パラメータ:
- Material:
material— 内部ジオメトリに適用する MAT - Render:
render— Render TOP でこのコンポーネントのジオメトリを可視化するか (Render Flag との論理 AND) - Draw Priority:
drawpriority— 描画順 (値が小さいほど後に描画)。Transparency 制御で頻用 - Pick Priority:
pickpriority— Render Pick CHOP / DAT の Search Area 内で複数 OP が見つかったときの優先度 (値が大きいほど優先) - Wireframe Color:
wcolor (wcolorr, wcolorg, wcolorb)— ワイヤーフレーム表示時の色 - Light Mask:
lightmask— このジオメトリに影響する Light COMP の制限リスト
Common Page 🔧
Parent Shortcut .parentshortcut 🔗
コンポーネント内部からこの COMP へのパスとして使えるショートカット名:
- Parent Shortcut: コンポーネント内部の任意の場所からこの COMP を参照する際のショートカット名 (
parent.<name>形式で利用可能)
Global OP Shortcut .opshortcut 🌐
プロジェクト全体からこの COMP を参照するグローバル名:
- Global OP Shortcut: プロジェクト内のあらゆる場所からこの COMP へのパスとして使えるグローバル名 (
op.<name>形式で利用可能)
Internal OP .iop 📎
Internal OP シーケンス (コンポーネント内部 OP への名前付き参照):
- Shortcut:
iop0shortcut— コンポーネント内部の OP に対するショートカット名 - OP:
iop0op— このコンポーネント内部の対象 OP へのパス
Node View .nodeview 👁️
ノードビューア (Network エディタ上のサムネイル) に表示する内容を決定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default Viewer | .default |
コンポーネントタイプ標準のビューアを表示 |
| Operator Viewer | .opviewer |
指定した任意 OP のノードビューアを表示 |
Operator Viewer .opviewer 🖼️
Operator Viewer モード時に表示する対象 OP:
- Operator Viewer パス: Node View が
opviewerモードのとき、そのビューア内容として表示する OP のパス
Cloning .cloning 🧬
マスター COMP の内容を複製する Cloning 設定:
- Enable Cloning:
enablecloning— Clone Master の内容を継続的に複製するかを切替 - Enable Cloning Pulse:
enablecloningpulse— その瞬間だけ Clone Master の内容を瞬時に複製 - Clone Master:
clone— 複製元となるマスターコンポーネントへのパス
Load on Demand .loadondemand ⏳
必要時のみメモリにロードする遅延ロード設定:
- Load on Demand: オンの場合、このコンポーネントは実際に必要となるまでメモリにロードされない (起動時間・メモリ消費の最適化)
External .tox .externaltox 💾
外部 .tox ファイルとの連携設定:
- Enable External .tox:
enableexternaltox— 起動時に外部 .tox ファイルからロード - Enable External .tox Pulse:
enableexternaltoxpulse— 外部 .tox ファイルから即時リロード - External .tox Path:
externaltox— ディスク上の .tox ファイルへのパス - Reload Custom Parameters:
reloadcustom— コンポーネントのカスタムパラメータ値を再読み込み - Reload Built-In Parameters:
reloadbuiltin— コンポーネントの組み込みパラメータ値を再読み込み - Save Backup of External:
savebackup— .toe ファイル内に外部 .tox のバックアップコピーを保存 - Sub-Component to Load:
subcompname— .tox 内部の特定 COMP のみを取り出してロード
Relative File Path Behavior .relpath 📁
このコンポーネント内部での相対ファイルパスの解決基準
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Parent’s Behavior | .inherit |
親コンポーネントの設定を継承 |
| Relative to Project File (.toe) | .project |
.toe プロジェクトファイルからの相対パスとして解決 |
| Relative to External COMP File (.tox) | .externaltox |
外部 .tox ファイルからの相対パスとして解決 |
Parameter Color Space .parmcolorspace 🎨
このコンポーネント内の色パラメータをどの色空間として解釈するか
| 項目 | 内部名 | 説明 |
|---|---|---|
| sRGB | .srgb |
標準的な sRGB ガンマ空間 |
| sRGB – Linear | .srgblinear |
sRGB プライマリでガンマ線形 (1.0) |
| Rec.601 (NTSC) | .rec601ntsc |
Rec.601 NTSC 規格の色空間 |
| Rec.709 | .rec709 |
HDTV 用 Rec.709 色空間 |
| Rec.2020 | .rec2020 |
UHDTV / HDR 向け Rec.2020 広色域 |
| DCI-P3 | .dcip3 |
デジタルシネマ DCI-P3 色空間 |
| DCI-P3 (D60) | .dcip3d60 |
D60 白点 DCI-P3 |
| Display-P3 (D65) | .displayp3d65 |
D65 白点 Display-P3 (Apple ディスプレイ等) |
| ACES2065-1 | .aces2065-1 |
ACES アーカイブ用色空間 (AP0 プライマリ) |
| ACEScg | .acescg |
ACES CG 作業用色空間 (AP1 プライマリ) |
| Passthrough | .passthrough |
色変換を行わず値をそのまま扱う |
Parameter Reference White .parmreferencewhite ⚪
色パラメータの基準白色の扱い
| 項目 | 内部名 | 説明 |
|---|---|---|
| Default For Color Space | .default |
選択した色空間のデフォルト基準白を使用 |
| Standard (SDR) | .sdr |
標準ダイナミックレンジ (SDR) 基準白 |
| High (HDR) | .hdr |
ハイダイナミックレンジ (HDR) 基準白 |
| UI | .ui |
UI 表示用の基準白 |
実践アイデア 💡
Example 1: 剛体落下: 重力で箱を床に落とす最小構成 📦
Bullet Solver COMP (Gravity=(0,-9.8,0)) → 子に Actor COMP (Dynamic, Box SOP) + Actor COMP (Static, 床) → Start Sim パルス
Bullet Solver COMP の最小構成。Gravity を地球重力に設定し、子として Dynamic な箱と Static な床の Actor COMP を 2 つ配置するだけで剛体落下シミュレーションが完成する。Start Sim パルスで初期化 + 開始、Play で再生制御。
- Bullet Solver COMP を作成し、Gravitational Acceleration を
(0, -9.8, 0)に設定 - 子として Box SOP を含む Actor COMP を作成、Kinematic State を
Dynamic、Translate Y を5に - 床用に別の Actor COMP を Solver の子として作成し、Kinematic State を
Staticに - Solver の Actors リストに 2 つの Actor を登録 (子なら自動登録)
- Start Sim をパルスすると箱が落下し床と衝突して跳ねる
Example 2: Feedback CHOP でジャンプボタンを実装 🎮
Bullet Solver CHOP → CHOP Execute (velocity 上書き) → Switch CHOP (ボタン押下で切替) → Bullet Solver COMP (Feedback CHOP)
Feedback CHOP パラメータを使うと、シミュレーション中の任意の瞬間にアクターの transform / velocity を CHOP データで上書きできる。ボタン押下時に Y 方向速度を加算する Switch CHOP を Feedback に接続すれば、押下フレームだけジャンプ速度が注入される仕組みが組める。
- Bullet Solver COMP の出力を Bullet Solver CHOP で読み出し (actor_id / body_id / linvelx-z を取得)
- Math CHOP で
linvelyに+5を加算して「ジャンプ後速度」CHOP を作成 - Switch CHOP の入力 0 を元 Bullet Solver CHOP、入力 1 をジャンプ後 CHOP に接続
- ボタンパルスを Switch CHOP の index にエクスポートし、押下フレームのみ index=1 に切替
- Switch CHOP の出力を Bullet Solver COMP の Feedback CHOP パラメータに指定 — 押下フレームのみ速度が上書きされてジャンプする
Example 3: Callbacks DAT で衝突時に SFX を再生 🔊
Bullet Solver COMP (Perform Contact Test ON + Callbacks DAT) → Text DAT (onCollision 内で Audio File In CHOP をトリガ) → Audio Device Out CHOP
Callbacks DAT + Perform Contact Test ON で onCollision(solverComp, collisions) が衝突発生フレームごとに呼ばれる。collisions は (bodyA, bodyB) の namedtuple リストで、各 body の Python Body オブジェクトを介して質量・速度等を取得できる。コールバック内で Audio File In CHOP のパルスを叩けば衝突 SFX を発火できる。
- Bullet Solver COMP の Perform Contact Test をオンにする (これが OFF だと onCollision が呼ばれない)
- Callbacks DAT を作成し (デフォルトで自動生成される) Text DAT として開く
def onCollision(solverComp, collisions):内でfor c in collisions:を回し、衝突相手の body を判別- Audio File In CHOP を SFX 音源にし、コールバックから
op('audiofilein1').par.cuepulse.pulse()を呼ぶ - Audio Device Out CHOP に流して衝突時に音が鳴ることを確認
Example 4: 2D 拘束: 平面ピンボール風シミュレーション 🎯
Bullet Solver COMP (Dimension=2D, Linear/Angular Multiplier で軸を絞り込み) → Actor COMP 群 (ピンボール盤面 + ボール) → Render TOP
Dimension を 2D に切替えるか Linear Multiplier / Angular Multiplier で軸を拘束すると、3D 物理エンジンの上で 2D 平面シミュレーションが行える。XY 平面ピンボールでは Z 方向の並進と X/Y 軸まわりの回転を 0 にして、ボールと壁の物理を XY 平面に閉じ込める。
- Bullet Solver COMP の Dimension を
2Dに設定 (または Linear Multiplier=(1,1,0), Angular Multiplier=(0,0,1)) - ピンボール盤面の壁 / ピン用に複数の Static Actor COMP (Convex Hull) を XY 平面上に配置
- ボール用に Dynamic Actor COMP (Bounding Sphere) を作成し、Restitution を
0.7付近にして弾みを調整 - Gravity を
(0, -3, 0)程度の弱めに設定 (盤面が垂直な想定なら Y 軸下方向に重力) - Render TOP で正射影カメラを使うと、純粋な 2D ピンボール風レンダリングになる
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- Actor COMP — Bullet Solver COMP の子として配置する剛体アクター (コライダー形状 + 質量 + 摩擦・反発係数)
- Force COMP — Global Forces または Actor 個別 Forces として登録する力場 (風・引力・点力など)
- Constraint COMP — 2 アクター間に関節・バネ・ヒンジ拘束を設定して機構運動を構築
- Bullet Solver CHOP — シミュレーション中の transform / velocity / collision データを CHOP として読み書きするインタフェース
- Geometry COMP — Actor COMP のコライダー形状の元となる SOP をホスト
前処理・後処理COMP 🎯
Info COMP情報 📊
Bullet Solver COMP は Info CHOP / Info DAT による詳細情報取得に対応しています。シミュレーション内のアクター数・衝突数・パフォーマンスを取得するには Bullet Solver CHOP の併用も推奨されます。
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: Bullet Solver COMP 自体のワールド位置 (Translate)rx / ry / rz: Bullet Solver COMP 自体の回転 (度)sx / sy / sz: Bullet Solver COMP 自体のスケール
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: シミュレーションが動かない / アクターが落下しない
✅ Solution:
- Play パラメータがオンか確認、Start Sim をパルスして初期化 + 開始
- 対象 Actor COMP の Kinematic State が
Dynamicになっているか確認 (Staticは動かない) - Actor が他の Bullet Solver COMP に既に登録されていないか確認 (1 Actor は 1 Solver にしか登録できない)
- Gravitational Acceleration が
(0, 0, 0)になっていないかチェック
❌ Problem: 高速で動く物体が衝突をすり抜ける
✅ Solution:
- Sample Rate を上げて timestep を短くする (例:
240等) - 対象 Actor の Continuous Collision Detection (
ccd) をオンにして連続衝突判定を有効化 - Simulation Speed を一時的に下げてスローモーション動作を確認し、衝突形状の妥当性をチェック
❌ Problem: onCollision コールバックが呼ばれない
✅ Solution:
- Perform Contact Test (
contacttest) がオンになっているか確認 — オフだと衝突判定チャンネル / コールバックが更新されない - Callbacks DAT パラメータが正しい DAT を指しているか確認 (デフォルトで自動生成される DAT を使う)
- コールバックの関数シグネチャが
onCollision(solverComp, collisions)形になっているかチェック (引数名は固定)
❌ Problem: シミュレーションが想定通りの方向に動かない (2D 拘束が効かない)
✅ Solution:
- Dimension パラメータと Linear / Angular Multiplier が AND 拘束で内部乗算されることを意識し、両方が有効軸を許可しているか確認
- Initialize Sim and Collision Shapes をパルスし、Multiplier 変更後の状態をリセット
- Gravity の軸方向が拘束軸とぶつかっていないか (例: 2D 平面が XY なのに Gravity が Z 方向だと重力が拘束で消える)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — COMP 概要
- TouchDesigner Wiki — Category:COMPs
- TouchDesigner Wiki — Category:Components
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Bullet Solver COMP
- TouchDesigner公式ドキュメント – Actor COMP
- TouchDesigner公式ドキュメント – Bullet Solver CHOP

