game-sdf-and-field-modeling について
ゲーム開発者やゲーム制作エージェント向けに、三角形メッシュではなくスカラー場、ベクトル場、符号付き距離場でゲームプレイやコンテンツを表現するスキルです。場の合成、変換、距離の有効性、ゲームや描画データへの利用方法を扱います。
主な機能
- 01スカラー場、ベクトル場、距離場
- 02ブール演算と場の滑らかな合成
- 03サンプル点のローカル空間への変換
- 04距離の有効性を保つための規則
- 05場のサンプリングと可視化の指針
活用シーン
- 01プロシージャルな岩や洞窟のモデル化
- 02影響場、危険場、風場の作成
- 03メッシュ抽出前の編集可能なボリューム表現
- 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)。
基本ワークフロー
- フィールドのシグネチャを定義します。入力となる空間上の点、返される値、符号規約の意味を決めます。
- 関数が真の距離フィールドである必要があるか、符号のような値を返す陰関数でよいかを選択します。
- まずプリミティブフィールドを作成し、変換、ブーリアン演算、ブレンド、オフセット、変形フィールドを使って合成します。
- 入力点にはオブジェクト変換の逆変換を適用します。平行移動、回転、スケーリングごとにプリミティブを書き換えないでください。
- どの演算が真の距離としての意味を保ち、どの演算が失わせるかを追跡します。
- フィールドをゲームプレイやレンダリング可能なデータに変換する方法を決めます。直接サンプリング、レイマーチング、メッシュ抽出、ボクセル化、パーティクル、デカール、衝突プローブなどがあります。
- スライス、等値線、勾配矢印、サンプル点、符号ごとの色を使って、視覚的なデバッグを追加します。
フィールドの種類
- スカラー場:各点で数値を返します。地形の高さ、影響度、熱、霧、危険度、符号付き距離、密度に使用します。
- SDF:内部では負、境界上ではゼロ、外部では正の値を返し、真の SDF である間は絶対値が距離になります。
- ベクトル場:各点でベクトルを返します。風、流れ、操舵、力場、変形、フローに使用します。
- 変形フィールド:モデル化するオブジェクトと同じ空間で変位ベクトルを返します。
- 陰関数による代替表現:符号のような値を返しますが、真の距離ではありません。有用ですが、距離の大きさを必要とする演算には安全に使えません。
SDF 演算
- 和集合:2 つのフィールドの最小値を取ります。
- 共通部分:2 つのフィールドの最大値を取ります。
- 差集合:2 つ目のフィールドを反転し、1 つ目のフィールドとの共通部分を取ります。
- 真の SDF に対する膨張・侵食:プロジェクトの符号規約に従って、定数を加算または減算します。
- 中空化:絶対距離とシェル幅を使って、境界付近の帯をシェルに変換します。
- スムーズブレンド:有機的な形状に便利ですが、厳密な距離としての意味が損なわれる場合があります。
距離の有効性に関するルール
- 真の SDF は、信頼性の高いオフセットや勾配に基づく移動に利用できます。
- ブーリアン合成では通常、符号の振る舞いは保たれますが、すべての場所で正確な距離が保たれるわけではありません。
- メタボール、レムニスケート、密度関数、多くのプロシージャルな数式は、真の SDF ではなく陰関数フィールドです。
- 距離としての有効性が失われた後、正確な距離に依存するアルゴリズムで使う前に、距離を再初期化または再計算します。
- ノイズの多いフィールドやサンプリングされたフィールドの勾配には、フィルタリングまたは堅牢な有限差分が必要です。
ゲームでの使用例
- プロシージャルな岩、洞窟、塊、シールド、ゾーン、デカール、有機的な小道具。
- メッシュやボクセルに変換する前の、破壊可能または編集可能なボリューム。
- AI 用の影響度マップ、危険フィールド、霧の密度、風、水流、力場。
- メッシュのトポロジーが信頼できないボリュームに対する、低コストの内外判定。
よくある間違い
- すべての陰関数を真の SDF として扱う。
- 距離としての有効性を確認せず、ブーリアン演算後にオフセットを適用する。
- ホットパスで、サンプルごとに変換や高コストな近傍検索を再計算する。
- フィールドのサンプリング解像度が低すぎるのに、抽出アルゴリズムのせいにする。
- スライスや等値線のデバッグ表示なしでフィールド処理をリリースする。