physics-rendering-expert について
physics-rendering-expertは、リアルタイム物理シミュレーションを開発する人向けのスキルで、ロープの力学と拘束ソルバーを扱います。PBD、積分法、回転表現の選択や、実装時の注意点を案内します。
主な機能
- 01ロープ・ケーブルの力学
- 02PBD拘束ソルバー
- 03Gauss-SeidelとJacobiの選択
- 04Verlet積分の指針
- 05クォータニオンと双対クォータニオン
活用シーン
- 01リアルタイムのロープやチェーンの実装
- 02粒子システムの積分法選定
- 03複数ロープの絡まり検出
- 04布シミュレーション向け並列ソルバーの選定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill physics-rendering-expertインストール後、Claude Code で/physics-rendering-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.md.claude-plugin/plugin.jsonreferences/tangle-physics.mdimplementations.mdknot-garden-physics.mdcore-algorithms.md詳細
物理・レンダリングの専門知識:ロープのダイナミクスと拘束ソルバー
リアルタイムのロープ/ケーブルのダイナミクス、拘束ソルバー、物理ベースのシミュレーションに関する計算物理学の専門知識です。
このスキルを使用する場面
次の用途に使用します:
- リアルタイムのロープ/ケーブル/チェーンのシミュレーション(リード、クライミングロープ)
- Position-Based Dynamics(PBD)の実装
- 拘束ソルバー(Gauss-Seidel、Jacobi)
- クォータニオン/双対クォータニオンの回転計算
- 粒子システムのためのVerlet積分
- 絡まりの検出(複数のロープの衝突)
次の用途には使用しないでください:
- 流体力学 → 専用のSPH/MPMソルバーを使用します
- 破壊シミュレーション → FEMまたはMPMが必要です
- オフラインのシネマティック物理 → 異なる拘束が必要です
- Unity/Unrealの物理演算 → 組み込みシステムを使用します
専門家と初心者を見分けるポイント
| トピック | 初心者 | 専門家 |
|---|---|---|
| 拘束のアプローチ | バネの力を使用する(F=ma) | PBDを使用する(位置を直接操作する) |
| PBDを使う理由 | 「バネで十分に機能します」 | バネには非常に小さなタイムステップが必要です。PBDは無条件に安定しています |
| ソルバーの選択 | 「完了するまで繰り返すだけです」 | チェーンにはGauss-Seidel、GPUにはJacobiを使用します |
| 反復回数 | 20回以上 | 5~10回が最適で、それ以降は効果が逓減します |
| 回転 | オイラー角を使用する | クォータニオンを使用する(ジンバルロックがありません) |
| 積分 | 前進オイラー法 | Verlet法(シンプレクティックで、エネルギーを保存します) |
よくあるアンチパターン
剛性の高い拘束に力ベースのバネを使用する
| 例 | なぜ誤りなのか |
|---|---|
force = k * (distance - rest_length)でkを大きくする | kが大きいと安定性のために非常に小さなdtが必要です。kが小さいとロープが柔らかくなりすぎます |
| 代わりに:PBDを使用し、拘束を満たすよう粒子を直接移動させます |
回転にオイラー角を使用する
| 例 | なぜ誤りなのか |
|---|---|
rotation = vec3(pitch, yaw, roll) | pitchが90°のときにジンバルロックが発生し、合成も不安定になります |
| 代わりに:クォータニオンを使用します。4つの数値で表現でき、ジンバルロックがなく、SLERPも安定します |
反復しすぎる
| 例 | なぜ誤りなのか |
|---|---|
solver_iterations = 50 | 5~10回以降は効果が逓減し、計算サイクルを無駄にします |
| 代わりに:5~10回の反復を使用します。それ以上必要な場合はXPBDのコンプライアンスを使用します |
大規模システムに単一スレッドのGauss-Seidelを使用する
| 例 | なぜ誤りなのか |
|---|---|
| 1000個以上の拘束にGauss-Seidelを使用する | Gauss-Seidelは本質的に逐次処理です |
| 代わりに:GPU並列化にはJacobiソルバーを使用します |
クイックリファレンス
PBDが力ベースの物理演算より優れている理由
- 無条件に安定しています(大きなタイムステップでも問題ありません)
- 拘束の充足を直接制御できます
- 調整が必要なバネ定数がありません
- 挙動を予測しやすくなります
ソルバーの選択
| ソルバー | 並列化可能 | 収束速度 | 用途 |
|---|---|---|---|
| Gauss-Seidel | いいえ | 高速 | チェーン、ロープ |
| Jacobi | はい(GPU) | 低速 | 大規模メッシュ、クロス |
回転の表現
- 3D回転 → クォータニオン(オイラー角は使用しません)
- 回転+並進 → 双対クォータニオン
- スキニング/ブレンディング → 双対クォータニオン(キャンディラッパー状のアーティファクトがありません)
パフォーマンス目標
| システム | 予算 | 備考 |
|---|---|---|
| 単一のロープ(100個の粒子) | <0.5ms | 5回の反復で十分です |
| 3匹の犬のリード(60個の粒子) | <0.7ms | 絡まりの検出を含みます |
| クロス(1000個の粒子) | <2ms | GPUでJacobiを使用します |
発展のタイムライン
| 時代 | 主な進展 |
|---|---|
| 2006年以前 | 質点バネ系、安定性の問題 |
| 2006~2015年 | PBDの登場(Müllerら)、無条件安定性 |
| 2016~2020年 | XPBDで柔らかい拘束のコンプライアンスを追加 |
| 2021~2024年 | ALEM(2024 SIGGRAPH)、BDEM、ニューラル物理 |
| 2025年以降 | XPBDが標準に、CPU/GPUのハイブリッド化、学習による補正 |
選択の判断基準
制約ソルバーの選択:
- 逐次構造(ロープ/チェーン)ですか? → Gauss-Seidel
- 大規模な並列システム(布/髪)ですか? → Jacobi(GPU)
- ソフト制約が必要ですか? → コンプライアンスを使用する XPBD
積分方法の選択:
- 位置のみが必要ですか? → 基本的な Verlet
- 力の計算に速度が必要ですか? → Velocity Verlet
- 高精度が必要ですか? → RK4(ただし、通常は PBD で十分です)
連携先
- metal-shader-expert - Jacobi ソルバー用の GPU コンピュートシェーダー
- native-app-designer - 可視化およびデバッグ用 UI
参考ファイル
| ファイル | 内容 |
|---|---|
references/core-algorithms.md | PBD ループ、Verlet、クォータニオン、ソルバーの実装 |
references/tangle-physics.md | 複数ロープの衝突、キャプスタン摩擦、TangleConstraint |
覚えておいてください:リアルタイム物理では、物理的な正確さではなく、安定性と視覚的なもっともらしさが重要です。60fps で 5~10 回反復する PBD は見栄えがよく、高速に動作します。
コメント
Markdown 対応