game-transform-systems について
game-transform-systems は、ゲームプレイ、レンダリング、物理、ツールの変換コードを明確かつテスト可能にするスキルです。変換の合成、逆変換、検証のための規約と確認方法を示します。
主な機能
- 01座標空間と規約の整理
- 02方向を示す変換名と合成
- 03クエリへの逆変換の適用
- 04カメラと投影の確認
- 05往復テストと軸のデバッグ
活用シーン
- 01ゲームプレイとレンダリングの変換統一
- 02衝突やフィールドのクエリをオブジェクト空間へ移動
- 03カメラの投影と逆投影の確認
- 04行列順序や座標空間の誤りの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill game-transform-systemsインストール後、Claude Code で/game-transform-systemsを入力して読み込まれたか確認します。
詳細
ゲームの変換システム
このスキルを使うと、ゲームプレイ、レンダリング、物理演算、ツール全体で、変換コードを明示的で組み合わせ可能かつテスト可能な、一貫性のあるものにできます。
主な参考資料:Oleksandr Kaleniuk 著『Geometry for Programmers』 (https://www.manning.com/books/geometry-for-programmers)。特に第 4 章を参考に、内容を再構成し、言い換えています。補足資料:Khronos glTF 2.0 仕様の変換および座標系の規約 (https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html)。
基本的なワークフロー
- 関連するすべての座標空間を列挙します。モデル、ローカル、親、ワールド、ビュー、クリップ、スクリーン、テクスチャ、グリッド、フィールド空間などです。
- 規約を一度だけ定義します。右手系・左手系、上方向の軸、単位、行ベクトル・列ベクトル、行列のメモリレイアウト、乗算順序、角度の単位、クォータニオンの順序などです。
local_to_worldやworld_to_viewのように、変換の方向がわかる名前を付けます。- 変換の合成は一箇所で行い、再利用する合成済み行列はキャッシュします。
- クエリをより単純な空間に移すために逆変換を使います。特に、ピッキング、SDF、フィールド、オブジェクトローカルな衝突判定で役立ちます。
- カメラの構築に必要な項目を明示します。位置、ターゲットまたは前方ベクトル、上方向ベクトル、視野角、アスペクト比、ニア・ファー平面などです。
- ゲームプレイの挙動を調整する前に、往復テストとデバッグ軸で検証します。
設計ルール
- 変換はヘルパーメソッドに隠れた副作用ではなく、第一級のデータとして扱います。
- レンダリングとゲームプレイで、一貫した変換チェーンを使うことを優先します。エンジンやアセットとの境界にはアダプターを追加します。
- 平行移動、投影、行列の合成を一つのパイプラインで扱う必要がある場合は、同次座標を使います。
- 通常の回転、平行移動、スケール、せん断にはアフィン変換を使います。
- 透視投影、射影、または平面ワーピングが問題に含まれる場合は、射影変換を使います。
- オブジェクトの変換ごとにフィールドの式を書き換えるのではなく、SDF またはフィールドの入力に逆変換を適用します。
- 非一様スケールまたはせん断が起こり得る場合は、法線に逆転置行列を適用します。
カメラと投影の確認
- カメラの向きを定義するには、十分な制約が必要です。位置とターゲットだけでは、上・右・下方向のベクトル、またはそれに相当する情報がない限り、ロールは決まりません。
- ニア・ファー平面はプレイ可能な範囲に合わせます。値が適切でないと、深度精度が低下します。
- 既知のスクリーン中央、ビューポートの四隅、ニア平面、ファー平面上の点を使って、投影と逆投影をテストします。
- ピッキングや UI・ゲーム内の操作に備えて、スクリーン空間における y 軸の方向とピクセル中心の規約を文書化します。
変換のデバッグチェックリスト
- 選択したオブジェクトのローカル軸を描画します。
- カメラの視錐台とニア・ファー平面を描画します。
- 変数名で変換の方向がわかるようにします。
- レンダリングや物理演算に渡す前に、行列が有限値であることをアサートします。
- 単位行列、平行移動のみ、回転のみ、スケールのみ、親子関係、逆変換との往復をテストします。
- 法線、衝突判定、子の変換に影響する場合は、非一様スケールをテストします。
よくある間違い
- 行優先のメモリレイアウトと、行ベクトルの計算規約を混同する。
- 一見もっともらしいものの、誤った順序で変換を乗算する。
- 点ごとの処理が密なループ内で逆行列を再計算する。
- 同次座標では
w = 0が方向、w = 1が点を表すことを忘れる。 - クエリ点を逆変換せず、オブジェクトの変換を SDF の出力に適用する。
- カメラの制約ではなくアセットの向きを変えて、カメラのロールのバグを修正する。
コメント
Markdown 対応