mcpField
G
game-sdf-and-field-modeling

game-sdf-and-field-modeling

github.com/lvtd-llc開発159 回インストール8 週間前に更新
リポジトリ

game-sdf-and-field-modeling について

ゲーム開発者やゲーム制作エージェント向けに、三角形メッシュではなくスカラー場、ベクトル場、符号付き距離場でゲームプレイやコンテンツを表現するスキルです。場の合成、変換、距離の有効性、ゲームや描画データへの利用方法を扱います。

主な機能

  1. 01スカラー場、ベクトル場、距離場
  2. 02ブール演算と場の滑らかな合成
  3. 03サンプル点のローカル空間への変換
  4. 04距離の有効性を保つための規則
  5. 05場のサンプリングと可視化の指針

活用シーン

  1. 01プロシージャルな岩や洞窟のモデル化
  2. 02影響場、危険場、風場の作成
  3. 03メッシュ抽出前の編集可能なボリューム表現
  4. 04メッシュトポロジーに頼らない体積内判定

インストール

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

$npx skills add https://github.com/lvtd-llc/skills --skill game-sdf-and-field-modeling

インストール後、Claude Code で/game-sdf-and-field-modelingを入力して読み込まれたか確認します。

詳細

ゲームの SDF とフィールドモデリング

ゲームシステムを明示的な三角形ではなく、空間上の関数として表現したほうが適している場合に、このスキルを使用します。フィールドはレンダリング上の小技としてだけでなく、ゲームプレイやコンテンツ制作のツールとして扱います。

主な参考資料:Oleksandr Kaleniuk 著『Geometry for Programmers』 (https://www.manning.com/books/geometry-for-programmers)。特に第 2、8、10、11 章を参考に、変換して言い換えています。その他の参考資料: NVIDIA GPU Gems 3 第 34 章「Signed Distance Fields Using Single-Pass GPU Scan Conversion of Tetrahedra」 (https://developer.nvidia.com/gpugems/gpugems3/part-v-physics-simulation/chapter-34-signed-distance-fields-using-single-pass-gpu)、 および Perry、Frisken、Jones 著「Designing with Distance Fields」 (https://merl.com/publications/TR2006-054)。

基本ワークフロー

  1. フィールドのシグネチャを定義します。入力となる空間上の点、返される値、符号規約の意味を決めます。
  2. 関数が真の距離フィールドである必要があるか、符号のような値を返す陰関数でよいかを選択します。
  3. まずプリミティブフィールドを作成し、変換、ブーリアン演算、ブレンド、オフセット、変形フィールドを使って合成します。
  4. 入力点にはオブジェクト変換の逆変換を適用します。平行移動、回転、スケーリングごとにプリミティブを書き換えないでください。
  5. どの演算が真の距離としての意味を保ち、どの演算が失わせるかを追跡します。
  6. フィールドをゲームプレイやレンダリング可能なデータに変換する方法を決めます。直接サンプリング、レイマーチング、メッシュ抽出、ボクセル化、パーティクル、デカール、衝突プローブなどがあります。
  7. スライス、等値線、勾配矢印、サンプル点、符号ごとの色を使って、視覚的なデバッグを追加します。

フィールドの種類

  • スカラー場:各点で数値を返します。地形の高さ、影響度、熱、霧、危険度、符号付き距離、密度に使用します。
  • SDF:内部では負、境界上ではゼロ、外部では正の値を返し、真の SDF である間は絶対値が距離になります。
  • ベクトル場:各点でベクトルを返します。風、流れ、操舵、力場、変形、フローに使用します。
  • 変形フィールド:モデル化するオブジェクトと同じ空間で変位ベクトルを返します。
  • 陰関数による代替表現:符号のような値を返しますが、真の距離ではありません。有用ですが、距離の大きさを必要とする演算には安全に使えません。

SDF 演算

  • 和集合:2 つのフィールドの最小値を取ります。
  • 共通部分:2 つのフィールドの最大値を取ります。
  • 差集合:2 つ目のフィールドを反転し、1 つ目のフィールドとの共通部分を取ります。
  • 真の SDF に対する膨張・侵食:プロジェクトの符号規約に従って、定数を加算または減算します。
  • 中空化:絶対距離とシェル幅を使って、境界付近の帯をシェルに変換します。
  • スムーズブレンド:有機的な形状に便利ですが、厳密な距離としての意味が損なわれる場合があります。

距離の有効性に関するルール

  • 真の SDF は、信頼性の高いオフセットや勾配に基づく移動に利用できます。
  • ブーリアン合成では通常、符号の振る舞いは保たれますが、すべての場所で正確な距離が保たれるわけではありません。
  • メタボール、レムニスケート、密度関数、多くのプロシージャルな数式は、真の SDF ではなく陰関数フィールドです。
  • 距離としての有効性が失われた後、正確な距離に依存するアルゴリズムで使う前に、距離を再初期化または再計算します。
  • ノイズの多いフィールドやサンプリングされたフィールドの勾配には、フィルタリングまたは堅牢な有限差分が必要です。

ゲームでの使用例

  • プロシージャルな岩、洞窟、塊、シールド、ゾーン、デカール、有機的な小道具。
  • メッシュやボクセルに変換する前の、破壊可能または編集可能なボリューム。
  • AI 用の影響度マップ、危険フィールド、霧の密度、風、水流、力場。
  • メッシュのトポロジーが信頼できないボリュームに対する、低コストの内外判定。

よくある間違い

  • すべての陰関数を真の SDF として扱う。
  • 距離としての有効性を確認せず、ブーリアン演算後にオフセットを適用する。
  • ホットパスで、サンプルごとに変換や高コストな近傍検索を再計算する。
  • フィールドのサンプリング解像度が低すぎるのに、抽出アルゴリズムのせいにする。
  • スライスや等値線のデバッグ表示なしでフィールド処理をリリースする。

コメント