mcpField
T
threejs-procedural-motion-systems

threejs-procedural-motion-systems

github.com/linegel開発11137 回インストール5 週間前に更新
リポジトリ

threejs-procedural-motion-systems について

状態の所有権、決定論的な時間管理、座標系を考慮した変換を定める、Three.js のプロシージャルモーション設計スキルです。解析的・再帰的な動き、GPU 表現の選択、ライフサイクル、検証を扱います。

主な機能

  1. 01各モーションチャネルの単一ライター
  2. 02解析式と固定ステップの時間モデル
  3. 03決定論的な再生とシーク
  4. 04座標系を考慮した変換と親変更
  5. 05モーション履歴とリセット方針
  6. 06CPU/GPU 表現の選択

活用シーン

  1. 01シーク可能なプロシージャルモーションの作成
  2. 02再帰シミュレーションと描画の同期
  3. 03ワールド姿勢を保った Actor の親変更
  4. 04描画レートごとのモーション検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/linegel/threejs-complete-set-of-skill --skill threejs-procedural-motion-systems

インストール後、Claude Code で/threejs-procedural-motion-systemsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
agents/
openai.yaml
references/
procedural-motion-and-docking-systems.md

詳細

手続き型モーションシステム

セマンティックな状態が真実のソースであり、トランスフォームはその表現です。位置、向き、速度、フェーズ、イベントの各チャネルに、書き込み元を1つだけ割り当てます。

プロセス

1. 状態とその書き込み元を宣言する

観測可能なモーション、SI 単位、座標系、安定したアクター ID、初期状態、フェーズ/イベント状態、および期間の契約を明記します。契約は、終端ポーズと速度/引き継ぎルールを伴う有限、ラップルールを伴う周期的、または停止/リセットポリシーを伴う無期限のいずれかです。アニメーションする各チャネルに書き込み元を1つ割り当てます。クリップ、手続き型ルート、インスタンスストレージ、カメラリグ、外部ソルバーが異なるチャネルを所有する場合は、明示的なレイヤー順序を通じてのみ許可します。

別のシミュレーションからモーションを受け取る場合、またはそのモーションに反応する場合は、次を宣言します。

  • 交換する量、単位、座標系/原点、状態の所有者、生成元、利用者、バージョン、公開順序。
  • タイムスタンプまたは半開区間、更新頻度、サンプルの位相、補間または外挿、不連続時の動作。
  • サポート/フィルター、有効性、古さ、誤差限界、値が欠落した場合の動作。
  • レートと区間積算の意味、および一方向または双方向の反応における所有権と順序。
  • GPU の生成/利用パス、リソースの世代、キュー順序、実際の完了を示す証拠。
  • 変更不可の前回/今回の確定済みサンプル、安定した ID、リセット、再利用、退役、破棄のルール。

フレームクリティカルな状態は所有するデバイス上に維持し、診断用の読み戻しは状態の更新と表示の外で非同期にスケジュールします。

完了条件: アニメーションする各チャネルに書き込み元、座標系と単位の規約、安定した ID がそれぞれ1つだけ割り当てられ、初期状態と有限、周期的、または無期限の期間契約が定義されていること。システム間の各境界で、該当する宣言がすべて明確になっていること。

2. 時間モデルと表現を選択する

まず状態依存性、次にアクター数を基準に選択します。

モーション時間モデル表現
シーク可能なオーサリング済みトランスフォーム権威ある秒数からの閉形式少数のアクターには Object3D、多数のアクターには頂点 TSL
フェーズを持つオーサリング済みシーケンス離散イベント状態を伴う閉形式フェーズ内のローカル時間と再生可能なイベントログ
スプリング、拘束、衝突、その他の再帰状態前回/今回の状態を使用する固定ステップ測定済みのクロスオーバーに基づいて選ぶ CPU 配列または GPU ストレージ
知覚的な追従dt に正しく対応する指数応答レンダリング時の状態。物理的ではないことを明示

同一トポロジーを繰り返す場合は InstancedMesh を使用します。トポロジーが異なり、マテリアル状態に互換性がある場合は BatchedMesh を使用します。測定した CPU トラバーサル/アップロードのクロスオーバーを超える場合にのみ、ストレージとコンピュートを使用します。

標準経路では、three/webgpu から WebGPURenderer を初期化するために await renderer.init() を使用し、renderer.backend.isWebGPUBackend === true であることを確認します。

完了条件: 各モーション分岐に時間モデルと表現がそれぞれ1つだけ定義され、各 GPU 経路に、その使用を正当化する測定済みのワークロードしきい値が記載されていること。

3. 時間を決定論的にする

信頼できる経過秒数から解析的な動きを直接サンプリングします。固定ステップで再帰状態を進め、不変の前状態と現在状態を保持し、未処理の完全なステップはすべて別の負債状態に移して、提示前に 0 <= accumulator < fixedStep となるようにします。その後、alpha = accumulator / fixedStep を使って提示します。生のデルタ時間のクランプ、最大サブステップ数、負債の処理、一時停止/再開、リプレイの動作は、動き全体を所有する側で一度だけ定義します。負債の破棄または予定された追いつき処理と、不連続時のリセットは別々の判断です。結合された状態は、レンダーコールバックの頻度ではなく、シミュレーション所有者の刻みで進みます。

知覚的な追従では、ターゲットを区間上で積分される連続関数、タイムスタンプ付きのゼロ次ホールド、またはタイムスタンプ付きの補間サンプルとして宣言します。変更はそのタイムスタンプで適用し、提示頻度によって基礎となるターゲット信号が変化しないようにします。

保存されたシード、カウンター、ワンショットイベントフラグを使用します。直接シークした場合も、その時刻までリプレイした場合と同じフェーズおよびイベント状態を再構築します。AnimationMixer は固定ステップで更新するか、シーク時のアクション状態をリセット/再生する方法を明示的に定めます。setTime() だけでは、完了済みのアクションやイベントスケジュールは再構築されません。また、独立したクロックをサンプリングしません。

完了条件: 停止後に解析クロックと再帰クロックがずれることがなく、補間ペアが有界のアキュムレーターで提示時刻を挟み、負債とリセットの判断を個別に観測でき、同一の初期状態と、適用されるすべてのシード、固定ステップ、イベントスケジュール、ターゲット信号により、テスト対象のあらゆる提示頻度で同じ時刻に対応する状態を再現できること。

4. フレームセーフなトランスフォームを実装する

すべての位置、方向、速度、クォータニオンについて、変換元と変換先のフレームを明示します。軸を正規化し、平行および反平行なベクトルのアラインメントを処理し、最短経路のクォータニオン分岐となるよう符号を正規化し、定義済みの長い弧や全回転については回転数を保持し、乗算順序を明示して、累積回転を正規化します。

再親設定では、ワールド姿勢を次の式で保持します。 M_local_new = inverse(M_world_newParent) * M_world_old 残差が許容範囲内の場合に限り、TRS に分解します。非一様な祖先によってせん断が生じる場合は、アフィン行列またはラッパーを保持します。解放された子は、回転する親の omega cross r と、すでに動いている子の相対速度を変換したものを含む、移動フレームの速度を引き継ぎます。ドッキング誤差は、古いワールドフレームではなく現在のドッキングフレームで分解します。

完了条件: すべてのトランスフォームでフレームチェーンとクォータニオンの順序が宣言され、再親設定によって許容誤差内でワールド行列が保持され、ゼロおよび反平行の入力でも有限値が保たれ、移動フレームからの解放にすべての輸送項が含まれること。

5. 公開、リセット、破棄

安定したアクター ID を保ちながら、不変の前回/現在のポーズ世代を公開し、同じペアからレンダリング用ポーズ、境界、シャドウを導出します。モーションベクトルでは、前回表示されたサンプルとカメラも保持します。前回のシミュレーションティックを前回表示されたポーズの代わりに使うことはありません。カット、テレポート、スポーン/デスポーン、再親子化、トポロジーまたは変形の変更、LOD/品質の変更、ストレージスロットの再利用、ID の変更が発生した場合は、新しい有効性エポックを開始し、極端な速度を導出するのではなく、該当する履歴をリセットします。

位相のタイムスタンプ、アキュムレーターと負債の記録、シードカウンター、イベントフラグ、有限動作の終端ロック、前回/現在のバッファーは、意味上のモーションリセットが行われる場合に限り、まとめてリセットします。カメラカットなどの時間的なリセットでは、意味上のモーションを再開せず、該当する表示履歴をクリアします。破棄時には、システムが所有するストレージ、コンピュートリソース、読み戻し用ステージング領域、リスナー、タイマー、レンダラーループを解放します。

完了条件: それぞれの不連続に対し、各履歴コンシューマーについて、保持、移行、リセットのいずれかを選択します。時間的なリセットでは意味上の状態が保持され、意味上のリセットでは宣言された初期状態が不可分に復元され、古い ID が再利用されたスロットを参照できず、破棄後に稼働中の所有者、リスナー、バッファー、アニメーションループが残らないこと。

6. 不変条件を検証する

選択した各分岐について、該当するチェックのみを実行します。解析的モーションでは、表示レート 30、60、120、240 Hz において、直接シークとリプレイを比較します。再帰的モーションでは、これらの表示レートすべてで同じ固定ステップスケジュールを維持し、ステップ半減テストに合格する必要があります。知覚追従では、タイムスタンプ付き、または解析的に積分されたターゲット信号を 1 つだけ使用し、共通の壁時計時刻のチェックポイントで比較します。有限モーションでは、正確な終端ポーズと、宣言された速度または引き継ぎに到達します。終端ロックでは、宣言された座標系における相対残差速度がゼロであることを求めつつ、移動するポートの速度は継承します。周期モーションと終了条件のないモーションでは、宣言されたラップ、または停止/リセットの遷移を検証します。

選択した場合は、クォータニオンのノルムと符号の連続性、再親子化前後でのワールド行列の一致、インスタンス ID の安定性、すべての不連続に対するリセット動作もチェックします。GPU モーションでは、ディスパッチ数、ホットバイト数、p50/p95 の時間、フレーム処理を妨げる読み戻しがゼロであることを記録します。Node Post では、表示/出力の所有者が 1 つであることを証明します。

完了条件: 選択したすべての分岐が、ケイデンス、所有権、座標系、リセット、ライフサイクル、目に見える障害のチェックに合格し、パフォーマンスを主張する場合は、しきい値と対象ハードウェアが記録されていること。

条件に応じた参照先

ルーティングの境界

カメラの動きと引き継ぎには $threejs-camera-controls-and-rigs を使用し、 プールされたエフェクトが成果物となる場合は $threejs-particles-trails-and-effects を使用し、環境状態には 関連する水または地形のスキルを使用してください。依頼が動きに加えてレンダリング、ジオメトリ、 マテリアル、シャドウ、ポスト処理、または別のシミュレーションにもまたがる場合は、$threejs-choose-skills を使用してください。

コメント