threejs-procedural-creatures について
Three.jsでプロシージャルな生物を構築するスキルです。身体生成、セマンティックリグ、移動、群れの描画を扱い、形態や負荷に応じた表現と状態・描画・リソースの検証を行います。
主な機能
- 01負荷に応じた身体表現の選択
- 02身体とリグのコンパイル
- 03移動と支持面接触の構築
- 04群れのポーズとカリング管理
- 05描画の整合性とライフサイクルの検証
活用シーン
- 01指定形態を持つ生物の生成
- 02歩行と支持面に応じた四肢の実装
- 03共有トポロジーを持つ群れの描画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ linegel/ threejs-complete-set-of-skill --skill threejs-procedural-creaturesインストール後、Claude Code で/threejs-procedural-creaturesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEagents/openai.yamlreferences/articulated-hard-shell-creatures.mdcreature-body-systems.md詳細
手続き型クリーチャー
コンパイラーのようにクリーチャーを構築します。寸法を定めた仕様から、安定したボディ、リグ、ポーズ、個体群の識別情報を生成し、実行時には選択された状態だけを更新します。標準的な経路では、Three.js r185 の WebGPURenderer、TSL、NodeMaterial、およびワークロードに応じて選択するストレージを使用します。インポートしたスキンアニメーションアセットは、このスキルの拡張ではなく、別のパイプラインで扱います。
1. ボディの契約を定義する
求められる可視量、投影範囲の最小値と最大値、形態の範囲、ポーズ/トポロジーの更新頻度、可視個体数、対象アダプター、ワールド単位/フレーム、最終出力の担当者、および生息環境/支持面/水/天候の各プロバイダーを指定します。
リクエストを、次のいずれか、または複数の分岐に分類します。
| 分岐 | クリーチャーが所有するもの |
|---|---|
| 生成ボディ | 仕様、フィールドまたはセグメントコンパイラー、出荷用サーフェス、マテリアル |
| リグ/移動 | セマンティックスロット、ローカルポーズ、固定ステップまたは解析的な動作、支持面相対ターゲット |
| 反復する個体群 | 互換性のあるジオメトリ/マテリアルの識別情報、ポーズページ、境界、カリング、LOD |
要求されるすべての可視量に担当者が割り当てられ、すべての外部入力に生成元とサンプリング契約が指定され、トポロジー、ポーズ、個体群の変化の仕組みが明確になった時点で、このステップは完了です。
2. 出荷用表現を選択する
接続性、変形、再利用、投影誤差に基づいて選択します。
| ワークロード | 表現 | 必要な検証 |
|---|---|---|
| 接続性が固定でポーズが変化する | 抽出済みの参照メッシュ1つと、検証済みのスキニング | トポロジー、ウェイト、変形、双方向のサーフェス誤差 |
| 接続性が固定で形態変化が制限される | 参照メッシュ、スキニング、必要に応じた制限付きローカルフィールド補正 | 範囲全体でのヤコビアン、反転、補正、サーフェス誤差 |
| コンポーネントが結合、分割、開閉する可能性がある | 予算制約付き動的抽出、または明示的な未対応結果 | トポロジーイベント、更新頻度、遷移、メッシュ全体の妥当性 |
| ボディが明らかに分離した剛体プレート/リンクで構成される | 閉じた関節セグメント階層 | 閉じたジオメトリ、関節の隙間/制限、変換の整合性 |
| 多数のボディでトポロジーを共有する | 共有ジオメトリ/マテリアルと固定ポーズページ | 互換性のある識別情報、ダーティデータの通信量、境界、可視オブジェクトの描画処理 |
| 投影サイズが小さいボディ | 簡略化メッシュまたは向きを考慮したインポスター | 視錐台におけるシルエット誤差と遷移のヒステリシス |
連結したカプセル/プリミティブの殻はフィールド診断用であり、マニフォールドボディであることの証明にはなりません。範囲ごとに主要な表現を1つ選び、それでは表現できない機能やトポロジー変化を明記します。
各範囲に出荷用表現が1つ定義され、ジオメトリ/キャッシュの識別情報が定まり、各遷移に物理ピクセル単位の誤差ゲート、ヒステリシス/滞留時間、同時使用メモリーの予算、リセット動作が設定された時点で、このステップは完了です。
3. 生成されたボディをコンパイルする
選択した分岐で、フィールド由来のボディ、抽出したスキン、スキニング、 補正、セマンティックリグ、クリーチャーのロコモーション、または 繰り返し使用するポーズの保存が必要な場合は、該当するセクションだけを creature-body-systems.mdから読み込みます。
- 選択したすべての分岐で、スペースと状態の所有権 と仕様とコンパイラーを読みます。
- 生成ボディの作業では、フィールドとブレンドの契約 と参照サーフェスと補正を読みます。
- リグまたはロコモーションの作業では、ポーズとロコモーションを読みます。
- 繰り返し使用する個体群の作業では、繰り返し個体群とレンダリングを読みます。
- 検証では、選択した分岐に対応する完了を示す証拠を読みます。
ボディが剛体シェルまたはプレートの階層で構成される場合は、 articulated-hard-shell-creatures.mdを読みます。 安定したセグメント/ジョイントのセマンティックID、閉じたサーフェス、親ローカルのピボットを維持し、 可視表示、シャドウ/深度、バウンディング、モーションベクトルで 単一の変換経路を使用します。
負荷の高い作業は、可視化する前にコンパイルします。対象は、仕様の検証、トポロジー、 参照サーフェスまたは閉じたセグメント、ウェイト、候補、フレーム、ジオメトリID、 マテリアル、固定ページレイアウトです。スポーン時に行うのはアクティブスロットの 検証と書き込みであり、ジオメトリの構築やパイプラインのコンパイルは行いません。
このステップは、すべてのグラフ参照とスロットが解決され、該当する場合はCPU/TSLの パリティ検証に合格し、出力されたサーフェスが宣言されたポーズ/形態の範囲全体で有効であり、 キャッシュされた各アーティファクトが、そのアーティファクトに影響する完全なIDを 解決できる場合に完了です。
4. 要求された場合にのみポーズと移動を構築する
ポーズは引き続きクリーチャーのローカル座標に置き、ルートモーションはインスタンス変換で一度だけ適用します。安定したシード付きの変化と、注入されたシミュレーション時刻を使用します。閉形式のモーションは時刻を直接サンプリングします。歩行、スプリング、ロープ、浮力、接触応答は、ローカルまたはルーティングされたシミュレーションステージが管理する固定ステップで進め、表示用には不変の前状態と現状態を保持します。参照サーフェスのスキニングでは、クリーチャー空間でポーズに逆バインド行列を乗算します。剛体のジョイントローカルセグメントは、ジョイントのポーズに直接従います。階層構成の前にジョイント回転を補間し、モーションベクトル用の前回表示変換を固定ステップの履歴とは分けて保持します。
支持面に相対的な四肢については、次のようにします。
- 必要なプローブを同一のサンプル時刻/バージョンでバッチ処理します。
- 安定した支持面/フィーチャーの識別情報と、支持面のローカル座標での接地点を保持します。
- 支持面の接線フレームで歩行時の基準位置とスイング軌道を生成します。
- 表現された支持点の速度に対する胴体速度を基に、ターゲットを予測します。
- 逆ルート変換を通じて、ターゲットを胴体空間に変換します。
- スケールに相対的な到達範囲/条件数のゲートを使用してIKを解き、解消されていない接触残差があれば公開します。二次ライターの実行後に接触を再確認し、その後にポーズ適用後の境界ボックスを更新します。
支持面、水、空気、重力、天候、または物理的な接触が関与する場合は、単位、フレーム/原点、間隔またはサンプル時刻、頻度/サンプル位相、生成元/消費先/バージョン、フットプリント/フィルター、有効性/陳腐化/誤差、およびレートか積分値かの意味を含め、受け渡しを定義します。水面の動きと物質的な流れは別々のチャネルです。表現データがない場合、それは物理的なゼロではなく不在として扱います。フレームクリティカルな判断では、GPUからの読み戻しではなく、解析的なミラー、決定論的な共有フィールド、または遅延/誤差を明示したバッチプロバイダーを使用します。
一方向の視覚的な連携では、物理的な反作用を返しません。双方向のルートでは、受け渡しで指定された権威あるソルバーに、ソース量/反作用量を送ります。このスキルが管理するのはクリーチャーのポーズと構造応答であり、独自の地形、水、風、重力、接触状態ではありません。
このステップの完了条件は、シード/ティック/入力が同じならポーズが再現されること、レンダリング頻度によって再帰状態が変化しないこと、支持面に対するドリフトと四肢の長さの残差が許容範囲を満たすこと、必要なプロバイダーチャネルが誤差の上限付きで存在すること、そしてすべてのポーズライターに決定論的な順序と最終的な接触/制限の検証があることです。単に最後に書き込んだものを採用するルールだけでは不十分です。
5. 個体数をスケールし、一度だけ表示する
リソースを割り当てる前に、標準レンダラーを初期化します。
import { WebGPURenderer } from 'three/webgpu';
const renderer = new WebGPURenderer({ antialias: false });
await renderer.init();
if (renderer.backend.isWebGPUBackend !== true) {
throw new Error('WebGPU backend unavailable for the canonical creature path.');
}
- ジオメトリは、コンパイラー/トポロジー/ジオメトリ/ティアの識別情報が互換な場合にのみ共有します。種のラベルだけではバッチキーになりません。
- 固定容量のページに、クリーチャーのローカルポーズ、ルート変換、境界ボックス、安定した識別情報、表現、履歴の世代を格納します。まとめたダーティ範囲のみアップロードします。
- ポーズ適用後のプリミティブ/セグメントの境界ボックス、または実証済みの保守的なアニメーション範囲を使用します。描画前にページとインスタンスをカリングします。
- シェーダーのループは、実際のパーツ数/候補数を上限とします。候補の評価では、作成時に定義されたブレンドの祖先関係と、省略の証明情報を維持します。
- 繰り返し描画する輪郭には、個体群ID/法線/深度を用いた単一のエッジパスを使用します。計測済みのヒーローブランチに限り、オフセットした重複アイソサーフェスボディを使用します。
- 表示パスとシャドウキャストパスで同じ変形済みローカル位置を再利用し、受ける影の参照はワールド空間で導出します。
- 作成時に指定されたsRGBを一度だけデコードしてから、線形のユニフォーム/ストレージで使用します。トーンマッピングと出力変換は、単一のシーンパイプラインが管理します。
- 出荷するすべての表示、深度/シャドウ、輪郭、および設定済みの出力バリアントを、初めて表示される前に事前コンパイルします。
このステップの完了条件は、個体群のページが容量/寿命の上限を持つこと、静的または変化のないポーズで不要な再帰処理が発生しないこと、境界ボックスが正しくカリングされること、表示/深度/シャドウ/モーションが同じ確定済みポーズ世代を使用すること、そして最終出力変換を担当するコンポーネントが一つだけであることです。
6. 表現、状態、ライフサイクルを検証する
最終出力/後処理なしの出力と、選択した診断結果を確認します。
body: field/normal/candidate views, topology, skin weights, segment IDs,
correction residual, inversions/intersections, silhouette
rig: slot/parent IDs, joint limits, radial frames, planted support and IK,
previous/current pose and history generation
population: page occupancy, dirty ranges, posed bounds, culling, LOD/impostor,
visible/shadow/depth/motion parity
固定シードでのリプレイ、ティックのシークとステップ実行、ポーズと形態の完全なエンベロープ、レンダリングのヒッチ、傾斜または移動する支持面、欠落・古い・不連続なプロバイダーデータ、スポーン/死亡/テレポート/親の変更/スロットの再利用、トポロジー/LODの変更、リサイズ、破棄を試します。
コンパイラー/サーフェス数、フィールドの同等性とサーフェス誤差、移動のドリフトと収束、表示/送信されたページとインスタンス、ダーティなアップロードのバイト数、フィールド/補正の評価回数、CPU固定ステップのコスト、フレーム全体およびペアごとの限界CPU/GPU p50/p95、ピーク時のライブバイト数、初回表示までのパイプラインイベント、目標動作の持続性を報告します。
失敗の兆候には、プリミティブなシートをマニフォールドボディとして出荷する、パーツ名の変更でブレンドフィールドが変化する、接触している四肢間でスキンウェイトが交差する、ヘルパー軸でフレームが反転する、ルート変換が二重に適用される、レンダー dt に基づく歩行周期、支持面でのドリフト、水路の混同、全体で共有される可変な個体群バッファーが1つだけある、シェーダーループに上限がない、カリングが無効になっている、パス間でポーズの世代が一致しない、破棄後もリソース/状態が残る、などがあります。
選択した表現、リグ/移動、個体群、出力、リセット、予算、破棄のすべてのゲートに合格し、未選択の分岐に必須のペイロードや証拠がない場合、検証は完了です。
ルーティングの境界
一般的なトランスフォームのタイムラインとスプリングには $threejs-procedural-motion-systems、汎用メッシュライターには $threejs-procedural-geometry、再利用可能なフィールド/マテリアル座標には $threejs-procedural-fields、植物には $threejs-procedural-vegetation、対象シーンのビジュアルコントラクトには $threejs-visual-validation を使用してください。このスキルの対象は、プロシージャルなクリーチャーボディ、セマンティックリグ、クリーチャーの移動、ポーズの保存、個体群の反復表現です。インポートした glTF クリップ、リターゲティング、VAT アニメーションは、インポートしたアセットのキャラクターパイプラインに属します。